#!/usr/bin/env python
|
|
# Copyright 2016 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.
|
|
'''Implementation of tracing controller for systrace. This class creates the
|
necessary tracing agents for systrace, runs them, and outputs the results
|
as an HTML or JSON file.'''
|
|
from systrace import output_generator
|
from systrace import tracing_controller
|
from systrace.tracing_agents import android_process_data_agent
|
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
|
|
AGENT_MODULES = [android_process_data_agent, atrace_agent,
|
atrace_from_file_agent, atrace_process_dump,
|
ftrace_agent, walt_agent]
|
|
class SystraceRunner(object):
|
def __init__(self, script_dir, options):
|
"""Constructor.
|
|
Args:
|
script_dir: Directory containing the trace viewer script
|
(systrace_trace_viewer.html)
|
options: Object containing command line options.
|
"""
|
# Parse command line arguments and create agents.
|
self._script_dir = script_dir
|
self._out_filename = options.output_file
|
agents_with_config = tracing_controller.CreateAgentsWithConfig(
|
options, AGENT_MODULES)
|
controller_config = tracing_controller.GetControllerConfig(options)
|
|
# Set up tracing controller.
|
self._tracing_controller = tracing_controller.TracingController(
|
agents_with_config, controller_config)
|
|
def StartTracing(self):
|
self._tracing_controller.StartTracing()
|
|
def StopTracing(self):
|
self._tracing_controller.StopTracing()
|
|
def OutputSystraceResults(self, write_json=False):
|
"""Output the results of systrace to a file.
|
|
If output is necessary, then write the results of systrace to either (a)
|
a standalone HTML file, or (b) a json file which can be read by the
|
trace viewer.
|
|
Args:
|
write_json: Whether to output to a json file (if false, use HTML file)
|
"""
|
print 'Tracing complete, writing results'
|
if write_json:
|
result = output_generator.GenerateJSONOutput(
|
self._tracing_controller.all_results,
|
self._out_filename)
|
else:
|
result = output_generator.GenerateHTMLOutput(
|
self._tracing_controller.all_results,
|
self._out_filename)
|
print '\nWrote trace %s file: file://%s\n' % (('JSON' if write_json
|
else 'HTML'), result)
|