Example #1
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #9
0
  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)