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

Side by Side Diff: tools/telemetry/telemetry/desktop_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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4 import os as os
5 import subprocess as subprocess
6 import shutil
7 import tempfile
8
9 from telemetry import browser_backend
10 from telemetry import util
11
12 class DesktopBrowserBackend(browser_backend.BrowserBackend):
13 """The backend for controlling a locally-executed browser instance, on Linux,
14 Mac or Windows.
15 """
16 def __init__(self, options, executable, is_content_shell):
17 super(DesktopBrowserBackend, self).__init__(
18 is_content_shell=is_content_shell,
19 supports_extensions=not is_content_shell, options=options)
20
21 # Initialize fields so that an explosion during init doesn't break in Close.
22 self._proc = None
23 self._tmpdir = None
24 self._tmp_output_file = None
25
26 self._executable = executable
27 if not self._executable:
28 raise Exception('Cannot create browser, no executable found!')
29
30 if len(options.extensions_to_load) > 0 and is_content_shell:
31 raise browser_backend.ExtensionsNotSupportedException(
32 'Content shell does not support extensions.')
33
34 self._port = util.GetAvailableLocalPort()
35
36 args = [self._executable]
37 args.extend(self.GetBrowserStartupArgs())
38 if not options.show_stdout:
39 self._tmp_output_file = tempfile.NamedTemporaryFile('w', 0)
40 self._proc = subprocess.Popen(
41 args, stdout=self._tmp_output_file, stderr=subprocess.STDOUT)
42 else:
43 self._proc = subprocess.Popen(args)
44
45 try:
46 self._WaitForBrowserToComeUp()
47 self._PostBrowserStartupInitialization()
48 except:
49 self.Close()
50 raise
51
52 def GetBrowserStartupArgs(self):
53 args = super(DesktopBrowserBackend, self).GetBrowserStartupArgs()
54 args.append('--remote-debugging-port=%i' % self._port)
55 args.append('--window-size=1280,1024')
56 args.append('--enable-benchmarking')
57 if not self.options.dont_override_profile:
58 self._tmpdir = tempfile.mkdtemp()
59 args.append('--user-data-dir=%s' % self._tmpdir)
60 return args
61
62 def IsBrowserRunning(self):
63 return self._proc.poll() == None
64
65 def GetStandardOutput(self):
66 assert self._tmp_output_file, "Can't get standard output with show_stdout"
67 self._tmp_output_file.flush()
68 try:
69 with open(self._tmp_output_file.name) as f:
70 return f.read()
71 except IOError:
72 return ''
73
74 def __del__(self):
75 self.Close()
76
77 def Close(self):
78 super(DesktopBrowserBackend, self).Close()
79
80 if self._proc:
81
82 def IsClosed():
83 if not self._proc:
84 return True
85 return self._proc.poll() != None
86
87 # Try to politely shutdown, first.
88 self._proc.terminate()
89 try:
90 util.WaitFor(IsClosed, timeout=1)
91 self._proc = None
92 except util.TimeoutException:
93 pass
94
95 # Kill it.
96 if not IsClosed():
97 self._proc.kill()
98 try:
99 util.WaitFor(IsClosed, timeout=5)
100 self._proc = None
101 except util.TimeoutException:
102 self._proc = None
103 raise Exception('Could not shutdown the browser.')
104
105 if self._tmpdir and os.path.exists(self._tmpdir):
106 shutil.rmtree(self._tmpdir, ignore_errors=True)
107 self._tmpdir = None
108
109 if self._tmp_output_file:
110 self._tmp_output_file.close()
111 self._tmp_output_file = None
112
113 def CreateForwarder(self, *port_pairs):
114 return DoNothingForwarder(*port_pairs)
115
116 class DoNothingForwarder(object):
117 def __init__(self, *port_pairs):
118 self._host_port = port_pairs[0].local_port
119
120 @property
121 def url(self):
122 assert self._host_port
123 return 'http://localhost:%i' % self._host_port
124
125 def Close(self):
126 self._host_port = None
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/csv_page_benchmark_results_unittest.py ('k') | tools/telemetry/telemetry/desktop_browser_finder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698