Skip to content

Commit

Permalink
fix: can not stop the process of fps_collector
Browse files Browse the repository at this point in the history
  • Loading branch information
rafa0128 committed Nov 24, 2023
1 parent 7219a10 commit e4ce7a1
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 601 deletions.
36 changes: 31 additions & 5 deletions solox/public/fps_api.py → solox/public/android_fps.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,27 @@ def stop(self):
self.collector_thread = None
if self.fps_queue:
self.fps_queue.task_done()

def get_surfaceview(self):
activity_name = ''
activity_line = ''
try:
dumpsys_result = adb.shell(cmd='dumpsys SurfaceFlinger --list | {} {}'.format(d.filterType(), self.package_name), deviceId=self.device)
dumpsys_result_list = dumpsys_result.split('\n')
for line in dumpsys_result_list:
if line.startswith('SurfaceView') and line.find(self.package_name) != -1:
activity_line = line.strip()
return activity_line

activity_name = dumpsys_result_list[len(dumpsys_result_list) - 1]
if not activity_name.__contains__(self.package_name):
logger.error('get activity name failed, Please provide SurfaceFlinger --list information to the author')
logger.info('dumpsys SurfaceFlinger --list info: {}'.format(dumpsys_result))
except Exception:
traceback.print_exc()
logger.error('get activity name failed, Please provide SurfaceFlinger --list information to the author')
logger.info('dumpsys SurfaceFlinger --list info: {}'.format(dumpsys_result))
return activity_name

def get_surfaceview_activity(self):
activity_name = ''
Expand Down Expand Up @@ -375,6 +396,10 @@ def _get_surfaceflinger_frame_data(self):
fields = []
fields = line.split(",")
if fields and '0' == fields[0]:
# https://www.cnblogs.com/zhengna/p/10032078.html
# 1 INTENDED_VSYNC
# 2 VSYNC
# 13 FRAME_COMPLETED
timestamp = [int(fields[1]), int(fields[2]), int(fields[13])]
if timestamp[1] == pending_fence_timestamp:
continue
Expand All @@ -383,9 +408,10 @@ def _get_surfaceflinger_frame_data(self):
if 2 == PROFILEDATA_line:
break
else:
self.focus_window = self.get_surfaceview_activity()
# self.focus_window = self.get_surfaceview_activity()
self.focus_window = self.get_surfaceview()
results = adb.shell(
cmd='dumpsys SurfaceFlinger --latency %s' % self.focus_window, deviceId=self.device)
cmd='dumpsys SurfaceFlinger --latency \\"%s\\"' % self.focus_window, deviceId=self.device)
results = results.replace("\r\n", "\n").splitlines()
if not len(results):
return (None, None)
Expand Down Expand Up @@ -452,17 +478,17 @@ def save(self):
logger.warning("请在%s类中实现save方法" % type(self))


class TimeUtils_API(object):
class TimeUtils(object):
UnderLineFormatter = "%Y_%m_%d_%H_%M_%S"
NormalFormatter = "%Y-%m-%d %H-%M-%S"
ColonFormatter = "%Y-%m-%d %H:%M:%S"

@staticmethod
def getCurrentTimeUnderline():
return time.strftime(TimeUtils_API.UnderLineFormatter, time.localtime(time.time()))
return time.strftime(TimeUtils.UnderLineFormatter, time.localtime(time.time()))


class FPSMonitor_API(Monitor):
class FPSMonitor(Monitor):
def __init__(self, device_id, package_name=None, frequency=1.0, timeout=24 * 60 * 60, fps_queue=None,
jank_threshold=166, use_legacy=False, surfaceview=True, start_time=None, **kwargs):
super().__init__(**kwargs)
Expand Down
37 changes: 4 additions & 33 deletions solox/public/apm.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@
from solox.public.iosperf._perf import DataType, Performance
from solox.public.adb import adb
from solox.public.common import Devices, File, Method, Platform, Scrcpy
from solox.public.fps import FPSMonitor, TimeUtils
from solox.public.fps_api import FPSMonitor_API, TimeUtils_API

from solox.public.android_fps import FPSMonitor, TimeUtils

d = Devices()
f = File()
Expand Down Expand Up @@ -320,34 +318,12 @@ def __init__(self, pkgName, deviceId, platform=Platform.Android, surfaceview=Tru
self.surfaceview = surfaceview
self.apm_time = datetime.datetime.now().strftime('%H:%M:%S.%f')
self.monitors = None

def getAndroidFps(self, noLog=False):
"""get Android Fps, unit:HZ"""
try:
if self.monitors is None:
self.monitors = FPSMonitor(device_id=self.deviceId, package_name=self.pkgName, frequency=1,
monitors = FPSMonitor(device_id=self.deviceId, package_name=self.pkgName, frequency=1,
surfaceview=self.surfaceview, start_time=TimeUtils.getCurrentTimeUnderline())
self.monitors.start()

# fps, jank = monitors.stop()
fps, jank = self.monitors.get_fps()
if noLog is False:
apm_time = datetime.datetime.now().strftime('%H:%M:%S.%f')
f.add_log(os.path.join(f.report_dir,'fps.log'), apm_time, fps)
f.add_log(os.path.join(f.report_dir,'jank.log'), apm_time, jank)
except Exception as e:
fps, jank = 0
if len(d.getPid(self.deviceId, self.pkgName)) == 0:
logger.error('[FPS] {} : No process found'.format(self.pkgName))
else:
logger.exception(e)
return fps, jank

def getAndroidFpsApi(self, noLog=False):
"""get Android Fps, unit:HZ"""
try:
monitors = FPSMonitor_API(device_id=self.deviceId, package_name=self.pkgName, frequency=1,
surfaceview=self.surfaceview, start_time=TimeUtils_API.getCurrentTimeUnderline())
monitors.start()
fps, jank = monitors.stop()
if noLog is False:
Expand Down Expand Up @@ -375,11 +351,6 @@ def getFPS(self, noLog=False):
"""get fps、jank"""
fps, jank = self.getAndroidFps(noLog) if self.platform == Platform.Android else self.getiOSFps(noLog)
return fps, jank

def getFPS_API(self, noLog=False):
"""get fps、jank"""
fps, jank = self.getAndroidFpsApi(noLog) if self.platform == Platform.Android else self.getiOSFps(noLog)
return fps, jank

class GPU(object):
def __init__(self, pkgName, deviceId):
Expand Down Expand Up @@ -500,7 +471,7 @@ def collectFps(self):
_fps = FPS(self.pkgName, self.deviceId, self.platform, self.surfaceview)
result = {}
while True:
fps, jank = _fps.getFPS_API(noLog=self.noLog)
fps, jank = _fps.getFPS(noLog=self.noLog)
result = {'fps': fps, 'jank': jank}
logger.info(f'fps: {result}')
if time.time() > self.end_time:
Expand Down
2 changes: 1 addition & 1 deletion solox/public/apm_pk.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import time
from solox.public.adb import adb
from solox.public.common import Devices, File
from solox.public.fps import FPSMonitor, TimeUtils
from solox.public.android_fps import FPSMonitor, TimeUtils

d = Devices()
f = File()
Expand Down

0 comments on commit e4ce7a1

Please sign in to comment.