| Index: tools/telemetry/telemetry/internal/platform/profiler/tcmalloc_heap_profiler.py
|
| diff --git a/tools/telemetry/telemetry/internal/platform/profiler/tcmalloc_heap_profiler.py b/tools/telemetry/telemetry/internal/platform/profiler/tcmalloc_heap_profiler.py
|
| deleted file mode 100644
|
| index a11ae4cd6466dd399b2b084184e3f877227deafd..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/platform/profiler/tcmalloc_heap_profiler.py
|
| +++ /dev/null
|
| @@ -1,148 +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 logging
|
| -import os
|
| -import sys
|
| -
|
| -from telemetry.internal.backends.chrome import android_browser_finder
|
| -from telemetry.internal.platform import profiler
|
| -
|
| -# Environment variables to (android properties, default value) mapping.
|
| -_ENV_VARIABLES = {
|
| - 'HEAP_PROFILE_TIME_INTERVAL': ('heapprof.time_interval', 20),
|
| - 'HEAP_PROFILE_MMAP': ('heapprof.mmap', 1),
|
| - 'DEEP_HEAP_PROFILE': ('heapprof.deep_heap_profile', 1),
|
| -}
|
| -
|
| -
|
| -class _TCMallocHeapProfilerAndroid(object):
|
| - """An internal class to set android properties and fetch dumps from device."""
|
| -
|
| - _DEFAULT_DEVICE_DIR = '/data/local/tmp/heap'
|
| -
|
| - def __init__(self, browser_backend, output_path):
|
| - self._browser_backend = browser_backend
|
| - self._output_path = output_path
|
| -
|
| - _ENV_VARIABLES['HEAPPROFILE'] = ('heapprof',
|
| - os.path.join(self._DEFAULT_DEVICE_DIR, 'dmprof'))
|
| -
|
| - self._SetDeviceProperties(_ENV_VARIABLES)
|
| -
|
| - def _SetDeviceProperties(self, properties):
|
| - device_configured = False
|
| - # This profiler requires adb root to set properties.
|
| - try:
|
| - self._browser_backend.device.EnableRoot()
|
| - except:
|
| - logging.exception('New exception caused by DeviceUtils conversion')
|
| - raise
|
| - for values in properties.itervalues():
|
| - device_property = self._browser_backend.device.GetProp(values[0])
|
| - if not device_property or not device_property.strip():
|
| - self._browser_backend.device.SetProp(values[0], values[1])
|
| - device_configured = True
|
| - if not self._browser_backend.device.FileExists(
|
| - self._DEFAULT_DEVICE_DIR):
|
| - self._browser_backend.device.RunShellCommand(
|
| - 'mkdir -p ' + self._DEFAULT_DEVICE_DIR)
|
| - self._browser_backend.device.RunShellCommand(
|
| - 'chmod 777 ' + self._DEFAULT_DEVICE_DIR)
|
| - device_configured = True
|
| - if device_configured:
|
| - raise Exception('Device required special config, run again.')
|
| -
|
| - def CollectProfile(self):
|
| - try:
|
| - self._browser_backend.device.PullFile(
|
| - self._DEFAULT_DEVICE_DIR, self._output_path)
|
| - except:
|
| - logging.exception('New exception caused by DeviceUtils conversion')
|
| - raise
|
| - self._browser_backend.device.RunShellCommand(
|
| - 'rm ' + os.path.join(self._DEFAULT_DEVICE_DIR, '*'))
|
| - if os.path.exists(self._output_path):
|
| - logging.info('TCMalloc dumps pulled to %s', self._output_path)
|
| - with file(os.path.join(self._output_path,
|
| - 'browser.pid'), 'w') as pid_file:
|
| - pid_file.write(str(self._browser_backend.pid).rjust(5, '0'))
|
| - return [self._output_path]
|
| -
|
| -
|
| -class _TCMallocHeapProfilerLinux(object):
|
| - """An internal class to set environment variables and fetch dumps."""
|
| -
|
| - _DEFAULT_DIR = '/tmp/tcmalloc/'
|
| -
|
| - def __init__(self, browser_backend):
|
| - self._browser_backend = browser_backend
|
| - _ENV_VARIABLES['HEAPPROFILE'] = ('heapprof', self._DEFAULT_DIR + 'dmprof')
|
| - self._CheckEnvironmentVariables(_ENV_VARIABLES)
|
| -
|
| - def _CheckEnvironmentVariables(self, env_vars):
|
| - msg = ''
|
| - for key, values in env_vars.iteritems():
|
| - if key not in os.environ:
|
| - msg += '%s=%s ' % (key, str(values[1]))
|
| - if msg:
|
| - raise Exception('Need environment variables, try again with:\n %s' % msg)
|
| - if not os.path.exists(os.environ['HEAPPROFILE']):
|
| - os.makedirs(os.environ['HEAPPROFILE'])
|
| - assert os.path.isdir(os.environ['HEAPPROFILE']), 'HEAPPROFILE is not a dir'
|
| -
|
| - def CollectProfile(self):
|
| - with file(os.path.join(os.path.dirname(os.environ['HEAPPROFILE']),
|
| - 'browser.pid'), 'w') as pid_file:
|
| - pid_file.write(str(self._browser_backend.pid))
|
| - print 'TCMalloc dumps available ', os.environ['HEAPPROFILE']
|
| - return [os.environ['HEAPPROFILE']]
|
| -
|
| -
|
| -class TCMallocHeapProfiler(profiler.Profiler):
|
| - """A Factory to instantiate the platform-specific profiler."""
|
| - def __init__(self, browser_backend, platform_backend, output_path, state):
|
| - super(TCMallocHeapProfiler, self).__init__(
|
| - browser_backend, platform_backend, output_path, state)
|
| - if platform_backend.GetOSName() == 'android':
|
| - self._platform_profiler = _TCMallocHeapProfilerAndroid(
|
| - browser_backend, output_path)
|
| - else:
|
| - self._platform_profiler = _TCMallocHeapProfilerLinux(browser_backend)
|
| -
|
| - @classmethod
|
| - def name(cls):
|
| - return 'tcmalloc-heap'
|
| -
|
| - @classmethod
|
| - def is_supported(cls, browser_type):
|
| - if browser_type.startswith('cros'):
|
| - return False
|
| - if sys.platform.startswith('linux'):
|
| - return True
|
| - if browser_type == 'any':
|
| - return android_browser_finder.CanFindAvailableBrowsers()
|
| - return browser_type.startswith('android')
|
| -
|
| - @classmethod
|
| - def CustomizeBrowserOptions(cls, browser_type, options):
|
| - options.AppendExtraBrowserArgs('--no-sandbox')
|
| - options.AppendExtraBrowserArgs('--enable-memory-benchmarking')
|
| -
|
| - @classmethod
|
| - def WillCloseBrowser(cls, browser_backend, platform_backend):
|
| - # The tcmalloc_heap_profiler dumps files at regular
|
| - # intervals (~20 secs).
|
| - # This is a minor optimization to ensure it'll dump the last file when
|
| - # the test completes.
|
| - for i in xrange(len(browser_backend.browser.tabs)):
|
| - browser_backend.browser.tabs[i].ExecuteJavaScript("""
|
| - if (chrome && chrome.memoryBenchmarking) {
|
| - chrome.memoryBenchmarking.heapProfilerDump('renderer', 'final');
|
| - chrome.memoryBenchmarking.heapProfilerDump('browser', 'final');
|
| - }
|
| - """)
|
| -
|
| - def CollectProfile(self):
|
| - return self._platform_profiler.CollectProfile()
|
|
|