| Index: systrace/systrace/tracing_agents/ftrace_agent.py
|
| diff --git a/systrace/systrace/tracing_agents/ftrace_agent.py b/systrace/systrace/tracing_agents/ftrace_agent.py
|
| index da814916ac8614f8c97a6d3b640dbb9a5ac71fdb..bddeae5467d3cfbc73a1617f17cb14e0545a1adf 100644
|
| --- a/systrace/systrace/tracing_agents/ftrace_agent.py
|
| +++ b/systrace/systrace/tracing_agents/ftrace_agent.py
|
| @@ -2,6 +2,7 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import optparse
|
| import os
|
| import py_utils
|
|
|
| @@ -87,8 +88,8 @@ all_categories = {
|
| }
|
|
|
|
|
| -def try_create_agent(options):
|
| - if options.target != 'linux':
|
| +def try_create_agent(config):
|
| + if config.target != 'linux':
|
| return False
|
| return FtraceAgent(FtraceAgentIo)
|
|
|
| @@ -98,25 +99,51 @@ def list_categories(_):
|
| agent._print_avail_categories()
|
|
|
|
|
| +class FtraceConfig(tracing_agents.TracingConfig):
|
| + def __init__(self, ftrace_categories, target, trace_buf_size, fix_threads,
|
| + fix_tgids, fix_circular):
|
| + tracing_agents.TracingConfig.__init__(self)
|
| + self.ftrace_categories = ftrace_categories
|
| + self.target = target
|
| + self.trace_buf_size = trace_buf_size
|
| + self.fix_threads = fix_threads
|
| + self.fix_tgids = fix_tgids
|
| + self.fix_circular = fix_circular
|
| +
|
| +
|
| +def add_options(parser):
|
| + options = optparse.OptionGroup(parser, 'Ftrace options')
|
| + options.add_option('--ftrace-categories', dest='ftrace_categories',
|
| + help='Select ftrace categories with a comma-delimited '
|
| + 'list, e.g. --ftrace-categories=cat1,cat2,cat3')
|
| + return options
|
| +
|
| +
|
| +def get_config(options):
|
| + return FtraceConfig(options.ftrace_categories, options.target,
|
| + options.trace_buf_size, options.fix_threads,
|
| + options.fix_tgids, options.fix_circular)
|
| +
|
| +
|
| class FtraceAgent(tracing_agents.TracingAgent):
|
|
|
| def __init__(self, fio=FtraceAgentIo):
|
| """Initialize a systrace agent.
|
|
|
| Args:
|
| - options: The command-line options.
|
| + config: The command-line config.
|
| categories: The trace categories to capture.
|
| """
|
| super(FtraceAgent, self).__init__()
|
| self._fio = fio
|
| - self._options = None
|
| + self._config = None
|
| self._categories = None
|
|
|
| def _get_trace_buffer_size(self):
|
| buffer_size = 4096
|
| - if ((self._options.trace_buf_size is not None)
|
| - and (self._options.trace_buf_size > 0)):
|
| - buffer_size = self._options.trace_buf_size
|
| + if ((self._config.trace_buf_size is not None)
|
| + and (self._config.trace_buf_size > 0)):
|
| + buffer_size = self._config.trace_buf_size
|
| return buffer_size
|
|
|
| def _fix_categories(self, categories):
|
| @@ -132,11 +159,11 @@ class FtraceAgent(tracing_agents.TracingAgent):
|
| if self._is_category_available(x)]
|
|
|
| @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
|
| - def StartAgentTracing(self, options, categories, timeout=None):
|
| + def StartAgentTracing(self, config, timeout=None):
|
| """Start tracing.
|
| """
|
| - self._options = options
|
| - categories = self._fix_categories(categories)
|
| + self._config = config
|
| + categories = self._fix_categories(config.ftrace_categories)
|
| self._fio.writeFile(FT_BUFFER_SIZE,
|
| str(self._get_trace_buffer_size()))
|
| self._fio.writeFile(FT_CLOCK, 'global')
|
| @@ -168,11 +195,11 @@ class FtraceAgent(tracing_agents.TracingAgent):
|
| self._fio.writeFile(FT_TRACE_ON, '0')
|
| for category in self._categories:
|
| self._category_disable(category)
|
| - if self._options.fix_threads:
|
| + if self._config.fix_threads:
|
| print "WARN: thread name fixing is not yet supported."
|
| - if self._options.fix_tgids:
|
| + if self._config.fix_tgids:
|
| print "WARN: tgid fixing is not yet supported."
|
| - if self._options.fix_circular:
|
| + if self._config.fix_circular:
|
| print "WARN: circular buffer fixups are not yet supported."
|
| return True
|
|
|
| @@ -212,7 +239,7 @@ class FtraceAgent(tracing_agents.TracingAgent):
|
| def _print_avail_categories(self):
|
| avail = self._avail_categories()
|
| if len(avail):
|
| - print "tracing options:"
|
| + print "tracing config:"
|
| for category in self._avail_categories():
|
| desc = all_categories[category]["desc"]
|
| print "{0: <16}".format(category), ": ", desc
|
|
|