Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Unified Diff: tools/cygprofile/profile_android_startup.py

Issue 2614483002: [android] Make profile_android_startup.py runnable on its own. (Closed)
Patch Set: prereview: fixes Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:]))
+
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698