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

Side by Side Diff: tools/perf/measurements/chrome_proxy.py

Issue 191383003: First cut of chrome-proxy (data reduction proxy) measurements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 9 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
OLDNEW
(Empty)
1 # Copyright 2014 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 logging
5
6 from metrics import chrome_proxy
7 from telemetry.core import util
8 from telemetry.page import page_measurement
9
10
bengr 2014/03/12 18:17:36 I'm a little confused about the file naming. What'
bolian 2014/03/19 00:20:03 I am trying to fit into the Telemetry test structu
11 class ChromeProxyLatency(page_measurement.PageMeasurement):
tonyg 2014/03/12 02:08:37 Rather than creating a new measurement, I recommen
bolian 2014/03/19 00:20:03 PageCycler measurement does not call LoadingMetric
12 """Chrome proxy latency measurement."""
13
14 def __init__(self, *args, **kwargs):
15 super(ChromeProxyLatency, self).__init__(*args, **kwargs)
16
17 def WillNavigateToPage(self, page, tab):
18 tab.ClearCache(force=True)
19
20 def MeasurePage(self, page, tab, results):
21 # Wait for the load event.
22 tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
23 chrome_proxy.ChromeProxyLatency().AddResults(tab, results)
24
25
26 class ChromeProxyDataSaving(page_measurement.PageMeasurement):
27 """Chrome proxy data daving measurement."""
28 def __init__(self, *args, **kwargs):
29 super(ChromeProxyDataSaving, self).__init__(*args, **kwargs)
30 self._metrics = chrome_proxy.ChromeProxyTimelineMetrics()
31
32 def WillNavigateToPage(self, page, tab):
33 tab.ClearCache(force=True)
34 self._metrics.Start(page, tab)
35
36 def MeasurePage(self, page, tab, results):
37 # Wait for the load event.
38 tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
39 self._metrics.Stop(page, tab)
40 self._metrics.AddResultsForDataSaving(tab, results)
41
42
43 class ChromeProxyValidation(page_measurement.PageMeasurement):
44 """Base class for all chrome proxy correctness measurement."""
bengr 2014/03/12 18:17:36 nit: "measurements". Also, why "measurement" and n
bolian 2014/03/19 00:20:03 Done. A measurement is a page set in Telemetry ter
45
46 def __init__(self, restart_after_each_run=False):
47 super(ChromeProxyValidation, self).__init__(
48 needs_browser_restart_after_each_run=restart_after_each_run)
49 self._metrics = chrome_proxy.ChromeProxyTimelineMetrics()
50 self._page = None
51 # Whether a timeout exception is expected during the test.
52 self._expect_timeout = False
53
54 def CustomizeBrowserOptions(self, options):
55 # Enable the chrome proxy (data reduction proxy).
56 options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth')
57
58 def WillNavigateToPage(self, page, tab):
59 tab.ClearCache(force=True)
60 assert self._metrics
61 self._metrics.Start(page, tab)
62
63 def MeasurePage(self, page, tab, results):
64 self._page = page
65 # Wait for the load event.
66 tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
67 assert self._metrics
68 self._metrics.Stop(page, tab)
69 self.AddResults(tab, results)
70
71 def AddResults(self, tab, results):
72 raise NotImplementedError
73
74 def StopBrowserAfterPage(self, browser, page): # pylint: disable=W0613
75 if hasattr(page, 'restart_after') and page.restart_after:
76 return True
77 return False
78
79 def RunNavigateSteps(self, page, tab):
80 # The redirect from safebrowsing causes a timeout. Ignore that.
81 try:
82 super(ChromeProxyValidation, self).RunNavigateSteps(page, tab)
83 except util.TimeoutException, e:
84 if self._expect_timeout:
85 logging.warning('Navigation timeout on page %s',
86 page.name if page.name else page.url)
87 else:
88 raise e
89
90
91 class ChromeProxyHeaders(ChromeProxyValidation):
92 """Correctness measurement for response headers."""
93
94 def __init__(self):
95 super(ChromeProxyHeaders, self).__init__()
96
97 def AddResults(self, tab, results):
98 self._metrics.AddResultsForHeaderValidation(tab, results)
99
100
101 class ChromeProxyBypass(ChromeProxyValidation):
102 """Correctness measurement for bypass responses."""
103
104 def __init__(self):
105 super(ChromeProxyBypass, self).__init__(restart_after_each_run=True)
106
107 def AddResults(self, tab, results):
108 self._metrics.AddResultsForBypass(tab, results)
109
110
111 class ChromeProxySafebrowsing(ChromeProxyValidation):
112 """Correctness measurement for safebrowsing."""
113
114 def __init__(self):
115 super(ChromeProxySafebrowsing, self).__init__()
116
117 def WillNavigateToPage(self, page, tab):
118 super(ChromeProxySafebrowsing, self).WillNavigateToPage(page, tab)
119 self._expect_timeout = True
120
121 def AddResults(self, tab, results):
122 self._metrics.AddResultsForSafebrowsing(tab, results)
123
124
125 class ChromeProxySmoke(ChromeProxyValidation):
126 """Smoke measurement for basic chrome proxy correctness."""
127
128 def __init__(self):
129 super(ChromeProxySmoke, self).__init__()
130
131 def WillNavigateToPage(self, page, tab):
132 super(ChromeProxySmoke, self).WillNavigateToPage(page, tab)
133 if page.name == 'safebrowsing':
134 self._expect_timeout = True
135
136 def AddResults(self, tab, results):
137 # Map a page name to its AddResults func.
138 page_to_metrics = {
139 'header validation': [self._metrics.AddResultsForHeaderValidation],
140 'compression: image': [
141 self._metrics.AddResultsForHeaderValidation,
142 self._metrics.AddResultsForDataSaving,
143 ],
144 'compression: javascript': [
145 self._metrics.AddResultsForHeaderValidation,
146 self._metrics.AddResultsForDataSaving,
147 ],
148 'compression: css': [
149 self._metrics.AddResultsForHeaderValidation,
150 self._metrics.AddResultsForDataSaving,
151 ],
152 'bypass': [self._metrics.AddResultsForBypass],
153 'safebrowsing': [self._metrics.AddResultsForSafebrowsing],
154 }
155 if not self._page.name in page_to_metrics:
156 raise page_measurement.MeasurementFailure(
157 'Invalid page name (%s) in smoke. Page name must be one of:\n%s' % (
158 self._page.name, page_to_metrics.keys()))
159 for add_result in page_to_metrics[self._page.name]:
160 add_result(tab, results)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698