Chromium Code Reviews| 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:])) |
| + |