Index: build/android/adb_profile_chrome.py |
diff --git a/build/android/adb_profile_chrome.py b/build/android/adb_profile_chrome.py |
index 37f250c19a2b4b9c38c0e2cb1f87cf96b4406d13..2e25d9c40779229b1e7e0db57168981e0c4dd2b7 100755 |
--- a/build/android/adb_profile_chrome.py |
+++ b/build/android/adb_profile_chrome.py |
@@ -5,6 +5,7 @@ |
# found in the LICENSE file. |
import gzip |
+import json |
import logging |
import optparse |
import os |
@@ -53,6 +54,28 @@ class ChromeTracingController(object): |
def __str__(self): |
return 'chrome trace' |
+ @staticmethod |
+ def GetCategories(device, package_info): |
+ device.old_interface.BroadcastIntent( |
+ package_info.package, 'GPU_PROFILER_LIST_CATEGORIES') |
+ try: |
+ json_category_list = device.old_interface.WaitForLogMatch( |
+ re.compile(r'{"traceCategoriesList(.*)'), None, timeout=5).group(0) |
+ except pexpect.TIMEOUT: |
+ raise RuntimeError('Performance trace category list marker not found. ' |
+ 'Is the correct version of the browser running?') |
+ |
+ record_categories = [] |
+ disabled_by_default_categories = [] |
+ json_data = json.loads(json_category_list)['traceCategoriesList'] |
+ for item in json_data: |
+ if item.startswith('disabled-by-default'): |
+ disabled_by_default_categories.append(item) |
+ else: |
+ record_categories.append(item) |
+ |
+ return record_categories, disabled_by_default_categories |
+ |
def StartTracing(self, interval): |
self._trace_interval = interval |
self._device.old_interface.SyncLogCat() |
@@ -324,7 +347,8 @@ def main(): |
'categories with comma-delimited wildcards, ' |
'e.g., "*", "cat1*,-cat1a". Omit this option to trace ' |
'Chrome\'s default categories. Chrome tracing can be ' |
- 'disabled with "--categories=\'\'".', |
+ 'disabled with "--categories=\'\'". Use "list" to see ' |
+ 'the available categories.', |
metavar='CHROME_CATEGORIES', dest='chrome_categories', |
default=_DEFAULT_CHROME_CATEGORIES) |
categories.add_option('-s', '--systrace', help='Capture a systrace with the ' |
@@ -383,6 +407,25 @@ When in doubt, just try out --trace-frame-viewer. |
if len(devices) != 1: |
parser.error('Exactly 1 device much be attached.') |
device = device_utils.DeviceUtils(devices[0]) |
+ package_info = _GetSupportedBrowsers()[options.browser] |
+ |
+ if options.chrome_categories in ['list', 'help']: |
+ _PrintMessage('Collecting record categories list...', eol='') |
+ record_categories = [] |
+ disabled_by_default_categories = [] |
+ record_categories, disabled_by_default_categories = \ |
+ ChromeTracingController.GetCategories(device, package_info) |
+ |
+ _PrintMessage('done') |
+ _PrintMessage('Record Categories:') |
+ _PrintMessage('\n'.join('\t%s' % item \ |
+ for item in sorted(record_categories))) |
+ |
+ _PrintMessage('\nDisabled by Default Categories:') |
+ _PrintMessage('\n'.join('\t%s' % item \ |
+ for item in sorted(disabled_by_default_categories))) |
+ |
+ return 0 |
if options.systrace_categories in ['list', 'help']: |
_PrintMessage('\n'.join(SystraceController.GetCategories(device))) |
@@ -394,7 +437,6 @@ When in doubt, just try out --trace-frame-viewer. |
chrome_categories = _ComputeChromeCategories(options) |
systrace_categories = _ComputeSystraceCategories(options) |
- package_info = _GetSupportedBrowsers()[options.browser] |
if chrome_categories and 'webview' in systrace_categories: |
logging.warning('Using the "webview" category in systrace together with ' |