Index: tools/cygprofile/profile_android_startup.py |
diff --git a/tools/cygprofile/profile_android_startup.py b/tools/cygprofile/profile_android_startup.py |
old mode 100644 |
new mode 100755 |
index d0f5cf6091f8ea5f19e83840081d714b1514174d..b4d011f185db9773c7600de6d564908aaaa4cdb0 |
--- a/tools/cygprofile/profile_android_startup.py |
+++ b/tools/cygprofile/profile_android_startup.py |
@@ -1,3 +1,4 @@ |
+#! /usr/bin/env python |
# Copyright (c) 2015 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. |
@@ -9,6 +10,7 @@ support for web page replay, device forwarding, and fake certificate authority |
to make runs repeatable. |
""" |
+import argparse |
import logging |
import os |
import shutil |
@@ -19,6 +21,7 @@ import time |
sys.path.append(os.path.join(sys.path[0], '..', '..', |
'third_party', 'catapult', 'devil')) |
+from devil.android import apk_helper |
from devil.android import device_errors |
from devil.android import device_utils |
from devil.android import flag_changer |
@@ -26,6 +29,7 @@ from devil.android import forwarder |
from devil.android.sdk import intent |
sys.path.append(os.path.join(sys.path[0], '..', '..', 'build', 'android')) |
+import devil_chromium |
from pylib import constants |
sys.path.append(os.path.join(sys.path[0], '..', '..', 'tools', 'perf')) |
@@ -202,13 +206,14 @@ class AndroidProfileTool(object): |
constants.DIR_SOURCE_ROOT, 'tools', 'perf', 'page_sets', 'data', |
'top_10_mobile_002.wpr') |
- |
- def __init__(self, output_directory): |
+ # TODO(jbudorick): Make host_cyglog_dir mandatory after updating |
+ # downstream clients. See crbug.com/639831 for context. |
+ def __init__(self, output_directory, host_cyglog_dir=None): |
devices = device_utils.DeviceUtils.HealthyDevices() |
self._device = devices[0] |
self._cygprofile_tests = os.path.join( |
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') |
self._SetUpDevice() |
@@ -371,3 +376,44 @@ class AndroidProfileTool(object): |
files = os.listdir(cyglog_dir) |
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()) |
+ |