| # Copyright 2014 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. |
| |
| import os |
| |
| from profile_chrome import trace_packager |
| from profile_chrome import ui |
| |
| from pylib import constants |
| |
| |
| def _StartTracing(controllers, interval): |
| for controller in controllers: |
| controller.StartTracing(interval) |
| |
| |
| def _StopTracing(controllers): |
| for controller in controllers: |
| controller.StopTracing() |
| |
| |
| def _PullTraces(controllers, output, compress, write_json): |
| ui.PrintMessage('Downloading...', eol='') |
| trace_files = [controller.PullTrace() for controller in controllers] |
| trace_files = [trace for trace in trace_files if trace] |
| if not trace_files: |
| ui.PrintMessage('No results') |
| return [] |
| result = trace_packager.PackageTraces(trace_files, |
| output=output, |
| compress=compress, |
| write_json=write_json) |
| ui.PrintMessage('done') |
| ui.PrintMessage('Trace written to file://%s' % os.path.abspath(result)) |
| return result |
| |
| |
| def GetSupportedBrowsers(): |
| """Returns the package names of all supported browsers.""" |
| # Add aliases for backwards compatibility. |
| supported_browsers = { |
| 'stable': constants.PACKAGE_INFO['chrome_stable'], |
| 'beta': constants.PACKAGE_INFO['chrome_beta'], |
| 'dev': constants.PACKAGE_INFO['chrome_dev'], |
| 'build': constants.PACKAGE_INFO['chrome'], |
| } |
| supported_browsers.update(constants.PACKAGE_INFO) |
| unsupported_browsers = ['content_browsertests', 'gtest', 'legacy_browser'] |
| for browser in unsupported_browsers: |
| del supported_browsers[browser] |
| return supported_browsers |
| |
| |
| def CaptureProfile(controllers, interval, output=None, compress=False, |
| write_json=False): |
| """Records a profiling trace saves the result to a file. |
| |
| Args: |
| controllers: List of tracing controllers. |
| interval: Time interval to capture in seconds. An interval of None (or 0) |
| continues tracing until stopped by the user. |
| output: Output file name or None to use an automatically generated name. |
| compress: If True, the result will be compressed either with gzip or zip |
| depending on the number of captured subtraces. |
| write_json: If True, prefer JSON output over HTML. |
| |
| Returns: |
| Path to saved profile. |
| """ |
| trace_type = ' + '.join(map(str, controllers)) |
| try: |
| _StartTracing(controllers, interval) |
| if interval: |
| ui.PrintMessage('Capturing %d-second %s. Press Enter to stop early...' % \ |
| (interval, trace_type), eol='') |
| ui.WaitForEnter(interval) |
| else: |
| ui.PrintMessage('Capturing %s. Press Enter to stop...' % \ |
| trace_type, eol='') |
| raw_input() |
| finally: |
| _StopTracing(controllers) |
| if interval: |
| ui.PrintMessage('done') |
| |
| return _PullTraces(controllers, output, compress, write_json) |