def testHtmlOutputGenerationFormatsMultipleTraces(self): trace_results = [] trace_data_builder = trace_data_module.TraceDataBuilder() with open(BATTOR_DATA) as fp: battor_data = fp.read() trace_results.append( trace_result.TraceResult('powerTraceAsString', battor_data)) trace_data_builder.AddTraceFor(trace_data_module.BATTOR_TRACE_PART, battor_data) with open(ATRACE_DATA) as fp: atrace_data = fp.read() trace_results.append( trace_result.TraceResult('systemTraceEvents', atrace_data)) trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PART, atrace_data) with open(COMBINED_PROFILE_CHROME_DATA) as fp: chrome_data = fp.read() trace_results.append( trace_result.TraceResult('traceEvents', json.loads(chrome_data))) trace_data_builder.AddTraceFor(trace_data_module.CHROME_TRACE_PART, json.loads(chrome_data)) trace_results.append( trace_result.TraceResult('systraceController', str({}))) trace_data_builder.AddTraceFor(trace_data_module.TELEMETRY_PART, {}) try: data_builder_out = util.generate_random_filename_for_test() output_generator_out = util.generate_random_filename_for_test() output_generator.GenerateHTMLOutput(trace_results, output_generator_out) trace_data_builder.AsData().Serialize(data_builder_out, 'Systrace') output_generator_md5sum = hashlib.md5( open(output_generator_out, 'rb').read()).hexdigest() data_builder_md5sum = hashlib.md5( open(data_builder_out, 'rb').read()).hexdigest() self.assertEqual(output_generator_md5sum, data_builder_md5sum) finally: def del_if_exist(path): try: os.remove(path) except IOError: pass del_if_exist(output_generator_out) del_if_exist(data_builder_out)
def testHtmlOutputGenerationFormatsMultipleTraces(self): trace_results = [] trace_data_builder = trace_data_module.TraceDataBuilder() with open(BATTOR_DATA) as fp: battor_data = fp.read() trace_results.append( trace_result.TraceResult('powerTraceAsString', battor_data)) trace_data_builder.AddTraceFor( trace_data_module.BATTOR_TRACE_PART, battor_data) with open(ATRACE_DATA) as fp: atrace_data = fp.read() trace_results.append( trace_result.TraceResult('systemTraceEvents', atrace_data)) trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PART, atrace_data) with open(COMBINED_PROFILE_CHROME_DATA) as fp: chrome_data = fp.read() trace_results.append( trace_result.TraceResult('traceEvents', json.loads(chrome_data))) trace_data_builder.AddTraceFor( trace_data_module.CHROME_TRACE_PART, json.loads(chrome_data)) trace_results.append( trace_result.TraceResult('systraceController', str({}))) trace_data_builder.AddTraceFor(trace_data_module.TELEMETRY_PART, {}) try: data_builder_out = util.generate_random_filename_for_test() output_generator_out = util.generate_random_filename_for_test() output_generator.GenerateHTMLOutput(trace_results, output_generator_out) trace_data_builder.AsData().Serialize(data_builder_out, 'Systrace') output_generator_md5sum = hashlib.md5( open(output_generator_out, 'rb').read()).hexdigest() data_builder_md5sum = hashlib.md5( open(data_builder_out, 'rb').read()).hexdigest() self.assertEqual(output_generator_md5sum, data_builder_md5sum) finally: def del_if_exist(path): try: os.remove(path) except IOError: pass del_if_exist(output_generator_out) del_if_exist(data_builder_out)
def testHtmlOutputGenerationFormatsMultipleTraces(self): update_systrace_trace_viewer.update(force_update=True) self.assertTrue( os.path.exists( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)) json_data = open(COMBINED_PROFILE_CHROME_DATA).read() combined_data = json.loads(json_data) trace_results = [] trace_results_expected = [] for (trace_name, data) in combined_data.iteritems(): trace_results.append( trace_result.TraceResult(str(trace_name), str(data))) trace_results_expected.append(str(data).replace(" ", "").strip()) output_file_name = util.generate_random_filename_for_test() final_path = output_generator.GenerateHTMLOutput( trace_results, output_file_name) with open(output_file_name, 'r') as f: html_output = f.read() for i in range(1, len(trace_results)): trace_data = (html_output.split( '<script class="trace-data" type="application/text">') [i].split('</script>'))[0].replace(" ", "").strip() # Ensure the trace data written in HTML is located within the # correct place in the HTML document and that the data is not # malformed. self.assertTrue(trace_data in trace_results_expected) os.remove(final_path) os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
def testHtmlOutputGenerationFormatsSingleTrace(self): update_systrace_trace_viewer.update(force_update=True) self.assertTrue( os.path.exists( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)) with open(ATRACE_DATA) as f: atrace_data = f.read().replace(" ", "").strip() trace_results = [ trace_result.TraceResult('systemTraceEvents', atrace_data) ] output_file_name = util.generate_random_filename_for_test() final_path = output_generator.GenerateHTMLOutput( trace_results, output_file_name) with open(output_file_name, 'r') as f: output_generator.GenerateHTMLOutput(trace_results, f.name) html_output = f.read() trace_data = (html_output.split( '<script class="trace-data" type="application/text">') [1].split('</script>'))[0].replace(" ", "").strip() os.remove(final_path) # Ensure the trace data written in HTML is located within the # correct place in the HTML document and that the data is not # malformed. self.assertEquals(trace_data, atrace_data) os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
def test_tracing(self): TRACE_BUFFER_SIZE = '16384' TRACE_TIME = '5' devices = device_utils.DeviceUtils.HealthyDevices() package_info = util.get_supported_browsers()['stable'] presentation.device = devices[0] output_file_name = util.generate_random_filename_for_test() try: # Launch the browser before tracing. presentation.device.StartActivity(intent.Intent( activity=package_info.activity, package=package_info.package, data='about:blank', extras={'create_new_tab': True}), blocking=True, force_stop=True) # Run atrace agent. run_systrace.main_impl([ './run_systrace.py', '-b', TRACE_BUFFER_SIZE, '-t', TRACE_TIME, '-o', output_file_name, '-e', str(presentation.device), '--atrace-categories=gfx,input,view' ]) # Verify results. with open(output_file_name, 'r') as f: full_trace = f.read() self.assertTrue('CPU#' in full_trace) except: raise finally: if os.path.exists(output_file_name): os.remove(output_file_name)
def test_from_file(self): update_systrace_trace_viewer.update(force_update=True) self.assertTrue( os.path.exists( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)) output_file_name = util.generate_random_filename_for_test() try: # use from-file to create a specific expected output run_systrace.main_impl([ './run_systrace.py', '--from-file', COMPRESSED_ATRACE_DATA, '-o', output_file_name ]) # and verify file contents with contextlib.nested(open(output_file_name, 'r'), open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2): full_trace = f1.read() expected_contents = f2.read() self.assertTrue(expected_contents in full_trace) except: raise finally: os.remove( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE) if os.path.exists(output_file_name): os.remove(output_file_name)
def testHtmlOutputGenerationFormatsMultipleTraces(self): update_systrace_trace_viewer.update(force_update=True) self.assertTrue(os.path.exists( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)) json_data = open(COMBINED_PROFILE_CHROME_DATA).read() combined_data = json.loads(json_data) trace_results = [] trace_results_expected = [] for (trace_name, data) in combined_data.iteritems(): trace_results.append(trace_result.TraceResult(str(trace_name), str(data))) trace_results_expected.append(str(data).replace(" ", "").strip()) output_file_name = util.generate_random_filename_for_test() final_path = output_generator.GenerateHTMLOutput(trace_results, output_file_name) with open(output_file_name, 'r') as f: html_output = f.read() for i in range(1, len(trace_results)): trace_data = (html_output.split( '<script class="trace-data" type="application/text">')[i].split( '</script>'))[0].replace(" ", "").strip() # Ensure the trace data written in HTML is located within the # correct place in the HTML document and that the data is not # malformed. self.assertTrue(trace_data in trace_results_expected) os.remove(final_path) os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
def test_from_file(self): output_file_name = util.generate_random_filename_for_test() try: # use from-file to create a specific expected output run_systrace.main_impl(['./run_systrace.py', '--from-file', COMPRESSED_ATRACE_DATA, '-o', output_file_name]) # and verify file contents with contextlib.nested(open(output_file_name, 'r'), open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2): full_trace = f1.read() expected_contents = f2.read() self.assertTrue(expected_contents in full_trace) except: raise finally: if os.path.exists(output_file_name): os.remove(output_file_name)
def test_tracing(self): TRACE_BUFFER_SIZE = '16384' TRACE_TIME = '5' devices = device_utils.DeviceUtils.HealthyDevices() package_info = util.get_supported_browsers()['stable'] device = devices[0] output_file_name = util.generate_random_filename_for_test() try: # Launch the browser before tracing. device.StartActivity( intent.Intent(activity=package_info.activity, package=package_info.package, data='about:blank', extras={'create_new_tab': True}), blocking=True, force_stop=True) # Run atrace agent. run_systrace.main_impl(['./run_systrace.py', '-b', TRACE_BUFFER_SIZE, '-t', TRACE_TIME, '-o', output_file_name, '-e', str(device), '--atrace-categories=gfx,input,view']) # Verify results. with open(output_file_name, 'r') as f: full_trace = f.read() self.assertTrue('CPU#'in full_trace) except: raise finally: if os.path.exists(output_file_name): os.remove(output_file_name)
def testHtmlOutputGenerationFormatsSingleTrace(self): update_systrace_trace_viewer.update(force_update=True) self.assertTrue(os.path.exists( update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)) with open(ATRACE_DATA) as f: atrace_data = f.read().replace(" ", "").strip() trace_results = [trace_result.TraceResult('systemTraceEvents', atrace_data)] output_file_name = util.generate_random_filename_for_test() final_path = output_generator.GenerateHTMLOutput(trace_results, output_file_name) with open(output_file_name, 'r') as f: output_generator.GenerateHTMLOutput(trace_results, f.name) html_output = f.read() trace_data = (html_output.split( '<script class="trace-data" type="application/text">')[1].split( '</script>'))[0].replace(" ", "").strip() os.remove(final_path) # Ensure the trace data written in HTML is located within the # correct place in the HTML document and that the data is not # malformed. self.assertEquals(trace_data, atrace_data) os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)