1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-02-20 20:09:11 +00:00

telemetry: automatically download if necessary

If run_benchmark_path isn't specified, Telemetry zip archive will be
downloaded and extracted into dependencies.
This commit is contained in:
Sergei Trofimov 2015-05-13 14:33:13 +01:00
parent e7b58c72ac
commit ee63cbde62

View File

@ -20,6 +20,8 @@ import csv
import math
import shutil
import json
import urllib
import stat
from zipfile import is_zipfile, ZipFile
from collections import defaultdict
@ -42,6 +44,8 @@ TRACE_REGEX = re.compile(r'Trace saved as ([^\n]+)')
# Trace event that signifies rendition of a Frame
FRAME_EVENT = 'SwapBuffersLatency'
TELEMETRY_ARCHIVE_URL = 'http://storage.googleapis.com/chromium-telemetry/snapshots/telemetry.zip'
class Telemetry(Workload):
@ -87,7 +91,7 @@ class Telemetry(Workload):
"""
parameters = [
Parameter('run_benchmark_path', default='run_benchmark',
Parameter('run_benchmark_path', default=None,
description="""
This is the path to run_benchmark script which runs a
Telemetry benchmark. If not specified, the assumption will be
@ -121,6 +125,7 @@ class Telemetry(Workload):
raise WorkloadError('Unexected error from run_benchmark: {}'.format(ret))
if self.extract_fps and 'trace' not in self.run_benchmark_params:
raise ConfigError('"trace" profiler must be enabled in order to extract FPS for Telemetry')
self._resovlve_run_benchmark_path()
def setup(self, context):
self.raw_output = None
@ -175,9 +180,6 @@ class Telemetry(Workload):
self.logger.debug('Extracting FPS...')
_extract_fps(context)
def teardown(self, context):
pass
def build_command(self):
device_opts = ''
if self.device.platform == 'chromeos':
@ -197,6 +199,25 @@ class Telemetry(Workload):
device_opts,
self.run_benchmark_params)
def _resovlve_run_benchmark_path(self):
# pylint: disable=access-member-before-definition
if self.run_benchmark_path:
if not os.path.exists(self.run_bencmark_path):
raise ConfigError('run_benchmark path "{}" does not exist'.format(self.run_benchmark_path))
else:
self.run_benchmark_path = os.path.join(self.dependencies_directory, 'telemetry', 'run_benchmark')
self.logger.debug('run_benchmark_path not specified using {}'.format(self.run_benchmark_path))
if not os.path.exists(self.run_benchmark_path):
self.logger.debug('Telemetry not found locally; downloading...')
local_archive = os.path.join(self.dependencies_directory, 'telemetry.zip')
urllib.urlretrieve(TELEMETRY_ARCHIVE_URL, local_archive)
zf = ZipFile(local_archive)
zf.extractall(self.dependencies_directory)
if not os.path.exists(self.run_benchmark_path):
raise WorkloadError('Could not download and extract Telemetry')
old_mode = os.stat(self.run_benchmark_path).st_mode
os.chmod(self.run_benchmark_path, old_mode | stat.S_IXUSR)
def _extract_fps(context):
trace_files = [a.path for a in context.iteration_artifacts