Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Unified Diff: tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py

Issue 14978006: Telemetry: makes profilers a bit more generic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: dict / member name Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py
diff --git a/tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py b/tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py
index 66ea97ec2c2d32199a58b68778b8e86e392042f5..d6979c26d4a3a96b0ec86950acfc97caa5b6efef 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/iprofiler_profiler.py
@@ -16,13 +16,12 @@ sys.path.append(os.path.join(
import pexpect # pylint: disable=F0401
-class IprofilerProfiler(profiler.Profiler):
-
- def __init__(self, browser_backend, pid, output_path):
- super(IprofilerProfiler, self).__init__(output_path)
- self._browser_backend = browser_backend
- output_dir = os.path.dirname(self.output_path)
- output_file = os.path.basename(self.output_path)
+class _SingleProcessIprofilerProfiler(object):
+ """An internal class for using iprofiler for a given process."""
+ def __init__(self, pid, output_path):
+ self._output_path = output_path
+ output_dir = os.path.dirname(self._output_path)
+ output_file = os.path.basename(self._output_path)
self._proc = pexpect.spawn(
'iprofiler', ['-timeprofiler', '-T', '300', '-a', str(pid),
'-d', output_dir, '-o', output_file],
@@ -42,6 +41,31 @@ class IprofilerProfiler(profiler.Profiler):
return self._proc.getecho()
util.WaitFor(Echo, timeout=5)
+ def CollectProfile(self):
+ self._proc.kill(signal.SIGINT)
+ try:
+ self._proc.wait()
+ except pexpect.ExceptionPexpect:
+ pass
+ finally:
+ self._proc = None
+
+ print 'To view the profile, run:'
+ print ' open -a Instruments %s.dtps' % self._output_path
+
+
+class IprofilerProfiler(profiler.Profiler):
+
+ def __init__(self, browser_backend, platform_backend, output_path):
+ super(IprofilerProfiler, self).__init__(
+ browser_backend, platform_backend, output_path)
+ process_output_file_map = self._GetProcessOutputFileMap()
+ self._process_profilers = []
+ for pid, output_file in process_output_file_map.iteritems():
+ self._process_profilers.append(
+ _SingleProcessIprofilerProfiler(pid, output_file))
+
+
@classmethod
def name(cls):
return 'iprofiler'
@@ -53,13 +77,5 @@ class IprofilerProfiler(profiler.Profiler):
and not options.browser_type.startswith('cros'))
def CollectProfile(self):
- self._proc.kill(signal.SIGINT)
- try:
- self._proc.wait()
- except pexpect.ExceptionPexpect:
- pass
- finally:
- self._proc = None
-
- print 'To view the profile, run:'
- print ' open -a Instruments %s.dtps' % self.output_path
+ for single_process in self._process_profilers:
+ single_process.CollectProfile()

Powered by Google App Engine
This is Rietveld 408576698