Index: tools/telemetry/telemetry/internal/platform/profiler/tcpdump_profiler.py |
diff --git a/tools/telemetry/telemetry/internal/platform/profiler/tcpdump_profiler.py b/tools/telemetry/telemetry/internal/platform/profiler/tcpdump_profiler.py |
deleted file mode 100644 |
index b9039b4909881b265dc88a302b2315ae5330361b..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/platform/profiler/tcpdump_profiler.py |
+++ /dev/null |
@@ -1,130 +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 signal |
-import subprocess |
-import sys |
-import tempfile |
- |
-from telemetry.internal.platform import profiler |
-from telemetry.internal.platform.profiler import android_prebuilt_profiler_helper |
- |
-_TCP_DUMP_BASE_OPTS = ['-i', 'any', '-p', '-s', '0', '-w'] |
- |
- |
-class _TCPDumpProfilerAndroid(object): |
- """An internal class to collect TCP dumps on android. |
- |
- This profiler uses pre-built binaries from AOSP. |
- See more details in prebuilt/android/README.txt. |
- """ |
- |
- _DEVICE_DUMP_FILE = '/sdcard/tcpdump_profiles/capture.pcap' |
- |
- def __init__(self, device, output_path): |
- self._device = device |
- self._output_path = output_path |
- self._device.RunShellCommand('mkdir -p ' + |
- os.path.dirname(self._DEVICE_DUMP_FILE)) |
- self._proc = subprocess.Popen( |
- ['adb', '-s', self._device.adb.GetDeviceSerial(), |
- 'shell', android_prebuilt_profiler_helper.GetDevicePath('tcpdump')] + |
- _TCP_DUMP_BASE_OPTS + |
- [self._DEVICE_DUMP_FILE]) |
- |
- def CollectProfile(self): |
- tcpdump_pid = self._device.GetPids('tcpdump') |
- if not tcpdump_pid or not 'tcpdump' in tcpdump_pid: |
- raise Exception('Unable to find TCPDump. Check your device is rooted ' |
- 'and tcpdump is installed at ' + |
- android_prebuilt_profiler_helper.GetDevicePath('tcpdump')) |
- if len(tcpdump_pid['tcpdump']) > 1: |
- raise Exception( |
- 'At most one instance of process tcpdump expected but found pids: ' |
- '%s' % tcpdump_pid) |
- tcpdump_pid = int(tcpdump_pid['tcpdump'][0]) |
- self._device.RunShellCommand('kill -term ' + tcpdump_pid) |
- self._proc.terminate() |
- host_dump = os.path.join(self._output_path, |
- os.path.basename(self._DEVICE_DUMP_FILE)) |
- try: |
- self._device.PullFile(self._DEVICE_DUMP_FILE, host_dump) |
- except: |
- logging.exception('New exception caused by DeviceUtils conversion') |
- raise |
- print 'TCP dump available at: %s ' % host_dump |
- print 'Use Wireshark to open it.' |
- return host_dump |
- |
- |
-class _TCPDumpProfilerLinux(object): |
- """An internal class to collect TCP dumps on linux desktop.""" |
- |
- _DUMP_FILE = 'capture.pcap' |
- |
- def __init__(self, output_path): |
- if not os.path.exists(output_path): |
- os.makedirs(output_path) |
- self._dump_file = os.path.join(output_path, self._DUMP_FILE) |
- self._tmp_output_file = tempfile.NamedTemporaryFile('w', 0) |
- try: |
- self._proc = subprocess.Popen( |
- ['tcpdump'] + _TCP_DUMP_BASE_OPTS + [self._dump_file], |
- stdout=self._tmp_output_file, stderr=subprocess.STDOUT) |
- except OSError as e: |
- raise Exception('Unable to execute TCPDump, please check your ' |
- 'installation. ' + str(e)) |
- |
- def CollectProfile(self): |
- self._proc.send_signal(signal.SIGINT) |
- exit_code = self._proc.wait() |
- try: |
- if exit_code: |
- raise Exception( |
- 'tcpdump failed with exit code %d. Output:\n%s' % |
- (exit_code, self._GetStdOut())) |
- finally: |
- self._tmp_output_file.close() |
- print 'TCP dump available at: ', self._dump_file |
- print 'Use Wireshark to open it.' |
- return self._dump_file |
- |
- 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 TCPDumpProfiler(profiler.Profiler): |
- """A Factory to instantiate the platform-specific profiler.""" |
- def __init__(self, browser_backend, platform_backend, output_path, state): |
- super(TCPDumpProfiler, self).__init__( |
- browser_backend, platform_backend, output_path, state) |
- if platform_backend.GetOSName() == 'android': |
- android_prebuilt_profiler_helper.InstallOnDevice( |
- browser_backend.device, 'tcpdump') |
- self._platform_profiler = _TCPDumpProfilerAndroid( |
- browser_backend.device, output_path) |
- else: |
- self._platform_profiler = _TCPDumpProfilerLinux(output_path) |
- |
- @classmethod |
- def name(cls): |
- return 'tcpdump' |
- |
- @classmethod |
- def is_supported(cls, browser_type): |
- if browser_type.startswith('cros'): |
- return False |
- if sys.platform.startswith('linux'): |
- return True |
- return browser_type.startswith('android') |
- |
- def CollectProfile(self): |
- return self._platform_profiler.CollectProfile() |