1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # 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 script runs Android perfetto tracing, located in the
- third_party/catapult folder. It is consumed as a library by the
- executable profile_chrome_startup script.
- """
- import os
- import sys
- _CATAPULT_DIR = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir,
- 'third_party', 'catapult')
- sys.path.insert(0, os.path.join(_CATAPULT_DIR, 'systrace'))
- sys.path.insert(0, os.path.join(_CATAPULT_DIR, 'devil'))
- from profile_chrome import chrome_startup_tracing_agent
- from profile_chrome import profiler
- from profile_chrome import flags
- from systrace import util
- from devil.android import device_utils
- from devil.android.sdk import adb_wrapper
- _CHROME_STARTUP_MODULES = [chrome_startup_tracing_agent]
- def ProfileChrome(options):
- """Profiles chrome on Android and saves the trace file to output file.
- Args:
- options: Command line flags with their specified values as
- returned by optparse.
- Returns:
- Path to Android profetto trace file
- """
- if not options.device_serial_number:
- # Find the serial number of the connected device.
- devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
- if len(devices) == 0:
- raise RuntimeError('No ADB devices connected.')
- if len(devices) >= 2:
- raise RuntimeError('Multiple devices connected, serial number ' +
- 'required. Specify the -e flag.')
- options.device_serial_number = devices[0]
- # Check if the device is healthy.
- devices = device_utils.DeviceUtils.HealthyDevices()
- device = None
- for d in devices:
- if d.serial == options.device_serial_number:
- device = d
- break
- if device is None:
- raise RuntimeError('No valid connected devices. Check the device ' +
- 'serial number.')
- package_info = util.get_supported_browsers()[options.browser]
- options.device = device
- options.package_info = package_info
- # Ensure compatibility between trace_format and write_json flags.
- # trace_format is preferred. write_json is supported for backward
- # compatibility reasons.
- flags.ParseFormatFlags(options)
- # Set to root permissions since CaptureProfile() reads app data
- # to pull the trace.
- adb_wrapper.AdbWrapper(options.device).Root()
- trace_file = profiler.CaptureProfile(options,
- options.trace_time,
- _CHROME_STARTUP_MODULES,
- output=options.output_file,
- compress=options.compress,
- trace_format=options.trace_format)
- return trace_file
|