1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-04-18 08:40:47 +01:00
John Richardson 118112a9fc Move file management logic to per worload run
Move file management steps to initialize and finalize methods instead of
setup and teardown. These steps should be performed per run instead of
per iteration. Affected workloads: gmail, googlephotos.
2016-05-12 13:00:01 +01:00

108 lines
5.0 KiB
Python
Executable File

import os
import re
from wlauto import AndroidUiAutoBenchmark, Parameter
class Googlephotos(AndroidUiAutoBenchmark):
name = 'googlephotos'
package = 'com.google.android.apps.photos'
activity = 'com.google.android.apps.photos.home.HomeActivity'
view = [package+'/com.google.android.apps.consumerphotoeditor.fragments.ConsumerPhotoEditorActivity',
package+'/com.google.android.apps.photos.home.HomeActivity',
package+'/com.google.android.apps.photos.localmedia.ui.LocalPhotosActivity',
package+'/com.google.android.apps.photos.onboarding.AccountPickerActivity',
package+'/com.google.android.apps.photos.onboarding.IntroActivity']
description = """
A workload to perform standard productivity tasks with googlephotos.
The workload carries out various tasks, such as browsing images, performing
zooms, post-processing and saving a selected image to file.
gesture test - browsing through the wa-working gallery using swipe
gestures and performing pinch gestures for zooming
color test - selects a photograph, increments, resets and decrements color balance
crop test - uses image straightener facility to simultaneously rotate and
crop a selected photograph
rotate tests - selects a photograph and performs 90 degree rotations
NOTE: This workload requires four jpeg files to be placed in the
dependencies directory to run.
Although this workload attempts to be network independent it requires a
network connection (ideally, wifi) to run. This is because the welcome
screen UI is dependent on an existing connection.
"""
parameters = [
Parameter('dumpsys_enabled', kind=bool, default=True,
description="""
If ``True``, dumpsys captures will be carried out during the
test run. The output is piped to log files which are then
pulled from the phone.
"""),
]
instrumentation_log = ''.join([name, '_instrumentation.log'])
file_prefix = 'wa_test_'
def __init__(self, device, **kwargs):
super(Googlephotos, self).__init__(device, **kwargs)
self.output_file = os.path.join(self.device.working_directory, self.instrumentation_log)
def validate(self):
super(Googlephotos, self).validate()
self.uiauto_params['package'] = self.package
self.uiauto_params['output_dir'] = self.device.working_directory
self.uiauto_params['output_file'] = self.output_file
self.uiauto_params['dumpsys_enabled'] = self.dumpsys_enabled
def initialize(self, context):
super(Googlephotos, self).initialize(context)
for entry in os.listdir(self.dependencies_directory):
wa_file = ''.join([self.file_prefix, entry])
if entry.endswith(".jpg"):
self.device.push_file(os.path.join(self.dependencies_directory, entry),
os.path.join(self.device.working_directory, wa_file),
timeout=300)
# Force a re-index of the mediaserver cache to pick up new files
self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard')
def update_result(self, context):
super(Googlephotos, self).update_result(context)
self.device.pull_file(self.output_file, context.output_directory)
result_file = os.path.join(context.output_directory, self.instrumentation_log)
with open(result_file, 'r') as wfh:
pattern = r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)'
regex = re.compile(pattern)
for line in wfh:
match = regex.search(line)
if match:
context.result.add_metric((match.group('key') + "_start"), match.group('value1'))
context.result.add_metric((match.group('key') + "_finish"), match.group('value2'))
context.result.add_metric((match.group('key') + "_duration"), match.group('value3'))
def teardown(self, context):
super(Googlephotos, self).teardown(context)
for entry in self.device.listdir(self.device.working_directory):
if entry.endswith(".log"):
self.device.pull_file(os.path.join(self.device.working_directory, entry),
context.output_directory)
self.device.delete_file(os.path.join(self.device.working_directory, entry))
def finalize(self, context):
super(Googlephotos, self).finalize(context)
for entry in self.device.listdir(self.device.working_directory):
if entry.startswith(self.file_prefix) and entry.endswith(".jpg"):
self.device.delete_file(os.path.join(self.device.working_directory, entry))
# Force a re-index of the mediaserver cache to removed cached files
self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard')