def MapSingleTrace(trace_handle, job, extra_import_options=None): assert (type(extra_import_options) is types.NoneType or type(extra_import_options) is types.DictType), ( 'extra_import_options should be a dict or None.') project = tracing_project.TracingProject() all_source_paths = list(project.source_paths) all_source_paths.append(project.trace_processor_root_path) result = mre_result.MreResult() with trace_handle.PrepareFileForProcessing() as prepared_trace_handle: js_args = [ json.dumps(prepared_trace_handle.AsDict()), json.dumps(job.AsDict()), ] if extra_import_options: js_args.append(json.dumps(extra_import_options)) res = vinn.RunFile( _MAP_SINGLE_TRACE_CMDLINE_PATH, source_paths=all_source_paths, js_args=js_args, # Use 8gb heap space to make sure we don't OOM'ed on big trace. v8_args=['--max-old-space-size=8192']) if res.returncode != 0: sys.stderr.write(res.stdout) result.AddFailure( failure.Failure(job, trace_handle.canonical_url, 'Error', 'vinn runtime error while mapping trace.', 'vinn runtime error while mapping trace.', 'Unknown stack')) return result for line in res.stdout.split('\n'): m = re.match('^MRE_RESULT: (.+)', line, re.DOTALL) if m: found_dict = json.loads(m.group(1)) failures = [ failure.Failure.FromDict(f, job, _FAILURE_NAME_TO_FAILURE_CONSTRUCTOR) for f in found_dict['failures'] ] for f in failures: result.AddFailure(f) for k, v in found_dict['pairs'].iteritems(): result.AddPair(k, v) else: if len(line) > 0: sys.stderr.write(line) sys.stderr.write('\n') if not (len(result.pairs) or len(result.failures)): raise InternalMapError('Internal error: No results were produced!') return result
def testComputeTBMv2Metrics(self): in_results = testing.IntermediateResults([ testing.TestResult( 'benchmark/story1', output_artifacts={ compute_metrics.HTML_TRACE_NAME: testing.Artifact('/trace1.html', 'gs://trace1.html') }, tags=['tbmv2:metric1'], ), testing.TestResult( 'benchmark/story2', output_artifacts={ compute_metrics.HTML_TRACE_NAME: testing.Artifact('/trace2.html', 'gs://trace2.html') }, tags=['tbmv2:metric2'], ), ]) test_dict = histogram.Histogram('a', 'unitless').AsDict() metrics_result = mre_result.MreResult() metrics_result.AddPair('histograms', [test_dict]) with mock.patch(GETSIZE_METHOD) as getsize_mock: with mock.patch(RUN_METRICS_METHOD) as run_metrics_mock: getsize_mock.return_value = 1000 run_metrics_mock.return_value = metrics_result histogram_dicts = compute_metrics.ComputeTBMv2Metrics( in_results) self.assertEqual(histogram_dicts, [test_dict, test_dict]) self.assertEqual(in_results['testResults'][0]['status'], 'PASS') self.assertEqual(in_results['testResults'][1]['status'], 'PASS')
def testAsDict(self): result = mre_result.MreResult() with map_single_trace.TemporaryMapScript(""" tr.mre.FunctionRegistry.register( function MyMapFunction(result, model) { var canonicalUrl = model.canonicalUrl; result.addPair('result', { numProcesses: model.getAllProcesses().length }); }); """) as map_script: module = function_handle.ModuleToLoad(filename=map_script.filename) map_handle = function_handle.FunctionHandle( modules_to_load=[module], function_name='MyMapFunction') job = job_module.Job(map_handle, None) failure = failure_module.Failure(job, '2', '3', 'err', 'desc', 'stack') result.AddFailure(failure) result.AddPair('foo', 'bar') result_dict = result.AsDict() self.assertEquals(result_dict['failures'], [failure.AsDict()]) self.assertEquals(result_dict['pairs'], {'foo': 'bar'})
def testComputeTBMv2MetricsFailure(self): test_result = testing.TestResult( 'benchmark/story1', output_artifacts={ compute_metrics.HTML_TRACE_NAME: testing.Artifact('/trace1.html', 'gs://trace1.html') }, tags=['tbmv2:metric1'], ) test_result['_histograms'] = histogram_set.HistogramSet() metrics_result = mre_result.MreResult() metrics_result.AddFailure(failure.Failure(job.Job(0), 0, 0, 0, 0, 0)) with mock.patch(GETSIZE_METHOD) as getsize_mock: with mock.patch(RUN_METRICS_METHOD) as run_metrics_mock: getsize_mock.return_value = 100 run_metrics_mock.return_value = metrics_result compute_metrics.ComputeTBMv2Metrics(test_result) histogram_dicts = test_result['_histograms'].AsDicts() self.assertEqual(histogram_dicts, []) self.assertEqual(test_result['status'], 'FAIL') self.assertFalse(test_result['expected'])
def testComputeTBMv2Metrics(self): test_result = testing.TestResult( 'benchmark/story1', output_artifacts={ compute_metrics.HTML_TRACE_NAME: testing.Artifact('/trace1.html', 'gs://trace1.html') }, tags=['tbmv2:metric1'], ) test_result['_histograms'] = histogram_set.HistogramSet() test_dict = histogram.Histogram('a', 'unitless').AsDict() metrics_result = mre_result.MreResult() metrics_result.AddPair('histograms', [test_dict]) with mock.patch(GETSIZE_METHOD) as getsize_mock: with mock.patch(RUN_METRICS_METHOD) as run_metrics_mock: getsize_mock.return_value = 1000 run_metrics_mock.return_value = metrics_result compute_metrics.ComputeTBMv2Metrics(test_result) histogram_dicts = test_result['_histograms'].AsDicts() self.assertEqual(histogram_dicts, [test_dict]) self.assertEqual(test_result['status'], 'PASS')
def testComputeTBMv2MetricsFailure(self): in_results = testing.IntermediateResults([ testing.TestResult( 'benchmark/story1', output_artifacts={ compute_metrics.HTML_TRACE_NAME: testing.Artifact('/trace1.html', 'gs://trace1.html') }, tags=['tbmv2:metric1'], ), ]) metrics_result = mre_result.MreResult() metrics_result.AddFailure(failure.Failure(job.Job(0), 0, 0, 0, 0, 0)) with mock.patch(GETSIZE_METHOD) as getsize_mock: with mock.patch(RUN_METRICS_METHOD) as run_metrics_mock: getsize_mock.return_value = 100 run_metrics_mock.return_value = metrics_result histogram_dicts = compute_metrics.ComputeTBMv2Metrics( in_results) self.assertEqual(histogram_dicts, []) self.assertEqual(in_results['testResults'][0]['status'], 'FAIL')
def MapSingleTrace(trace_handle, job, extra_import_options=None, timeout=None): assert (isinstance( extra_import_options, (type(None), dict))), ('extra_import_options should be a dict or None.') project = tracing_project.TracingProject() all_source_paths = list(project.source_paths) all_source_paths.append(project.trace_processor_root_path) result = mre_result.MreResult() with trace_handle.PrepareFileForProcessing() as prepared_trace_handle: js_args = [ json.dumps(prepared_trace_handle.AsDict()), json.dumps(job.AsDict()), ] if extra_import_options: js_args.append(json.dumps(extra_import_options)) # Use 8gb heap space to make sure we don't OOM'ed on big trace, but not # on ARM devices since we use 32-bit d8 binary. if platform.machine() == 'armv7l' or platform.machine() == 'aarch64': v8_args = None else: v8_args = ['--max-old-space-size=8192'] try: res = vinn.RunFile(_MAP_SINGLE_TRACE_CMDLINE_PATH, source_paths=all_source_paths, js_args=js_args, v8_args=v8_args, timeout=timeout) except RuntimeError as e: result.AddFailure( failure.Failure(job, trace_handle.canonical_url, 'Error', 'vinn runtime error while mapping trace.', e.message, 'Unknown stack')) return result stdout = res.stdout if not isinstance(stdout, str): stdout = stdout.decode('utf-8', errors='replace') if res.returncode != 0: sys.stderr.write(stdout) result.AddFailure( failure.Failure(job, trace_handle.canonical_url, 'Error', 'vinn runtime error while mapping trace.', 'vinn runtime error while mapping trace.', 'Unknown stack')) return result for line in stdout.split('\n'): m = re.match('^MRE_RESULT: (.+)', line, re.DOTALL) if m: found_dict = json.loads(m.group(1)) failures = [ failure.Failure.FromDict(f, job, _FAILURE_NAME_TO_FAILURE_CONSTRUCTOR) for f in found_dict['failures'] ] for f in failures: result.AddFailure(f) for k, v in found_dict['pairs'].items(): result.AddPair(k, v) else: if len(line) > 0: sys.stderr.write(line) sys.stderr.write('\n') if not (len(result.pairs) or len(result.failures)): raise InternalMapError('Internal error: No results were produced!') return result
def testAddingNonFailure(self): result = mre_result.MreResult() with self.assertRaises(ValueError): result.AddFailure('foo')