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..8d0da155d6cf9d88c09c73504087fb853671423e |
--- 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')) |
@@ -203,12 +207,12 @@ class AndroidProfileTool(object): |
'top_10_mobile_002.wpr') |
- def __init__(self, output_directory): |
+ def __init__(self, output_directory, host_cyglog_dir=None): |
pasko
2017/01/04 14:17:24
why do we need this be optional? is it hard to mak
jbudorick
2017/01/04 15:11:52
Doing so in this CL would break the downstream use
pasko
2017/01/04 15:44:14
OK, sure, please add a TODO to make this a mandato
jbudorick
2017/01/04 17:08:51
Done.
|
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 +375,44 @@ class AndroidProfileTool(object): |
files = os.listdir(cyglog_dir) |
return [os.path.join(cyglog_dir, x) for x in files] |
+ |
+ |
+def main(raw_args): |
+ 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(raw_args) |
pasko
2017/01/04 14:17:24
why not just parser.parse_args()?
jbudorick
2017/01/04 15:11:52
This is a habit I've been getting into s.t. other
pasko
2017/01/04 15:44:14
ah, ok. I'm probably from a different universe (C
|
+ |
+ 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(sys.argv[1:])) |
+ |