| Index: tools/telemetry/telemetry/internal/platform/profiler/win_pgo_profiler.py
|
| diff --git a/tools/telemetry/telemetry/internal/platform/profiler/win_pgo_profiler.py b/tools/telemetry/telemetry/internal/platform/profiler/win_pgo_profiler.py
|
| deleted file mode 100644
|
| index 163e9e6190a209e5c82612580ebae7ecdba393d0..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/platform/profiler/win_pgo_profiler.py
|
| +++ /dev/null
|
| @@ -1,95 +0,0 @@
|
| -# Copyright 2014 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 glob
|
| -import os
|
| -import subprocess
|
| -import sys
|
| -
|
| -from telemetry.internal.platform import profiler
|
| -
|
| -_PGOSWEEP_EXECUTABLE = 'pgosweep.exe'
|
| -
|
| -
|
| -class WinPGOProfiler(profiler.Profiler):
|
| - """A profiler that run the Visual Studio PGO utility 'pgosweep.exe' before
|
| - terminating a browser or a renderer process.
|
| - """
|
| -
|
| - def __init__(self, browser_backend, platform_backend, output_path, state):
|
| - super(WinPGOProfiler, self).__init__(
|
| - browser_backend, platform_backend, output_path, state)
|
| -
|
| - pgosweep_is_in_path = False
|
| - for entry in os.environ['PATH'].split(os.pathsep):
|
| - if os.path.exists(os.path.join(entry, _PGOSWEEP_EXECUTABLE)):
|
| - pgosweep_is_in_path = True
|
| - break
|
| - if not pgosweep_is_in_path:
|
| - raise IOError(2, '%s isn\'t in the current path, run vcvarsall.bat to fix'
|
| - ' this.' % _PGOSWEEP_EXECUTABLE)
|
| -
|
| - self._browser_dir = browser_backend.browser_directory
|
| - self._chrome_child_pgc_counter = self._GetNextProfileIndex('chrome_child')
|
| -
|
| - def _GetNextProfileIndex(self, dll_name):
|
| - """Scan the directory containing the DLL |dll_name| to find the next index
|
| - to use for the profile data files.
|
| -
|
| - Args:
|
| - dll_name: The name of the DLL for which we want to get the next index to
|
| - to use.
|
| - """
|
| - max_index = 0
|
| - pgc_files = glob.glob(os.path.join(self._browser_dir,
|
| - '%s!*.pgc' % dll_name))
|
| - for pgc_file in pgc_files:
|
| - max_index = max(max_index,
|
| - int(os.path.splitext(os.path.split(pgc_file)[1])[0].split('!')[1]))
|
| - return max_index + 1
|
| -
|
| - def _RunPGOSweep(self, pid, dll_name, index):
|
| - """Run the pgosweep utility to gather the profile data of a given process.
|
| -
|
| - Args:
|
| - pid: The PID of the process we're interested in.
|
| - dll_name: The name of the DLL for which we want the profile data.
|
| - index: The index to use for the profile data file.
|
| -
|
| - Returns the name of the profile data file.
|
| - """
|
| - pgc_filename = '%s\\%s!%d.pgc' % (self._browser_dir, dll_name, index)
|
| - subprocess.Popen([_PGOSWEEP_EXECUTABLE,
|
| - '/pid:%d' % pid,
|
| - '%s.dll' % dll_name,
|
| - pgc_filename]
|
| - ).wait()
|
| - return pgc_filename
|
| -
|
| - @classmethod
|
| - def name(cls):
|
| - return 'win_pgo_profiler'
|
| -
|
| - @classmethod
|
| - def is_supported(cls, browser_type):
|
| - # This profiler only make sense when doing a Windows build with Visual
|
| - # Studio (minimal supported version is 2013 Update 2).
|
| - return sys.platform.startswith('win')
|
| -
|
| - @classmethod
|
| - def CustomizeBrowserOptions(cls, browser_type, options):
|
| - # The sandbox need to be disabled if we want to be able to gather the
|
| - # profile data.
|
| - options.AppendExtraBrowserArgs('--no-sandbox')
|
| -
|
| - def CollectProfile(self):
|
| - """Collect the profile data for the current processes."""
|
| - output_files = []
|
| - for pid, output_file in self._GetProcessOutputFileMap().iteritems():
|
| - if 'renderer' in output_file:
|
| - output_files.append(self._RunPGOSweep(pid,
|
| - 'chrome_child',
|
| - self._chrome_child_pgc_counter))
|
| - self._chrome_child_pgc_counter += 1
|
| - return output_files
|
|
|