Index: build/android/pylib/perf/perf_test_instance.py |
diff --git a/build/android/pylib/perf/perf_test_instance.py b/build/android/pylib/perf/perf_test_instance.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5d2f00f372063011a420a9ec730714ad9a4bd44e |
--- /dev/null |
+++ b/build/android/pylib/perf/perf_test_instance.py |
@@ -0,0 +1,113 @@ |
+# Copyright 2015 The Chromium Authors. All rights reserved. |
mikecase (-- gone --)
2016/06/01 17:40:28
nit 2016
rnephew (Reviews Here)
2016/06/01 20:32:05
Done.
|
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import json |
+import logging |
+import os |
+import pickle |
+ |
+from pylib import constants |
+from pylib.base import test_instance |
+from pylib.constants import exit_codes |
+ |
+ |
+def _GetPersistedResult(test_name): |
+ file_name = os.path.join(constants.PERF_OUTPUT_DIR, test_name) |
+ if not os.path.exists(file_name): |
+ logging.error('File not found %s', file_name) |
+ return None |
+ |
+ with file(file_name, 'r') as f: |
+ return pickle.loads(f.read()) |
+ |
+ |
+class PerfTestInstance(test_instance.TestInstance): |
+ def __init__(self, args, _): |
+ self._STR = 'Local Device Perf Test Instance: ' |
jbudorick
2016/06/01 17:44:11
Nothing in here should be specific to a local devi
rnephew (Reviews Here)
2016/06/01 20:32:05
This is just left over debuggign information anywa
|
+ super(PerfTestInstance, self).__init__() |
+ |
+ if args.single_step: |
+ args.single_step = ' '.join(args.single_step_command) |
+ self.steps = args.steps |
jbudorick
2016/06/01 17:44:11
1) Why is so much of this public? It really should
rnephew (Reviews Here)
2016/06/01 20:32:05
Woops. I meant to do a pass through this and make
|
+ self.flaky_steps = args.flaky_steps |
+ self.output_json_list = args.output_json_list |
+ self.print_step = args.print_step |
+ self.single_step = args.single_step |
+ self.no_timeout = args.no_timeout |
+ self.test_filter = args.test_filter |
+ self.dry_run = args.dry_run |
+ self.collect_chartjson_data = args.collect_chartjson_data |
+ self._output_chartjson_data = args.output_chartjson_data |
+ self._get_output_dir_archive = args.get_output_dir_archive |
+ self.max_battery_temp = args.max_battery_temp |
+ self.min_battery_level = args.min_battery_level |
+ self.known_devices_file = args.known_devices_file |
+ |
+ def SetUp(self): |
+ pass |
+ |
+ def TearDown(self): |
+ pass |
+ |
+ def OutputJsonList(self): |
+ with file(self.steps, 'r') as i: |
+ all_steps = json.load(i) |
+ |
+ step_values = [] |
+ for k, v in all_steps['steps'].iteritems(): |
+ data = {'test': k, 'device_affinity': v['device_affinity']} |
+ |
+ persisted_result = _GetPersistedResult(k) |
+ if persisted_result: |
+ data['start_time'] = persisted_result['start_time'] |
+ data['end_time'] = persisted_result['end_time'] |
+ data['total_time'] = persisted_result['total_time'] |
+ data['has_archive'] = persisted_result['archive_bytes'] is not None |
+ step_values.append(data) |
+ |
+ with file(self.output_json_list, 'w') as o: |
+ o.write(json.dumps(step_values)) |
+ return 0 |
+ |
jbudorick
2016/06/01 17:44:11
nit: only one line between member functions
rnephew (Reviews Here)
2016/06/01 20:32:05
Done.
|
+ |
+ def PrintTestOutput(self): |
+ """Helper method to print the output of previously executed test_name. |
+ |
+ Test_name is passed from the command line as print_step |
+ |
+ Returns: |
+ exit code generated by the test step. |
+ """ |
+ persisted_result = _GetPersistedResult(self.print_step) |
+ if not persisted_result: |
+ return exit_codes.INFRA |
+ logging.info('*' * 80) |
+ logging.info('Output from:') |
+ logging.info(persisted_result['cmd']) |
+ logging.info('*' * 80) |
+ |
+ output_formatted = '' |
+ persisted_outputs = persisted_result['output'] |
+ for i in xrange(len(persisted_outputs)): |
+ output_formatted += '\n\nOutput from run #%d:\n\n%s' % ( |
+ i, persisted_outputs[i]) |
+ print output_formatted |
+ |
+ if self._output_chartjson_data: |
+ with file(self._output_chartjson_data, 'w') as f: |
+ f.write(persisted_result['chartjson']) |
+ |
+ if self._get_output_dir_archive: |
+ if persisted_result['archive_bytes'] is not None: |
+ with file(self._get_output_dir_archive, 'wb') as f: |
+ f.write(persisted_result['archive_bytes']) |
+ else: |
+ logging.error('The output dir was not archived.') |
+ |
+ return persisted_result['exit_code'] |
+ |
+ #override |
+ def TestType(self): |
+ return 'Perf' |
+ |