123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/env python
- #
- # Copyright 2021 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """
- This executable script runs perfetto traces on the specified device.
- See the README.md file for more information.
- """
- import os
- import sys
- import optparse
- import adb_profile_chrome_startup
- import symbolize_trace
- import flag_utils
- import display_in_browser
- sys.path.insert(0, os.path.join(os.path.dirname(__file__),
- os.pardir, os.pardir, 'third_party',
- 'catapult', 'systrace'))
- from systrace import util
- from profile_chrome import chrome_startup_tracing_agent
- def _CreateOptionParser():
- parser = optparse.OptionParser(description='Record Perfetto tracing profiles '
- 'from Android browsers startup. See '
- 'http://dev.chromium.org'
- '/developers/how-tos/trace-event-profiling-'
- 'tool for detailed instructions for '
- 'profiling.', usage='%prog [options]',
- prog='tools/tracing/profile_chrome_startup',
- conflict_handler='resolve')
- parser.add_option_group(flag_utils.GeneralOptions(parser))
- parser.add_option_group(flag_utils.ProfileOptions(parser))
- parser.add_option_group(chrome_startup_tracing_agent.add_options(parser))
- parser.add_option_group(flag_utils.SymbolizeOptions(parser))
- return parser
- def _SetupFlags(options):
- flag_utils.SetupLogging(options.verbosity)
- flag_utils.SetupProfilingCategories(options)
- def main():
- parser = _CreateOptionParser()
- options, _ = parser.parse_args()
- _SetupFlags(options)
- # Run Tracing
- trace_file = None
- if options.platform.lower() == 'android':
- # TODO(crbug/1239748): Fix manual tracing. Setting flag --time=0 stalls and fails
- # to download the collected trace.
- trace_file = adb_profile_chrome_startup.ProfileChrome(options)
- else:
- raise Exception('Platform "%s" is not supported. '
- 'Specify platform with the --platform flag.'
- % (options.platform))
- print('Wrote unsymbolized trace to {path}'.format(
- path=os.path.abspath(trace_file)))
- # Symbolize Trace
- if not options.skip_symbolize:
- if options.trace_format is None or options.trace_format.lower() != 'proto':
- raise Exception('Symbolization is currently only supported for protos.')
- symbolize_trace.SymbolizeTrace(trace_file=trace_file, options=options)
- if options.view:
- trace = options.output_file
- if not trace or not os.path.isfile(trace):
- trace = trace_file
- if trace and os.path.isfile(trace):
- display_in_browser.DisplayInBrowser(trace, options.trace_format)
- else:
- flag_utils.GetTraceLogger().warning(
- 'Trace is not found, so not opening in browser.')
- if __name__ == '__main__':
- sys.exit(main())
|