Esempio n. 1
0
def main_impl(arguments):
  # Parse the command line options.
  options, categories = parse_options(arguments)

  # Override --atrace-categories and --ftrace-categories flags if command-line
  # categories are provided.
  if categories:
    if options.target == 'android':
      options.atrace_categories = categories
    elif options.target == 'linux':
      options.ftrace_categories = categories
    else:
      raise RuntimeError('Categories are only valid for atrace/ftrace. Target '
                         'platform must be either Android or Linux.')

  # Include atrace categories by default in Systrace.
  if options.target == 'android' and not options.atrace_categories:
    options.atrace_categories = atrace_agent.DEFAULT_CATEGORIES

  if options.target == 'android' and not options.from_file:
    initialize_devil()
    if not options.device_serial_number:
      devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
      if len(devices) == 0:
        raise RuntimeError('No ADB devices connected.')
      elif len(devices) >= 2:
        raise RuntimeError('Multiple devices connected, serial number required')
      options.device_serial_number = devices[0]

  # If list_categories is selected, just print the list of categories.
  # In this case, use of the tracing controller is not necessary.
  if options.list_categories:
    if options.target == 'android':
      atrace_agent.list_categories(options)
    elif options.target == 'linux':
      ftrace_agent.list_categories(options)
    return

  # Set up the systrace runner and start tracing.
  controller = systrace_runner.SystraceRunner(
      os.path.dirname(os.path.abspath(__file__)), options)
  controller.StartTracing()

  # Wait for the given number of seconds or until the user presses enter.
  # pylint: disable=superfluous-parens
  # (need the parens so no syntax error if trying to load with Python 3)
  if options.from_file is not None:
    print('Reading results from file.')
  elif options.trace_time:
    print('Starting tracing (%d seconds)' % options.trace_time)
    time.sleep(options.trace_time)
  else:
    raw_input('Starting tracing (stop with enter)')

  # Stop tracing and collect the output.
  print('Tracing completed. Collecting output...')
  controller.StopTracing()
  print('Outputting Systrace results...')
  controller.OutputSystraceResults(write_json=options.write_json)
Esempio n. 2
0
def main_impl(arguments):
    # Parse the command line options.
    options, categories = parse_options(arguments)

    # Override --atrace-categories and --ftrace-categories flags if command-line
    # categories are provided.
    if categories:
        if options.target == 'android':
            options.atrace_categories = categories
        elif options.target == 'linux':
            options.ftrace_categories = categories
        else:
            raise RuntimeError(
                'Categories are only valid for atrace/ftrace. Target '
                'platform must be either Android or Linux.')

    if options.target == 'android' and not options.from_file:
        initialize_devil()
        if not options.device_serial_number:
            devices = [
                a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()
            ]
            if len(devices) == 0:
                raise RuntimeError('No ADB devices connected.')
            elif len(devices) >= 2:
                raise RuntimeError(
                    'Multiple devices connected, serial number required')
            options.device_serial_number = devices[0]

    # If list_categories is selected, just print the list of categories.
    # In this case, use of the tracing controller is not necessary.
    if options.list_categories:
        if options.target == 'android':
            atrace_agent.list_categories(options)
        elif options.target == 'linux':
            ftrace_agent.list_categories(options)
        return

    # Set up the systrace runner and start tracing.
    controller = systrace_runner.SystraceRunner(
        os.path.dirname(os.path.abspath(__file__)), options)
    controller.StartTracing()

    # Wait for the given number of seconds or until the user presses enter.
    # pylint: disable=superfluous-parens
    # (need the parens so no syntax error if trying to load with Python 3)
    if options.from_file is not None:
        print('Reading results from file.')
    elif options.trace_time:
        print('Starting tracing (%d seconds)' % options.trace_time)
        time.sleep(options.trace_time)
    else:
        raw_input('Starting tracing (stop with enter)')

    # Stop tracing and collect the output.
    print('Tracing completed. Collecting output...')
    controller.StopTracing()
    print('Outputting Systrace results...')
    controller.OutputSystraceResults(write_json=options.write_json)
Esempio n. 3
0
def main():
  options, categories = parse_options(sys.argv)
  agents = create_agents(options)

  if not agents:
    dirs = DEFAULT_AGENT_DIR
    if options.agent_dirs:
      dirs += ',' + options.agent_dirs
    sys.stderr.write('No systrace agent is available in directories |%s|.\n' %
                     dirs)
    sys.exit(1)

  try:
    from . import update_systrace_trace_viewer
  except ImportError:
    pass
  else:
    update_systrace_trace_viewer.update()

  if options.target == 'android' and not options.device_serial:
    devices = get_device_serials()
    if len(devices) == 0:
      raise RuntimeError('No ADB devices connected.')
    elif len(devices) >= 2:
      raise RuntimeError('Multiple devices connected, serial number required')
    options.device_serial = devices[0]

  if options.list_categories:
    if options.target == 'android':
      atrace_agent.list_categories(options)
    elif options.target == 'linux':
      ftrace_agent.list_categories(options)
    return

  for a in agents:
    a.StartAgentTracing(options, categories, 10)

  if options.trace_time:
    print 'Tracing running for %d seconds.' % options.trace_time
    time.sleep(options.trace_time)
  else:
    print 'Tracing running, stop with ENTER.'
    raw_input()

  for a in agents:
    a.StopAgentTracing(10)

  results = []
  for a in agents:
    new_result = a.GetResults(30)
    results.append(new_result)

  script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
  write_trace_html(options.output_file, script_dir, results)
Esempio n. 4
0
def main():
    # Parse the command line options.
    options, categories = parse_options(sys.argv)

    initialize_devil()

    if options.target == 'android' and not options.device_serial_number:
        devices = util.get_device_serials()
        if len(devices) == 0:
            raise RuntimeError('No ADB devices connected.')
        elif len(devices) >= 2:
            raise RuntimeError(
                'Multiple devices connected, serial number required')
        options.device_serial_number = devices[0]

    # If list_categories is selected, just print the list of categories.
    # In this case, use of the tracing controller is not necessary.
    if options.list_categories:
        if options.target == 'android':
            atrace_agent.list_categories(options)
        elif options.target == 'linux':
            ftrace_agent.list_categories(options)
        return

    # Set up the systrace runner and start tracing.
    script_dir = os.path.dirname(os.path.abspath(__file__))
    controller = systrace_runner.SystraceRunner(script_dir, options,
                                                categories)
    controller.StartTracing()

    # Wait for the given number of seconds or until the user presses enter.
    # pylint: disable=superfluous-parens
    # (need the parens so no syntax error if trying to load with Python 3)
    if options.from_file is not None:
        print('Reading results from file.')
    elif options.trace_time:
        print('Starting tracing (%d seconds)' % options.trace_time)
        time.sleep(options.trace_time)
    else:
        raw_input('Starting tracing (stop with enter)')

    # Stop tracing and collect the output.
    print('Tracing completed. Collecting output...')
    controller.StopTracing()
    print('Outputting Systrace results...')
    controller.OutputSystraceResults(write_json=options.write_json)
Esempio n. 5
0
def main():
  # Parse the command line options.
  options, categories = parse_options(sys.argv)

  if options.target == 'android' and not options.device_serial_number:
    devices = get_device_serials()
    if len(devices) == 0:
      raise RuntimeError('No ADB devices connected.')
    elif len(devices) >= 2:
      raise RuntimeError('Multiple devices connected, serial number required')
    options.device_serial_number = devices[0]

  # If list_categories is selected, just print the list of categories.
  # In this case, use of the tracing controller is not necessary.
  if options.list_categories:
    if options.target == 'android':
      atrace_agent.list_categories(options)
    elif options.target == 'linux':
      ftrace_agent.list_categories(options)
    return

  # Set up the systrace runner and start tracing.
  script_dir = os.path.dirname(os.path.abspath(__file__))
  controller = systrace_runner.SystraceRunner(
      script_dir, options, categories)
  controller.StartTracing()

  # Wait for the given number of seconds or until the user presses enter.
  # pylint: disable=superfluous-parens
  # (need the parens so no syntax error if trying to load with Python 3)
  if options.from_file is not None:
    print('Reading results from file.')
  elif options.trace_time:
    print('Starting tracing (%d seconds)' % options.trace_time)
    time.sleep(options.trace_time)
  else:
    raw_input('Starting tracing (stop with enter)')


  # Stop tracing and collect the output.
  print('Tracing completed. Collecting output...')
  controller.StopTracing()
  print('Outputting Systrace results...')
  controller.OutputSystraceResults(write_json=options.write_json)
Esempio n. 6
0
def main():
    parser = _CreateOptionParser()
    options, _args = parser.parse_args()  # pylint: disable=unused-variable
    if options.trace_cc:
        parser.error("""--trace-cc is deprecated.

For basic jank busting uses, use  --trace-frame-viewer
For detailed study of ubercompositor, pass --trace-ubercompositor.

When in doubt, just try out --trace-frame-viewer.
""")

    if options.verbose:
        logging.getLogger().setLevel(logging.DEBUG)

    if not options.device_serial_number:
        devices = [
            a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()
        ]
        if len(devices) == 0:
            raise RuntimeError('No ADB devices connected.')
        elif len(devices) >= 2:
            raise RuntimeError(
                'Multiple devices connected, serial number required')
        options.device_serial_number = devices[0]
    device = device_utils.DeviceUtils.HealthyDevices(
        device_arg=options.device_serial_number)[0]
    package_info = util.get_supported_browsers()[options.browser]

    options.device = device
    options.package_info = package_info

    # Include Chrome categories by default in profile_chrome.
    if not options.chrome_categories:
        options.chrome_categories = chrome_tracing_agent.DEFAULT_CHROME_CATEGORIES

    if options.chrome_categories in ['list', 'help']:
        ui.PrintMessage('Collecting record categories list...', eol='')
        record_categories = []
        disabled_by_default_categories = []
        record_categories, disabled_by_default_categories = \
            chrome_tracing_agent.ChromeTracingAgent.GetCategories(
                device, package_info)

        ui.PrintMessage('done')
        ui.PrintMessage('Record Categories:')
        ui.PrintMessage('\n'.join('\t%s' % item \
            for item in sorted(record_categories)))

        ui.PrintMessage('\nDisabled by Default Categories:')
        ui.PrintMessage('\n'.join('\t%s' % item \
            for item in sorted(disabled_by_default_categories)))

        return 0

    if options.atrace_categories in ['list', 'help']:
        atrace_agent.list_categories(atrace_agent.get_config(options))
        print '\n'
        return 0

    if (perf_tracing_agent.PerfProfilerAgent.IsSupported()
            and options.perf_categories in ['list', 'help']):
        ui.PrintMessage('\n'.join(
            perf_tracing_agent.PerfProfilerAgent.GetCategories(device)))
        return 0

    if not options.trace_time and not options.continuous:
        ui.PrintMessage(
            'Time interval or continuous tracing should be specified.')
        return 1

    if (options.chrome_categories and options.atrace_categories
            and 'webview' in options.atrace_categories):
        logging.warning('Using the "webview" category in atrace together with '
                        'Chrome tracing results in duplicate trace events.')

    if options.output_file:
        options.output_file = os.path.expanduser(options.output_file)
    result = profiler.CaptureProfile(
        options,
        options.trace_time if not options.continuous else 0,
        _PROFILE_CHROME_AGENT_MODULES,
        output=options.output_file,
        compress=options.compress,
        write_json=options.write_json)
    if options.view:
        if sys.platform == 'darwin':
            os.system('/usr/bin/open %s' % os.path.abspath(result))
        else:
            webbrowser.open(result)
Esempio n. 7
0
def main():
  parser = _CreateOptionParser()
  options, _args = parser.parse_args()  # pylint: disable=unused-variable
  if options.trace_cc:
    parser.error("""--trace-cc is deprecated.

For basic jank busting uses, use  --trace-frame-viewer
For detailed study of ubercompositor, pass --trace-ubercompositor.

When in doubt, just try out --trace-frame-viewer.
""")

  logging.basicConfig()

  if options.verbose:
    logging.getLogger().setLevel(logging.DEBUG)

  if not options.device_serial_number:
    devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
    if len(devices) == 0:
      raise RuntimeError('No ADB devices connected.')
    elif len(devices) >= 2:
      raise RuntimeError('Multiple devices connected, serial number required')
    options.device_serial_number = devices[0]
  device = device_utils.DeviceUtils.HealthyDevices(device_arg=
      options.device_serial_number)[0]
  package_info = util.get_supported_browsers()[options.browser]

  options.device = device
  options.package_info = package_info

  # Include Chrome categories by default in profile_chrome.
  if not options.chrome_categories:
    options.chrome_categories = chrome_tracing_agent.DEFAULT_CHROME_CATEGORIES

  if options.chrome_categories in ['list', 'help']:
    ui.PrintMessage('Collecting record categories list...', eol='')
    record_categories = []
    disabled_by_default_categories = []
    record_categories, disabled_by_default_categories = \
        chrome_tracing_agent.ChromeTracingAgent.GetCategories(
            device, package_info)

    ui.PrintMessage('done')
    ui.PrintMessage('Record Categories:')
    ui.PrintMessage('\n'.join('\t%s' % item \
        for item in sorted(record_categories)))

    ui.PrintMessage('\nDisabled by Default Categories:')
    ui.PrintMessage('\n'.join('\t%s' % item \
        for item in sorted(disabled_by_default_categories)))

    return 0

  if options.atrace_categories in ['list', 'help']:
    atrace_agent.list_categories(atrace_agent.get_config(options))
    print '\n'
    return 0

  if (perf_tracing_agent.PerfProfilerAgent.IsSupported() and
      options.perf_categories in ['list', 'help']):
    ui.PrintMessage('\n'.join(
        perf_tracing_agent.PerfProfilerAgent.GetCategories(device)))
    return 0

  if not options.trace_time and not options.continuous:
    ui.PrintMessage('Time interval or continuous tracing should be specified.')
    return 1

  if (options.chrome_categories and options.atrace_categories and
      'webview' in options.atrace_categories):
    logging.warning('Using the "webview" category in atrace together with '
                    'Chrome tracing results in duplicate trace events.')

  if options.output_file:
    options.output_file = os.path.expanduser(options.output_file)
  result = profiler.CaptureProfile(
      options,
      options.trace_time if not options.continuous else 0,
      _PROFILE_CHROME_AGENT_MODULES,
      output=options.output_file,
      compress=options.compress,
      write_json=options.write_json)
  if options.view:
    if sys.platform == 'darwin':
      os.system('/usr/bin/open %s' % os.path.abspath(result))
    else:
      webbrowser.open(result)
Esempio n. 8
0
        chrome_tracing_agent.ChromeTracingAgent.GetCategories(
            presentation.device, package_info)

    ui.PrintMessage('done')
    ui.PrintMessage('Record Categories:')
    ui.PrintMessage('\n'.join('\t%s' % item \
        for item in sorted(record_categories)))

    ui.PrintMessage('\nDisabled by Default Categories:')
    ui.PrintMessage('\n'.join('\t%s' % item \
        for item in sorted(disabled_by_default_categories)))

    return 0

  if options.atrace_categories in ['list', 'help']:
    atrace_agent.list_categories(atrace_agent.get_config(options))
    print '\n'
    return 0

  if (perf_tracing_agent.PerfProfilerAgent.IsSupported() and
      options.perf_categories in ['list', 'help']):
    ui.PrintMessage('\n'.join(
        perf_tracing_agent.PerfProfilerAgent.GetCategories(presentation.device)))
    return 0

  if not options.trace_time and not options.continuous:
    ui.PrintMessage('Time interval or continuous tracing should be specified.')
    return 1

  if (options.chrome_categories and options.atrace_categories and
      'webview' in options.atrace_categories):