summaryrefslogtreecommitdiff
path: root/systrace/catapult/systrace/systrace/run_systrace.py
diff options
context:
space:
mode:
Diffstat (limited to 'systrace/catapult/systrace/systrace/run_systrace.py')
-rwxr-xr-xsystrace/catapult/systrace/systrace/run_systrace.py208
1 files changed, 0 insertions, 208 deletions
diff --git a/systrace/catapult/systrace/systrace/run_systrace.py b/systrace/catapult/systrace/systrace/run_systrace.py
deleted file mode 100755
index c886dde..0000000
--- a/systrace/catapult/systrace/systrace/run_systrace.py
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 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.
-
-"""Android system-wide tracing utility.
-
-This is a tool for capturing a trace that includes data from both userland and
-the kernel. It creates an HTML file for visualizing the trace.
-"""
-
-# Make sure we're using a new enough version of Python.
-# The flags= parameter of re.sub() is new in Python 2.7. And Systrace does not
-# support Python 3 yet.
-
-# pylint: disable=wrong-import-position
-import sys
-
-version = sys.version_info[:2]
-if version != (2, 7):
- sys.stderr.write('This script does not support Python %d.%d. '
- 'Please use Python 2.7.\n' % version)
- sys.exit(1)
-
-
-import optparse
-import os
-import time
-
-_SYSTRACE_DIR = os.path.abspath(
- os.path.join(os.path.dirname(__file__), os.path.pardir))
-_CATAPULT_DIR = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), os.path.pardir, os.path.pardir)
-_DEVIL_DIR = os.path.join(_CATAPULT_DIR, 'devil')
-if _DEVIL_DIR not in sys.path:
- sys.path.insert(0, _DEVIL_DIR)
-if _SYSTRACE_DIR not in sys.path:
- sys.path.insert(0, _SYSTRACE_DIR)
-
-from devil import devil_env
-from devil.android.sdk import adb_wrapper
-from systrace import systrace_runner
-from systrace import util
-from systrace.tracing_agents import atrace_agent
-from systrace.tracing_agents import atrace_from_file_agent
-from systrace.tracing_agents import atrace_process_dump
-from systrace.tracing_agents import ftrace_agent
-from systrace.tracing_agents import walt_agent
-from systrace.tracing_agents import android_cgroup_agent
-
-
-ALL_MODULES = [atrace_agent, atrace_from_file_agent, atrace_process_dump,
- ftrace_agent, walt_agent, android_cgroup_agent]
-
-
-def parse_options(argv):
- """Parses and checks the command-line options.
-
- Returns:
- A tuple containing the options structure and a list of categories to
- be traced.
- """
- usage = 'Usage: %prog [options] [category1 [category2 ...]]'
- desc = 'Example: %prog -b 32768 -t 15 gfx input view sched freq'
- parser = optparse.OptionParser(usage=usage, description=desc,
- conflict_handler='resolve')
- parser = util.get_main_options(parser)
-
- parser.add_option('-l', '--list-categories', dest='list_categories',
- default=False, action='store_true',
- help='list the available categories and exit')
-
- # Add the other agent parsing options to the parser. For Systrace on the
- # command line, all agents are added. For Android, only the compatible agents
- # will be added.
- for module in ALL_MODULES:
- option_group = module.add_options(parser)
- if option_group:
- parser.add_option_group(option_group)
-
- options, categories = parser.parse_args(argv[1:])
-
- if options.output_file is None:
- base = 'trace'
- if options.from_file is not None:
- base = os.path.splitext(options.from_file)[0]
- suffix = '.json' if options.write_json else '.html'
- options.output_file = base + suffix
-
- if options.link_assets or options.asset_dir != 'trace-viewer':
- parser.error('--link-assets and --asset-dir are deprecated.')
-
- if options.trace_time and options.trace_time < 0:
- parser.error('the trace time must be a non-negative number')
-
- if (options.trace_buf_size is not None) and (options.trace_buf_size <= 0):
- parser.error('the trace buffer size must be a positive number')
-
- return (options, categories)
-
-def find_adb():
- """Finds adb on the path.
-
- This method is provided to avoid the issue of diskutils.spawn's
- find_executable which first searches the current directory before
- searching $PATH. That behavior results in issues where systrace.py
- uses a different adb than the one in the path.
- """
- paths = os.environ['PATH'].split(os.pathsep)
- executable = 'adb'
- if sys.platform == 'win32':
- executable = executable + '.exe'
- for p in paths:
- f = os.path.join(p, executable)
- if os.path.isfile(f):
- return f
- return None
-
-def initialize_devil():
- """Initialize devil to use adb from $PATH"""
- adb_path = find_adb()
- if adb_path is None:
- print >> sys.stderr, "Unable to find adb, is it in your path?"
- sys.exit(1)
- devil_dynamic_config = {
- 'config_type': 'BaseConfig',
- 'dependencies': {
- 'adb': {
- 'file_info': {
- devil_env.GetPlatform(): {
- 'local_paths': [os.path.abspath(adb_path)]
- }
- }
- }
- }
- }
- devil_env.config.Initialize(configs=[devil_dynamic_config])
-
-
-def main_impl(arguments):
- # Parse the command line options.
- options, categories = parse_options(arguments)
-
- # Override --atrace-categories and --ftrace-categories flags if command-line
- # categories are provided.
- if categories:
- if options.target == 'android':
- options.atrace_categories = categories
- elif options.target == 'linux':
- options.ftrace_categories = categories
- else:
- raise RuntimeError('Categories are only valid for atrace/ftrace. Target '
- 'platform must be either Android or Linux.')
-
- # Include atrace categories by default in Systrace.
- if options.target == 'android' and not options.atrace_categories:
- options.atrace_categories = atrace_agent.DEFAULT_CATEGORIES
-
- if options.target == 'android' and not options.from_file:
- initialize_devil()
- devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
- if not options.device_serial_number:
- if len(devices) == 0:
- raise RuntimeError('No ADB devices connected.')
- elif len(devices) >= 2:
- raise RuntimeError('Multiple devices connected, serial number required')
- options.device_serial_number = devices[0]
- elif options.device_serial_number not in devices:
- raise RuntimeError('Device with the serial number "%s" is not connected.'
- % options.device_serial_number)
-
- # If list_categories is selected, just print the list of categories.
- # In this case, use of the tracing controller is not necessary.
- if options.list_categories:
- if options.target == 'android':
- atrace_agent.list_categories(options)
- elif options.target == 'linux':
- ftrace_agent.list_categories(options)
- return
-
- # Set up the systrace runner and start tracing.
- controller = systrace_runner.SystraceRunner(
- os.path.dirname(os.path.abspath(__file__)), options)
- controller.StartTracing()
-
- # Wait for the given number of seconds or until the user presses enter.
- # pylint: disable=superfluous-parens
- # (need the parens so no syntax error if trying to load with Python 3)
- if options.from_file is not None:
- print('Reading results from file.')
- elif options.trace_time:
- print('Starting tracing (%d seconds)' % options.trace_time)
- time.sleep(options.trace_time)
- else:
- raw_input('Starting tracing (stop with enter)')
-
- # Stop tracing and collect the output.
- print('Tracing completed. Collecting output...')
- controller.StopTracing()
- print('Outputting Systrace results...')
- controller.OutputSystraceResults(write_json=options.write_json)
-
-def main():
- main_impl(sys.argv)
-
-if __name__ == '__main__' and __package__ is None:
- main()