Commit 2684fb43 authored by jbudorick's avatar jbudorick Committed by Commit bot

[android] Make profile_android_startup.py runnable on its own.

A rewrite of the downstream orderfile recipe will call this script
rather than invoking AndroidProfileTool.CollectProfile directly.

BUG=639831

Review-Url: https://codereview.chromium.org/2614483002
Cr-Commit-Position: refs/heads/master@{#441400}
parent 75321ac0
#! /usr/bin/env python
# Copyright (c) 2015 The Chromium Authors. All rights reserved. # Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
...@@ -9,6 +10,7 @@ support for web page replay, device forwarding, and fake certificate authority ...@@ -9,6 +10,7 @@ support for web page replay, device forwarding, and fake certificate authority
to make runs repeatable. to make runs repeatable.
""" """
import argparse
import logging import logging
import os import os
import shutil import shutil
...@@ -19,6 +21,7 @@ import time ...@@ -19,6 +21,7 @@ import time
sys.path.append(os.path.join(sys.path[0], '..', '..', sys.path.append(os.path.join(sys.path[0], '..', '..',
'third_party', 'catapult', 'devil')) 'third_party', 'catapult', 'devil'))
from devil.android import apk_helper
from devil.android import device_errors from devil.android import device_errors
from devil.android import device_utils from devil.android import device_utils
from devil.android import flag_changer from devil.android import flag_changer
...@@ -26,6 +29,7 @@ from devil.android import forwarder ...@@ -26,6 +29,7 @@ from devil.android import forwarder
from devil.android.sdk import intent from devil.android.sdk import intent
sys.path.append(os.path.join(sys.path[0], '..', '..', 'build', 'android')) sys.path.append(os.path.join(sys.path[0], '..', '..', 'build', 'android'))
import devil_chromium
from pylib import constants from pylib import constants
sys.path.append(os.path.join(sys.path[0], '..', '..', 'tools', 'perf')) sys.path.append(os.path.join(sys.path[0], '..', '..', 'tools', 'perf'))
...@@ -202,13 +206,14 @@ class AndroidProfileTool(object): ...@@ -202,13 +206,14 @@ class AndroidProfileTool(object):
constants.DIR_SOURCE_ROOT, 'tools', 'perf', 'page_sets', 'data', constants.DIR_SOURCE_ROOT, 'tools', 'perf', 'page_sets', 'data',
'top_10_mobile_002.wpr') 'top_10_mobile_002.wpr')
# TODO(jbudorick): Make host_cyglog_dir mandatory after updating
def __init__(self, output_directory): # downstream clients. See crbug.com/639831 for context.
def __init__(self, output_directory, host_cyglog_dir=None):
devices = device_utils.DeviceUtils.HealthyDevices() devices = device_utils.DeviceUtils.HealthyDevices()
self._device = devices[0] self._device = devices[0]
self._cygprofile_tests = os.path.join( self._cygprofile_tests = os.path.join(
output_directory, 'cygprofile_unittests') output_directory, 'cygprofile_unittests')
self._host_cyglog_dir = os.path.join( self._host_cyglog_dir = host_cyglog_dir or os.path.join(
output_directory, 'cyglog_data') output_directory, 'cyglog_data')
self._SetUpDevice() self._SetUpDevice()
...@@ -371,3 +376,44 @@ class AndroidProfileTool(object): ...@@ -371,3 +376,44 @@ class AndroidProfileTool(object):
files = os.listdir(cyglog_dir) files = os.listdir(cyglog_dir)
return [os.path.join(cyglog_dir, x) for x in files] return [os.path.join(cyglog_dir, x) for x in files]
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--adb-path', type=os.path.realpath,
help='adb binary')
parser.add_argument(
'--apk-path', type=os.path.realpath, required=True,
help='APK to profile')
parser.add_argument(
'--output-directory', type=os.path.realpath, required=True,
help='Chromium output directory (e.g. out/Release)')
parser.add_argument(
'--trace-directory', type=os.path.realpath,
help='Directory in which cyglog traces will be stored. '
'Defaults to <output-directory>/cyglog_data')
args = parser.parse_args()
devil_chromium.Initialize(
output_directory=args.output_directory, adb_path=args.adb_path)
apk = apk_helper.ApkHelper(args.apk_path)
package_info = None
for p in constants.PACKAGE_INFO.itervalues():
if p.package == apk.GetPackageName():
package_info = p
break
else:
raise Exception('Unable to determine package info for %s' % args.apk_path)
profiler = AndroidProfileTool(
args.output_directory, host_cyglog_dir=args.trace_directory)
profiler.CollectProfile(args.apk_path, package_info)
return 0
if __name__ == '__main__':
sys.exit(main())
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment