| Index: tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_backend.py
|
| diff --git a/tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_backend.py b/tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_backend.py
|
| deleted file mode 100644
|
| index 9f8cd880e79cf587941b526cf391613fefd25d1e..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/backends/mandoline/desktop_mandoline_backend.py
|
| +++ /dev/null
|
| @@ -1,149 +0,0 @@
|
| -# Copyright 2015 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 shutil
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -
|
| -from telemetry.core import exceptions
|
| -from telemetry.core import util
|
| -from telemetry.internal.backends.mandoline import mandoline_browser_backend
|
| -
|
| -
|
| -class DesktopMandolineBackend(
|
| - mandoline_browser_backend.MandolineBrowserBackend):
|
| - '''The backend for controlling a locally-executed browser instance, on Linux
|
| - or Windows.
|
| - '''
|
| - # It is OK to have abstract methods. pylint: disable=abstract-method
|
| -
|
| - def __init__(self, desktop_platform_backend, browser_options, executable,
|
| - browser_directory):
|
| - super(DesktopMandolineBackend, self).__init__(
|
| - desktop_platform_backend,
|
| - browser_options=browser_options)
|
| -
|
| - # Initialize fields so that an explosion during init doesn't break in Close.
|
| - self._proc = None
|
| - self._tmp_output_file = None
|
| -
|
| - self._tmp_profile_dir = None
|
| - if not self.browser_options.profile_dir:
|
| - self._tmp_profile_dir = tempfile.mkdtemp()
|
| - logging.info('Using profile directory: %s' % self.profile_directory)
|
| -
|
| - self._executable = executable
|
| - if not self._executable:
|
| - raise Exception('Cannot create browser, no executable found!')
|
| -
|
| - self._browser_directory = browser_directory
|
| -
|
| - def HasBrowserFinishedLaunching(self):
|
| - # In addition to the functional check performed by the base class, quickly
|
| - # check if the browser process is still alive.
|
| - if not self.IsBrowserRunning():
|
| - raise exceptions.ProcessGoneException(
|
| - 'Return code: %d' % self._proc.returncode)
|
| - return super(DesktopMandolineBackend, self).HasBrowserFinishedLaunching()
|
| -
|
| - def GetBrowserStartupArgs(self):
|
| - args = super(DesktopMandolineBackend, self).GetBrowserStartupArgs()
|
| - self._port = util.GetUnreservedAvailableLocalPort()
|
| - logging.info('Requested remote debugging port: %d' % self._port)
|
| - args.append('--remote-debugging-port=%i' % self._port)
|
| - args.append('--user-data-dir=%s' % self.profile_directory)
|
| - return args
|
| -
|
| - def Start(self):
|
| - assert not self._proc, 'Must call Close() before Start()'
|
| -
|
| - args = [self._executable]
|
| - args.extend(self.GetBrowserStartupArgs())
|
| - if self.browser_options.startup_url:
|
| - args.append(self.browser_options.startup_url)
|
| - env = os.environ.copy()
|
| - logging.debug('Starting Mandoline %s', args)
|
| -
|
| - if self._tmp_output_file:
|
| - # Close the previous temp output file, if it exists. Please note that
|
| - # Close() doesn't do this because GetStandardOutput() needs to access this
|
| - # file and it may be called after Close().
|
| - self._tmp_output_file.close()
|
| - self._tmp_output_file = None
|
| -
|
| - if not self.browser_options.show_stdout:
|
| - self._tmp_output_file = tempfile.NamedTemporaryFile()
|
| -
|
| - self._proc = subprocess.Popen(
|
| - args, stdout=self._tmp_output_file, stderr=subprocess.STDOUT, env=env)
|
| - else:
|
| - self._proc = subprocess.Popen(args, env=env)
|
| -
|
| - try:
|
| - self._WaitForBrowserToComeUp()
|
| - self._InitDevtoolsClientBackend()
|
| - except:
|
| - self.Close()
|
| - raise
|
| -
|
| - @property
|
| - def pid(self):
|
| - if self._proc:
|
| - return self._proc.pid
|
| - return None
|
| -
|
| - @property
|
| - def browser_directory(self):
|
| - return self._browser_directory
|
| -
|
| - @property
|
| - def profile_directory(self):
|
| - return self.browser_options.profile_dir or self._tmp_profile_dir
|
| -
|
| - def IsBrowserRunning(self):
|
| - return self._proc and self._proc.poll() == None
|
| -
|
| - def GetStandardOutput(self):
|
| - if not self._tmp_output_file:
|
| - if self.browser_options.show_stdout:
|
| - # This can happen in the case that loading the mandoline binary fails.
|
| - # We print rather than using logging here, because that makes a
|
| - # recursive call to this function.
|
| - print >> sys.stderr, 'Can\'t get standard output with --show-stdout'
|
| - return ''
|
| - try:
|
| - self._tmp_output_file.flush()
|
| - self._tmp_output_file.seek(0)
|
| - return self._tmp_output_file.read()
|
| - except IOError:
|
| - return ''
|
| -
|
| - def GetStackTrace(self):
|
| - return ('Retrieving stack trace from the browser is not yet supported. '
|
| - 'Returning browser stdout:\n' + self.GetStandardOutput())
|
| -
|
| - def __del__(self):
|
| - self.Close()
|
| -
|
| - def Close(self):
|
| - super(DesktopMandolineBackend, self).Close()
|
| -
|
| - # Cooperative shutdown does not work with mandoline. Its HWNDs are owned by
|
| - # subprocesses of mandoline.exe, so its pid won't match pids of HWND owners.
|
| - if self.IsBrowserRunning():
|
| - self._proc.kill()
|
| - util.WaitFor(lambda: not self.IsBrowserRunning(), timeout=10)
|
| - if self.IsBrowserRunning():
|
| - logging.warning('Failed to kill the browser process cleanly.')
|
| - self._proc = None
|
| -
|
| - if self._tmp_profile_dir and os.path.exists(self._tmp_profile_dir):
|
| - try:
|
| - shutil.rmtree(self._tmp_profile_dir)
|
| - except Exception as e:
|
| - logging.warning('Leaking temp dir: %s\n%s' % (self._tmp_profile_dir, e))
|
| - self._tmp_profile_dir = None
|
|
|