Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: build/android/pylib/perf/perf_test_instance.py

Issue 2012323002: [Android] Implement perf tests to platform mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: bug fixes and shuffling Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import json
6 import logging
7 import os
8 import pickle
9
10 from pylib import constants
11 from pylib.base import test_instance
12 from pylib.constants import exit_codes
13
14
15 def _GetPersistedResult(test_name):
16 file_name = os.path.join(constants.PERF_OUTPUT_DIR, test_name)
17 if not os.path.exists(file_name):
18 logging.error('File not found %s', file_name)
19 return None
20
21 with file(file_name, 'r') as f:
22 return pickle.loads(f.read())
23
24
25 class PerfTestInstance(test_instance.TestInstance):
26 def __init__(self, args, _):
27 self._STR = 'Local Device Perf Test Instance: '
28 super(PerfTestInstance, self).__init__()
29
30 if args.single_step:
31 args.single_step = ' '.join(args.single_step_command)
32 self.steps = args.steps
33 self.flaky_steps = args.flaky_steps
34 self.output_json_list = args.output_json_list
35 self.print_step = args.print_step
36 self.single_step = args.single_step
37 self.no_timeout = args.no_timeout
38 self.test_filter = args.test_filter
39 self.dry_run = args.dry_run
40 self.collect_chartjson_data = args.collect_chartjson_data
41 self._output_chartjson_data = args.output_chartjson_data
42 self._get_output_dir_archive = args.get_output_dir_archive
43 self.max_battery_temp = args.max_battery_temp
44 self.min_battery_level = args.min_battery_level
45 self.known_devices_file = args.known_devices_file
46
47 def SetUp(self):
48 pass
49
50 def TearDown(self):
51 pass
52
53 def OutputJsonList(self):
54 with file(self.steps, 'r') as i:
55 all_steps = json.load(i)
56
57 step_values = []
58 for k, v in all_steps['steps'].iteritems():
59 data = {'test': k, 'device_affinity': v['device_affinity']}
60
61 persisted_result = _GetPersistedResult(k)
62 if persisted_result:
63 data['start_time'] = persisted_result['start_time']
64 data['end_time'] = persisted_result['end_time']
65 data['total_time'] = persisted_result['total_time']
66 data['has_archive'] = persisted_result['archive_bytes'] is not None
67 step_values.append(data)
68
69 with file(self.output_json_list, 'w') as o:
70 o.write(json.dumps(step_values))
71 return 0
72
73
74 def PrintTestOutput(self):
75 """Helper method to print the output of previously executed test_name.
76
77 Test_name is passed from the command line as print_step
78
79 Returns:
80 exit code generated by the test step.
81 """
82 persisted_result = _GetPersistedResult(self.print_step)
83 if not persisted_result:
84 return exit_codes.INFRA
85 logging.info('*' * 80)
86 logging.info('Output from:')
87 logging.info(persisted_result['cmd'])
88 logging.info('*' * 80)
89
90 output_formatted = ''
91 persisted_outputs = persisted_result['output']
92 for i in xrange(len(persisted_outputs)):
93 output_formatted += '\n\nOutput from run #%d:\n\n%s' % (
94 i, persisted_outputs[i])
95 print output_formatted
96
97 if self._output_chartjson_data:
98 with file(self._output_chartjson_data, 'w') as f:
99 f.write(persisted_result['chartjson'])
100
101 if self._get_output_dir_archive:
102 if persisted_result['archive_bytes'] is not None:
103 with file(self._get_output_dir_archive, 'wb') as f:
104 f.write(persisted_result['archive_bytes'])
105 else:
106 logging.error('The output dir was not archived.')
107
108 return persisted_result['exit_code']
109
110 #override
111 def TestType(self):
112 return 'Perf'
jbudorick 2016/06/01 20:46:06 nit: 'perf'
rnephew (Reviews Here) 2016/06/01 21:01:39 I capitalized it because of the old usage here: ht
jbudorick 2016/06/01 21:16:09 Why do we do that? Where is it used? What if we ch
rnephew (Reviews Here) 2016/06/01 21:23:17 I didn't dig into the LogFull() code yet, I'll loo
rnephew (Reviews Here) 2016/06/01 22:14:15 Done.
113
114 @staticmethod
115 def _ReadChartjsonOutput(output_dir):
116 if not output_dir:
117 return ''
118 json_output_path = os.path.join(output_dir, 'results-chart.json')
119 try:
120 with open(json_output_path) as f:
121 return f.read()
122 except IOError:
123 logging.exception('Exception when reading chartjson.')
124 logging.error('This usually means that telemetry did not run, so it could'
125 ' not generate the file. Please check the device running'
126 ' the test.')
127 return ''
128
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698