def testMapperDoesntAddValues(self): events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = file_handle.InMemoryFileHandle('/a.json', json.dumps(events)) with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { }); """) as map_script: result = map_single_trace.MapSingleTrace( trace_handle, _Handle(map_script.filename)) self.assertEquals(len(result.failures), 1) self.assertEquals(len(result.pairs), 0) f = result.failures[0] self.assertIsInstance(f, map_single_trace.NoResultsAddedFailure)
def testMapperSkips(self): events = [ {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {}}, {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {}} ] trace_handle = file_handle.InMemoryFileHandle( '/a.json', json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { var canonicalUrl = model.canonicalUrlThatCreatedThisTrace; results.addValue(new tr.v.SkipValue( canonicalUrl, 'SkippedFieldName', {description: 'SkippedReason'})); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, _Handle(map_script.filename)) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, value_module.SkipValue) self.assertEquals(v.name, 'SkippedFieldName') self.assertEquals(v.description, 'SkippedReason')
def testPassingMapScript(self): events = [ {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {}}, {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {}} ] trace_handle = file_handle.InMemoryFileHandle( '/a.json', json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { var canonicalUrl = model.canonicalUrlThatCreatedThisTrace; results.addValue(new tr.v.DictValue( canonicalUrl, 'result', { numProcesses: model.getAllProcesses().length })); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, _Handle(map_script.filename)) self.assertFalse(results.failure_values) v = results.FindValueNamed('result') self.assertEquals(v['numProcesses'], 1)
def testNoMapper(self): events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = file_handle.InMemoryFileHandle('/a.json', json.dumps(events)) with map_single_trace.TemporaryMapScript(""" """) as map_script: result = map_single_trace.MapSingleTrace( trace_handle, _Handle(map_script.filename)) self.assertEquals(len(result.failures), 1) self.assertEquals(len(result.pairs), 0) f = result.failures[0] self.assertIsInstance(f, map_single_trace.FunctionNotDefinedFailure)
def RunMetric(filename, metric, extra_import_options=None): th = file_handle.URLFileHandle(filename, 'file://' + filename) result = map_single_trace.MapSingleTrace(th, _GetMetricRunnerHandle(metric), extra_import_options) return result
def _ProcessOneTrace(self, trace_handle): canonical_url = trace_handle.canonical_url run_reporter = self._progress_reporter.WillRun(canonical_url) result = map_single_trace.MapSingleTrace(trace_handle, self._job) had_failure = len(result.failures) > 0 for f in result.failures: run_reporter.DidAddFailure(f) run_reporter.DidRun(had_failure) self._wq.PostMainThreadTask(self._MergeResultIntoMaster, result)
def _ProcessTrace(self, trace_handle): run_info = trace_handle.run_info subresults = results_module.Results() run_reporter = self._progress_reporter.WillRun(run_info) map_single_trace.MapSingleTrace(subresults, trace_handle, self._map_function_handle) for v in subresults.all_values: run_reporter.DidAddValue(v) self._result_queue.put(subresults) had_failure = subresults.DoesRunContainFailure(run_info) run_reporter.DidRun(had_failure) if self._stop_on_error and had_failure: self._failed_run_info_to_dump = run_info self._abort = True
def _ProcessOneTrace(self, trace_handle): canonical_url = trace_handle.canonical_url subresults = results_module.Results() run_reporter = self._progress_reporter.WillRun(canonical_url) map_single_trace.MapSingleTrace(subresults, trace_handle, self._map_function_handle) had_failure = subresults.DoesRunContainFailure(canonical_url) for v in subresults.all_values: run_reporter.DidAddValue(v) run_reporter.DidRun(had_failure) self._wq.PostMainThreadTask(self._MergeResultsToIntoMaster, trace_handle, subresults)
def _ProcessTrace(self, trace_handle): run_info = trace_handle.run_info subresults = results_module.Results() # TODO: Modify ProgressReporter API to deal with interleaving runs so # that we can use self._progress_reporter here. progress_reporter = gtest_progress_reporter.GTestProgressReporter( sys.stdout) progress_reporter.WillRun(run_info) map_single_trace.MapSingleTrace(subresults, trace_handle, os.path.abspath(self._map_file)) self._result_queue.put(subresults) had_failure = subresults.DoesRunContainFailure(run_info) progress_reporter.DidRun(run_info, had_failure) if self._stop_on_error and had_failure: self._failed_run_info_to_dump = run_info self._abort = True
def testTraceDidntImport(self): trace_string = 'This is intentionally not a trace-formatted string.' trace_handle = file_handle.InMemoryFileHandle('/a.json', trace_string) with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { }); """) as map_script: result = map_single_trace.MapSingleTrace( trace_handle, _Handle(map_script.filename)) self.assertEquals(len(result.failures), 1) self.assertEquals(len(result.pairs), 0) f = result.failures[0] self.assertIsInstance(f, map_single_trace.TraceImportFailure)
def testTraceDidntImport(self): trace_string = 'This is intentionally not a trace-formatted string.' trace_handle = file_handle.InMemoryFileHandle( '/a.json', trace_string) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, _Handle(map_script.filename)) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.TraceImportErrorValue)
def testNoMapper(self): events = [ {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {}}, {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {}} ] trace_handle = file_handle.InMemoryFileHandle( '/a.json', json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, _Handle(map_script.filename)) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.FunctionNotDefinedErrorValue)
def testTraceDidntImport(self): run_info = run_info_module.RunInfo('file:///a.json', '/a.json', metadata={'m': 1}) trace_string = 'This is intentionally not a trace-formatted string.' trace_handle = in_memory_trace_handle.InMemoryTraceHandle( run_info, trace_string) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.MapFunction.register(function MyMapFunction(results, run_info, model) { }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, map_script.filename) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.TraceImportErrorValue)
def testMapperSkips(self): run_info = run_info_module.RunInfo('file:///a.json', '/a.json', metadata={'m': 1}) events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = in_memory_trace_handle.InMemoryTraceHandle( run_info, json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.MapFunction.register(function MyMapFunction(results, run_info, model) { results.addValue(new pi.v.SkipValue( run_info, 'SkippedFieldName', {description: 'SkippedReason'})); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, map_script.filename) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, value_module.SkipValue) self.assertEquals(v.name, 'SkippedFieldName') self.assertEquals(v.description, 'SkippedReason')
def testPassingMapScript(self): run_info = run_info_module.RunInfo('file:///a.json', '/a.json', metadata={'m': 1}) events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = in_memory_trace_handle.InMemoryTraceHandle( run_info, json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.MapFunction.register(function MyMapFunction(results, run_info, model) { results.addValue(new pi.v.DictValue( run_info, 'result', { numProcesses: model.getAllProcesses().length })); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, map_script.filename) v = results.FindValueNamed('result') self.assertEquals(v['numProcesses'], 1)
def testPassingMapScript(self): events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = file_handle.InMemoryFileHandle('/a.json', json.dumps(events)) with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(result, model) { var canonicalUrl = model.canonicalUrlThatCreatedThisTrace; result.addPair('result', { numProcesses: model.getAllProcesses().length }); }); """) as map_script: result = map_single_trace.MapSingleTrace( trace_handle, _Handle(map_script.filename)) self.assertFalse(result.failures) r = result.pairs['result'] self.assertEquals(r['numProcesses'], 1)
def testMapFunctionThatThrows(self): run_info = run_info_module.RunInfo('file:///a.json', '/a.json', metadata={'m': 1}) events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = in_memory_trace_handle.InMemoryTraceHandle( run_info, json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.MapFunction.register(function MyMapFunction(results, run_info, model) { throw new Error('Expected error'); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, map_script.filename) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.MapFunctionErrorValue)
def testMapFunctionThatThrows(self): events = [ {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {}}, {'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {}} ] trace_handle = file_handle.InMemoryFileHandle( '/a.json', json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" pi.FunctionRegistry.register( function MyMapFunction(results, model) { throw new Error('Expected error'); }); """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, _Handle(map_script.filename)) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.MapFunctionErrorValue)
def testNoMapper(self): run_info = run_info_module.RunInfo('file:///a.json', '/a.json', metadata={'m': 1}) events = [{ 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'a', 'cat': 'c', 'ts': 0, 'dur': 10, 'args': {} }, { 'pid': 1, 'tid': 2, 'ph': 'X', 'name': 'b', 'cat': 'c', 'ts': 3, 'dur': 5, 'args': {} }] trace_handle = in_memory_trace_handle.InMemoryTraceHandle( run_info, json.dumps(events)) results = results_module.Results() with map_single_trace.TemporaryMapScript(""" """) as map_script: map_single_trace.MapSingleTrace(results, trace_handle, map_script.filename) self.assertEquals(len(results.all_values), 1) v = results.all_values[0] self.assertIsInstance(v, map_single_trace.MapFunctionNotDefinedErrorValue)
def RunMetrics(filename, metrics): th = file_handle.URLFileHandle(filename, 'file://' + filename) result = map_single_trace.MapSingleTrace(th, _GetMetricRunnerHandle(metrics)) return result