| Index: tools/telemetry/telemetry/internal/platform/profiler/sample_profiler.py
|
| diff --git a/tools/telemetry/telemetry/internal/platform/profiler/sample_profiler.py b/tools/telemetry/telemetry/internal/platform/profiler/sample_profiler.py
|
| deleted file mode 100644
|
| index 63001b53b4ffd34367311f07c296c95920fdf8af..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/platform/profiler/sample_profiler.py
|
| +++ /dev/null
|
| @@ -1,90 +0,0 @@
|
| -# Copyright 2013 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 signal
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -
|
| -from telemetry.core import exceptions
|
| -from telemetry.core import util
|
| -from telemetry.internal.platform import profiler
|
| -
|
| -
|
| -class _SingleProcessSampleProfiler(object):
|
| - """An internal class for using iprofiler for a given process."""
|
| - def __init__(self, pid, output_path):
|
| - self._output_path = output_path
|
| - self._tmp_output_file = tempfile.NamedTemporaryFile('w', 0)
|
| - self._proc = subprocess.Popen(
|
| - ['sample', str(pid), '-mayDie', '-file', self._output_path],
|
| - stdout=self._tmp_output_file, stderr=subprocess.STDOUT)
|
| - def IsStarted():
|
| - stdout = self._GetStdOut()
|
| - if 'sample cannot examine process' in stdout:
|
| - raise exceptions.ProfilingException(
|
| - 'Failed to start sample for process %s\n' %
|
| - self._output_path.split('.')[1])
|
| - return 'Sampling process' in stdout
|
| - util.WaitFor(IsStarted, 120)
|
| -
|
| - def CollectProfile(self):
|
| - self._proc.send_signal(signal.SIGINT)
|
| - exit_code = self._proc.wait()
|
| - try:
|
| - if exit_code:
|
| - raise Exception(
|
| - 'sample failed with exit code %d. Output:\n%s' % (
|
| - exit_code, self._GetStdOut()))
|
| - finally:
|
| - self._proc = None
|
| - self._tmp_output_file.close()
|
| -
|
| - print 'To view the profile, run:'
|
| - print ' open -a TextEdit %s' % self._output_path
|
| -
|
| - return self._output_path
|
| -
|
| - def _GetStdOut(self):
|
| - self._tmp_output_file.flush()
|
| - try:
|
| - with open(self._tmp_output_file.name) as f:
|
| - return f.read()
|
| - except IOError:
|
| - return ''
|
| -
|
| -
|
| -class SampleProfiler(profiler.Profiler):
|
| -
|
| - def __init__(self, browser_backend, platform_backend, output_path, state):
|
| - super(SampleProfiler, self).__init__(
|
| - browser_backend, platform_backend, output_path, state)
|
| - process_output_file_map = self._GetProcessOutputFileMap()
|
| - self._process_profilers = []
|
| - for pid, output_file in process_output_file_map.iteritems():
|
| - if '.utility' in output_file:
|
| - # The utility process may not have been started by Telemetry.
|
| - # So we won't have permissing to profile it
|
| - continue
|
| - self._process_profilers.append(
|
| - _SingleProcessSampleProfiler(pid, output_file))
|
| -
|
| - @classmethod
|
| - def name(cls):
|
| - return 'sample'
|
| -
|
| - @classmethod
|
| - def is_supported(cls, browser_type):
|
| - if sys.platform != 'darwin':
|
| - return False
|
| - if browser_type == 'any':
|
| - return True
|
| - return (not browser_type.startswith('android') and
|
| - not browser_type.startswith('cros'))
|
| -
|
| - def CollectProfile(self):
|
| - output_paths = []
|
| - for single_process in self._process_profilers:
|
| - output_paths.append(single_process.CollectProfile())
|
| - return output_paths
|
|
|