Skip to content

Commit

Permalink
get metal gpu counters
Browse files Browse the repository at this point in the history
  • Loading branch information
YueChen-C committed Sep 2, 2021
1 parent 23c2437 commit 0b7760f
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 11 deletions.
42 changes: 42 additions & 0 deletions demo/instrument_demo/gpu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""
获取 gup 数据,返回时间序列还没琢磨出来怎么解析
startCollectingCounters 之后会返回参数详解之类的, 一些解析方式,但是看起来依然很费劲
"""
import os
import sys

from ios_device.util.dtx_msg import RawInt64sl

sys.path.append(os.getcwd())

from ios_device.servers.Instrument import InstrumentServer

import time
from ios_device.util import logging

log = logging.getLogger(__name__)


def gup(rpc):

def dropped_message(res):
print( res.selector,res.auxiliaries)


# print(rpc.lockdown.device_id)
rpc.register_undefined_callback(dropped_message)
print(rpc.call('com.apple.instruments.server.services.deviceinfo','machTimeInfo').selector)
print(rpc.call('com.apple.instruments.server.services.gpu','requestDeviceGPUInfo').selector)
rpc.call("com.apple.instruments.server.services.gpu", "configureCounters:counterProfile:interval:windowLimit:tracingPID:",RawInt64sl(0, 3, 0, -1), 4294967295)
print(rpc.call('com.apple.instruments.server.services.gpu', 'startCollectingCounters').selector)
# rpc.call("com.apple.instruments.server.services.gpu", "")
time.sleep(1000)

rpc.stop()


if __name__ == '__main__':
rpc = InstrumentServer().init()
gup(rpc)
rpc.stop()
47 changes: 37 additions & 10 deletions ios_device/util/dtx_msg.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from enum import Enum

from construct import Struct, Int32ul, Int16ul, Int64ul, Const, Prefixed, GreedyBytes, this, Adapter, Select, \
GreedyRange, Switch, Default
GreedyRange, Switch, Default, Int64sl, Int32sl
from ios_device.util.variables import LOG

from . import Log
Expand All @@ -24,10 +24,20 @@
log = Log.getLogger(LOG.Instrument.value)


class RawObj:
class Raw:
"""特殊参数类型判断"""

class RawObj(Raw):
""" 某些情况 int 类型需要转成 obj
"""
def __init__(self, *data):
self.data = data

class RawInt64sl(Raw):
def __init__(self, *data):
self.data = data

class RawInt32sl(Raw):
def __init__(self, *data):
self.data = data

Expand Down Expand Up @@ -64,8 +74,8 @@ def _encode(self, obj, context, path):
'magic' / Select(Const(0xa, Int32ul), Int32ul),
'type' / Int32ul,
'value' / Switch(this.type,
{2: PlistAdapter(Prefixed(Int32ul, GreedyBytes)), 3: Int32ul, 4: Int64ul, 5: Int32ul,
6: Int64ul},
{2: PlistAdapter(Prefixed(Int32ul, GreedyBytes)), 3: Int32ul, 4: Int64ul, 5: Int32sl,
6: Int64sl},
default=GreedyBytes),
)))
)
Expand All @@ -83,6 +93,16 @@ def append_long(self, value: int):
self.values.append({'type': 4, 'value': value})
return self

def append_signed_int(self, value: int):
""" 有符号 int """
self.values.append({'type': 5, 'value': value})
return self

def append_signed_long(self, value: int):
""" 有符号 long """
self.values.append({'type': 6, 'value': value})
return self

def append_obj(self, value):
self.values.append({'type': 2, 'value': value})
return self
Expand Down Expand Up @@ -184,15 +204,22 @@ def object_to_aux(arg, aux: MessageAux):
aux.append_long(arg)
else:
raise ValueError("num too large")
else:
if isinstance(arg, Enum):
arg = arg.value
elif isinstance(arg, Enum):
arg = arg.value
aux.append_obj(arg)
elif isinstance(arg, Raw):
if isinstance(arg, RawObj):
arg = arg.data
for i in arg:
for i in arg.data:
aux.append_obj(i)
return aux
if isinstance(arg, RawInt32sl):
for i in arg.data:
aux.append_signed_int(i)
if isinstance(arg, RawInt64sl):
for i in arg.data:
aux.append_signed_long(i)
else:
aux.append_obj(arg)

return aux


Expand Down
6 changes: 6 additions & 0 deletions ios_device/util/usbmux.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,12 @@ def __init__(self, socket_path=None):
self.version = 1
self.devices = self.listener.devices # type: List[MuxDevice]

def __enter__(self):
return self

def __exit__(self, *args):
self.listener.close()

def process(self, timeout: float = 0.1):
self.listener.process(timeout)

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

]
setup(name='py_ios_device',
version="2.1.7",
version="2.1.8",
description='Get ios data and operate ios devices',
author='chenpeijie & liyachao',
author_email='[email protected]',
Expand Down

0 comments on commit 0b7760f

Please sign in to comment.