| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import optparse |
| 5 import os | 6 import os |
| 6 import py_utils | 7 import py_utils |
| 7 import re | 8 import re |
| 8 | 9 |
| 9 from profile_chrome import util | 10 from profile_chrome import util |
| 10 from systrace import trace_result | 11 from systrace import trace_result |
| 11 from systrace import tracing_agents | 12 from systrace import tracing_agents |
| 12 | 13 |
| 13 | 14 |
| 14 _DDMS_SAMPLING_FREQUENCY_US = 100 | 15 _DDMS_SAMPLING_FREQUENCY_US = 100 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 25 def __repr__(self): | 26 def __repr__(self): |
| 26 return 'ddms profile' | 27 return 'ddms profile' |
| 27 | 28 |
| 28 def _SupportsSampling(self): | 29 def _SupportsSampling(self): |
| 29 for line in self._device.RunShellCommand('am --help'): | 30 for line in self._device.RunShellCommand('am --help'): |
| 30 if re.match(r'.*am profile start.*--sampling', line): | 31 if re.match(r'.*am profile start.*--sampling', line): |
| 31 return True | 32 return True |
| 32 return False | 33 return False |
| 33 | 34 |
| 34 @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT) | 35 @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT) |
| 35 def StartAgentTracing(self, options, categories, timeout=None): | 36 def StartAgentTracing(self, config, timeout=None): |
| 36 self._output_file = ( | 37 self._output_file = ( |
| 37 '/data/local/tmp/ddms-profile-%s' % util.GetTraceTimestamp()) | 38 '/data/local/tmp/ddms-profile-%s' % util.GetTraceTimestamp()) |
| 38 cmd = 'am profile start ' | 39 cmd = 'am profile start ' |
| 39 if self._supports_sampling: | 40 if self._supports_sampling: |
| 40 cmd += '--sampling %d ' % _DDMS_SAMPLING_FREQUENCY_US | 41 cmd += '--sampling %d ' % _DDMS_SAMPLING_FREQUENCY_US |
| 41 cmd += '%s %s' % (self._package, self._output_file) | 42 cmd += '%s %s' % (self._package, self._output_file) |
| 42 self._device.RunShellCommand(cmd) | 43 self._device.RunShellCommand(cmd) |
| 43 | 44 |
| 44 @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT) | 45 @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT) |
| 45 def StopAgentTracing(self, timeout=None): | 46 def StopAgentTracing(self, timeout=None): |
| (...skipping 13 matching lines...) Expand all Loading... |
| 59 os.path.curdir, os.path.basename(self._output_file)) | 60 os.path.curdir, os.path.basename(self._output_file)) |
| 60 self._device.PullFile(self._output_file, host_file) | 61 self._device.PullFile(self._output_file, host_file) |
| 61 return host_file | 62 return host_file |
| 62 | 63 |
| 63 def SupportsExplicitClockSync(self): | 64 def SupportsExplicitClockSync(self): |
| 64 return False | 65 return False |
| 65 | 66 |
| 66 def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback): | 67 def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback): |
| 67 assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be ' | 68 assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be ' |
| 68 'recorded since explicit clock sync is not supported.') | 69 'recorded since explicit clock sync is not supported.') |
| 70 |
| 71 |
| 72 class DdmsConfig(tracing_agents.TracingConfig): |
| 73 def __init__(self): |
| 74 tracing_agents.TracingConfig.__init__(self) |
| 75 |
| 76 |
| 77 def add_options(parser): |
| 78 options = optparse.OptionGroup(parser, 'Java tracing') |
| 79 options.add_option('--ddms', help='Trace Java execution using DDMS ' |
| 80 'sampling.', action='store_true') |
| 81 return options |
| 82 |
| 83 def get_config(options): |
| 84 # pylint: disable=unused-argument |
| 85 return DdmsConfig() |
| OLD | NEW |