Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Unified Diff: tools/telemetry/telemetry/android_browser_backend.py

Issue 12278015: [Telemetry] Reorganize everything. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-add shebangs. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/telemetry/telemetry/all_page_actions.py ('k') | tools/telemetry/telemetry/android_browser_finder.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/android_browser_backend.py
diff --git a/tools/telemetry/telemetry/android_browser_backend.py b/tools/telemetry/telemetry/android_browser_backend.py
deleted file mode 100644
index 290e71dd13c97a989a60efa727fd921df9688a25..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/android_browser_backend.py
+++ /dev/null
@@ -1,190 +0,0 @@
-# Copyright (c) 2012 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 json
-import logging
-import os
-import subprocess
-import sys
-import tempfile
-import time
-
-from telemetry import adb_commands
-from telemetry import browser_backend
-from telemetry import browser_gone_exception
-
-class AndroidBrowserBackend(browser_backend.BrowserBackend):
- """The backend for controlling a browser instance running on Android.
- """
- def __init__(self, options, adb, package, is_content_shell,
- cmdline_file, activity, devtools_remote_port):
- super(AndroidBrowserBackend, self).__init__(
- is_content_shell=is_content_shell,
- supports_extensions=False, options=options)
- if len(options.extensions_to_load) > 0:
- raise browser_backend.ExtensionsNotSupportedException(
- 'Android browser does not support extensions.')
- # Initialize fields so that an explosion during init doesn't break in Close.
- self._options = options
- self._adb = adb
- self._package = package
- self._cmdline_file = cmdline_file
- self._activity = activity
- if not options.keep_test_server_ports:
- adb_commands.ResetTestServerPortAllocation()
- self._port = adb_commands.AllocateTestServerPort()
- self._devtools_remote_port = devtools_remote_port
-
- # Kill old browser.
- self._adb.CloseApplication(self._package)
- self._adb.KillAll('device_forwarder')
- self._adb.Forward('tcp:%d' % self._port, self._devtools_remote_port)
-
- # Chrome Android doesn't listen to --user-data-dir.
- # TODO: symlink the app's Default, files and cache dir
- # to somewhere safe.
- if not is_content_shell and not options.dont_override_profile:
- # Set up the temp dir
- # self._tmpdir = '/sdcard/telemetry_data'
- # self._adb.RunShellCommand('rm -r %s' % self._tmpdir)
- # args.append('--user-data-dir=%s' % self._tmpdir)
- pass
-
- # Set up the command line.
- if is_content_shell:
- pseudo_exec_name = 'content_shell'
- else:
- pseudo_exec_name = 'chrome'
-
- args = [pseudo_exec_name]
- args.extend(self.GetBrowserStartupArgs())
-
- with tempfile.NamedTemporaryFile() as f:
- def EscapeIfNeeded(arg):
- params = arg.split('=')
- if (len(params) == 2 and
- params[1] and params[1][0] == '"' and params[1][-1] == '"'):
- # CommandLine.java requires this extra escaping.
- return '%s="\\%s\\"' % (params[0], params[1])
- return arg.replace(' ', '" "')
- f.write(' '.join([EscapeIfNeeded(arg) for arg in args]))
- f.flush()
- self._adb.Push(f.name, cmdline_file)
-
- # Force devtools protocol on, if not already done and we can access
- # protected files.
- if (not is_content_shell and
- self._adb.Adb().CanAccessProtectedFileContents()):
- # Make sure we can find the apps' prefs file
- app_data_dir = '/data/data/%s' % self._package
- prefs_file = (app_data_dir +
- '/app_chrome/Default/Preferences')
- if not self._adb.FileExistsOnDevice(prefs_file):
- # Start it up the first time so we can tweak the prefs.
- self._adb.StartActivity(self._package,
- self._activity,
- True,
- None,
- None)
- retries = 0
- timeout = 3
- time.sleep(timeout)
- while not self._adb.Adb().GetProtectedFileContents(prefs_file):
- time.sleep(timeout)
- retries += 1
- timeout *= 2
- if retries == 3:
- logging.critical('android_browser_backend: Could not find '
- 'preferences file %s for %s',
- prefs_file, self._package)
- raise browser_gone_exception.BrowserGoneException(
- 'Missing preferences file.')
- self._adb.CloseApplication(self._package)
-
- preferences = json.loads(''.join(
- self._adb.Adb().GetProtectedFileContents(prefs_file)))
- changed = False
- if 'devtools' not in preferences:
- preferences['devtools'] = {}
- changed = True
- if not preferences['devtools'].get('remote_enabled'):
- preferences['devtools']['remote_enabled'] = True
- changed = True
- if changed:
- logging.warning('Manually enabled devtools protocol on %s' %
- self._package)
- txt = json.dumps(preferences, indent=2)
- self._adb.Adb().SetProtectedFileContents(prefs_file, txt)
-
- # Start it up with a fresh log.
- self._adb.RunShellCommand('logcat -c')
- self._adb.StartActivity(self._package,
- self._activity,
- True,
- None,
- 'chrome://newtab/')
- try:
- self._WaitForBrowserToComeUp()
- self._PostBrowserStartupInitialization()
- except browser_gone_exception.BrowserGoneException:
- logging.critical('Failed to connect to browser.')
- if not self._adb.IsRootEnabled():
- logging.critical(
- 'Ensure web debugging is enabled in Chrome at '
- '"Settings > Developer tools > Enable USB Web debugging".')
- sys.exit(1)
- except:
- import traceback
- traceback.print_exc()
- self.Close()
- raise
-
- def GetBrowserStartupArgs(self):
- args = super(AndroidBrowserBackend, self).GetBrowserStartupArgs()
- args.append('--disable-fre')
- return args
-
- def __del__(self):
- self.Close()
-
- def Close(self):
- super(AndroidBrowserBackend, self).Close()
-
- self._adb.RunShellCommand('rm %s' % self._cmdline_file)
- self._adb.CloseApplication(self._package)
-
- def IsBrowserRunning(self):
- pids = self._adb.ExtractPid(self._package)
- return len(pids) != 0
-
- def GetRemotePort(self, local_port):
- return local_port
-
- def GetStandardOutput(self):
- # If we can find symbols and there is a stack, output the symbolized stack.
- symbol_paths = [
- os.path.join(adb_commands.GetOutDirectory(), 'Release', 'lib.target'),
- os.path.join(adb_commands.GetOutDirectory(), 'Debug', 'lib.target')]
- for symbol_path in symbol_paths:
- if not os.path.isdir(symbol_path):
- continue
- with tempfile.NamedTemporaryFile() as f:
- lines = self._adb.RunShellCommand('logcat -d')
- for line in lines:
- f.write(line + '\n')
- symbolized_stack = None
- try:
- logging.info('Symbolizing stack...')
- symbolized_stack = subprocess.Popen([
- 'ndk-stack', '-sym', symbol_path,
- '-dump', f.name], stdout=subprocess.PIPE).communicate()[0]
- except Exception:
- pass
- if symbolized_stack:
- return symbolized_stack
- # Otherwise, just return the last 100 lines of logcat.
- return '\n'.join(self._adb.RunShellCommand('logcat -d -t 100'))
-
- def CreateForwarder(self, *port_pairs):
- return adb_commands.Forwarder(self._adb, *port_pairs)
« no previous file with comments | « tools/telemetry/telemetry/all_page_actions.py ('k') | tools/telemetry/telemetry/android_browser_finder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698