mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-21 20:38:57 +00:00
commit
2f683e59d2
@ -158,37 +158,43 @@ class FpsInstrument(Instrument):
|
|||||||
|
|
||||||
def setup(self, context):
|
def setup(self, context):
|
||||||
workload = context.workload
|
workload = context.workload
|
||||||
if hasattr(workload, 'view'):
|
|
||||||
self.fps_outfile = os.path.join(context.output_directory, 'fps.csv')
|
|
||||||
self.outfile = os.path.join(context.output_directory, 'frames.csv')
|
|
||||||
# Android M brings a new method of collecting FPS data
|
|
||||||
if not self.force_surfaceflinger and (self.device.get_sdk_version() >= 23):
|
|
||||||
# gfxinfo takes in the package name rather than a single view/activity
|
|
||||||
# so there is no 'list_command' to run and compare against a list of
|
|
||||||
# views/activities. Additionally, clearing the stats requires the package
|
|
||||||
# so we need to clear for every package in the workload.
|
|
||||||
# Usually there is only one package, but some workloads may run multiple
|
|
||||||
# packages so each one must be reset before continuing
|
|
||||||
self.fps_method = 'gfxinfo'
|
|
||||||
runcmd = 'dumpsys gfxinfo {} framestats'
|
|
||||||
lstcmd = None
|
|
||||||
params = workload.package
|
|
||||||
params = [params] if isinstance(params, basestring) else params
|
|
||||||
for pkg in params:
|
|
||||||
self.device.execute('dumpsys gfxinfo {} reset'.format(pkg))
|
|
||||||
else:
|
|
||||||
self.fps_method = 'surfaceflinger'
|
|
||||||
runcmd = 'dumpsys SurfaceFlinger --latency {}'
|
|
||||||
lstcmd = 'dumpsys SurfaceFlinger --list'
|
|
||||||
params = workload.view
|
|
||||||
self.device.execute('dumpsys SurfaceFlinger --latency-clear ')
|
|
||||||
|
|
||||||
self.collector = LatencyCollector(self.outfile, self.device, params or '',
|
use_gfxinfo = not self.force_surfaceflinger and (self.device.get_sdk_version() >= 23)
|
||||||
self.keep_raw, self.logger, self.dumpsys_period,
|
if use_gfxinfo and not hasattr(workload, 'package'):
|
||||||
runcmd, lstcmd, self.fps_method)
|
self.logger.debug('Workload does not contain a package; falling back to SurfaceFlinger...')
|
||||||
else:
|
use_gfxinfo = False
|
||||||
|
if not use_gfxinfo and not hasattr(workload, 'view'):
|
||||||
self.logger.debug('Workload does not contain a view; disabling...')
|
self.logger.debug('Workload does not contain a view; disabling...')
|
||||||
self.is_enabled = False
|
self.is_enabled = False
|
||||||
|
return
|
||||||
|
|
||||||
|
self.fps_outfile = os.path.join(context.output_directory, 'fps.csv')
|
||||||
|
self.outfile = os.path.join(context.output_directory, 'frames.csv')
|
||||||
|
# Android M brings a new method of collecting FPS data
|
||||||
|
if use_gfxinfo:
|
||||||
|
# gfxinfo takes in the package name rather than a single view/activity
|
||||||
|
# so there is no 'list_command' to run and compare against a list of
|
||||||
|
# views/activities. Additionally, clearing the stats requires the package
|
||||||
|
# so we need to clear for every package in the workload.
|
||||||
|
# Usually there is only one package, but some workloads may run multiple
|
||||||
|
# packages so each one must be reset before continuing
|
||||||
|
self.fps_method = 'gfxinfo'
|
||||||
|
runcmd = 'dumpsys gfxinfo {} framestats'
|
||||||
|
lstcmd = None
|
||||||
|
params = workload.package
|
||||||
|
params = [params] if isinstance(params, basestring) else params
|
||||||
|
for pkg in params:
|
||||||
|
self.device.execute('dumpsys gfxinfo {} reset'.format(pkg))
|
||||||
|
else:
|
||||||
|
self.fps_method = 'surfaceflinger'
|
||||||
|
runcmd = 'dumpsys SurfaceFlinger --latency {}'
|
||||||
|
lstcmd = 'dumpsys SurfaceFlinger --list'
|
||||||
|
params = workload.view
|
||||||
|
self.device.execute('dumpsys SurfaceFlinger --latency-clear ')
|
||||||
|
|
||||||
|
self.collector = LatencyCollector(self.outfile, self.device, params or '',
|
||||||
|
self.keep_raw, self.logger, self.dumpsys_period,
|
||||||
|
runcmd, lstcmd, self.fps_method)
|
||||||
|
|
||||||
def start(self, context):
|
def start(self, context):
|
||||||
if self.is_enabled:
|
if self.is_enabled:
|
||||||
|
@ -29,11 +29,13 @@ class ManualWorkloadConfig(object):
|
|||||||
duration=None, # Seconds
|
duration=None, # Seconds
|
||||||
user_triggered=None,
|
user_triggered=None,
|
||||||
view=None,
|
view=None,
|
||||||
|
package=None,
|
||||||
enable_logcat=True
|
enable_logcat=True
|
||||||
):
|
):
|
||||||
self.user_triggered = user_triggered if user_triggered is not None else (False if duration else True)
|
self.user_triggered = user_triggered if user_triggered is not None else (False if duration else True)
|
||||||
self.duration = duration or (None if self.user_triggered else self.default_duration)
|
self.duration = duration or (None if self.user_triggered else self.default_duration)
|
||||||
self.view = view
|
self.view = view
|
||||||
|
self.package = package
|
||||||
self.enable_logcat = enable_logcat
|
self.enable_logcat = enable_logcat
|
||||||
|
|
||||||
|
|
||||||
@ -56,8 +58,16 @@ class ManualWorkload(Workload):
|
|||||||
is not specified, and ``False`` otherwise.
|
is not specified, and ``False`` otherwise.
|
||||||
"""),
|
"""),
|
||||||
Parameter('view', default='SurfaceView',
|
Parameter('view', default='SurfaceView',
|
||||||
description="""Specifies the View of the workload. This enables instruments that require a
|
description="""Specifies the View of the workload. This enables instruments that
|
||||||
View to be specified, such as the ``fps`` instrument."""),
|
require a View to be specified, such as the ``fps`` instrument.
|
||||||
|
This is required for using "SurfaceFlinger" to collect FPS statistics
|
||||||
|
and is primarily used on devices pre API level 23"""),
|
||||||
|
Parameter('package',
|
||||||
|
description="""Specifies the package name of the workload. This enables
|
||||||
|
instruments that require a Package to be specified, such
|
||||||
|
as the ``fps`` instrument. This allows for "gfxinfo" to
|
||||||
|
be used and is the preferred method of collection for FPS
|
||||||
|
statistics on devices API level 23+"""),
|
||||||
Parameter('enable_logcat', kind=boolean,
|
Parameter('enable_logcat', kind=boolean,
|
||||||
description='If ``True``, ``manual`` workload will collect logcat as part of the results.'),
|
description='If ``True``, ``manual`` workload will collect logcat as part of the results.'),
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user