Index: tools/telemetry/telemetry/internal/platform/profiler/java_heap_profiler.py |
diff --git a/tools/telemetry/telemetry/internal/platform/profiler/java_heap_profiler.py b/tools/telemetry/telemetry/internal/platform/profiler/java_heap_profiler.py |
deleted file mode 100644 |
index 5ca082a29357452ff113e6d55507b31d8f9d318e..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/platform/profiler/java_heap_profiler.py |
+++ /dev/null |
@@ -1,97 +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 subprocess |
-import threading |
- |
-from telemetry.core import platform |
-from telemetry.core import util |
-from telemetry.internal.backends.chrome import android_browser_finder |
-from telemetry.internal.platform import profiler |
-from telemetry.internal.util import binary_manager |
- |
-try: |
- from devil.android import device_errors # pylint: disable=import-error |
-except ImportError: |
- device_errors = None |
- |
- |
-class JavaHeapProfiler(profiler.Profiler): |
- """Android-specific, trigger and fetch java heap dumps.""" |
- |
- _DEFAULT_DEVICE_DIR = '/data/local/tmp/javaheap' |
- # TODO(bulach): expose this as a command line option somehow. |
- _DEFAULT_INTERVAL = 20 |
- def __init__(self, browser_backend, platform_backend, output_path, state): |
- super(JavaHeapProfiler, self).__init__( |
- browser_backend, platform_backend, output_path, state) |
- self._run_count = 1 |
- |
- self._DumpJavaHeap(False) |
- |
- self._timer = threading.Timer(self._DEFAULT_INTERVAL, self._OnTimer) |
- self._timer.start() |
- |
- @classmethod |
- def name(cls): |
- return 'java-heap' |
- |
- @classmethod |
- def is_supported(cls, browser_type): |
- if browser_type == 'any': |
- return android_browser_finder.CanFindAvailableBrowsers() |
- return browser_type.startswith('android') |
- |
- def CollectProfile(self): |
- self._timer.cancel() |
- self._DumpJavaHeap(True) |
- 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, '*')) |
- output_files = [] |
- for f in os.listdir(self._output_path): |
- if os.path.splitext(f)[1] == '.aprof': |
- input_file = os.path.join(self._output_path, f) |
- output_file = input_file.replace('.aprof', '.hprof') |
- hprof_conv = binary_manager.FetchPath( |
- 'hprof-conv', |
- platform.GetHostPlatform().GetArchName(), |
- platform.GetHostPlatform().GetOSName()) |
- subprocess.call([hprof_conv, input_file, output_file]) |
- output_files.append(output_file) |
- return output_files |
- |
- def _OnTimer(self): |
- self._DumpJavaHeap(False) |
- |
- def _DumpJavaHeap(self, wait_for_completion): |
- 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_dump_file = None |
- for pid in self._GetProcessOutputFileMap().iterkeys(): |
- device_dump_file = '%s/%s.%s.aprof' % (self._DEFAULT_DEVICE_DIR, pid, |
- self._run_count) |
- self._browser_backend.device.RunShellCommand('am dumpheap %s %s' % |
- (pid, device_dump_file)) |
- if device_dump_file and wait_for_completion: |
- util.WaitFor(lambda: self._FileSize(device_dump_file) > 0, timeout=2) |
- self._run_count += 1 |
- |
- def _FileSize(self, file_name): |
- try: |
- return self._browser_backend.device.Stat(file_name).st_size |
- except device_errors.CommandFailedError: |
- return 0 |