1 # Copyright 2015 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.
7 import chrome_proxy_metrics
as metrics
8 from common
import chrome_proxy_measurements
as measurements
9 from telemetry
.core
import exceptions
10 from telemetry
.page
import page_test
12 class ChromeProxyLatencyBase(page_test
.PageTest
):
13 """Chrome latency measurement."""
15 def __init__(self
, *args
, **kwargs
):
16 super(ChromeProxyLatencyBase
, self
).__init
__(*args
, **kwargs
)
17 self
._metrics
= metrics
.ChromeProxyMetric()
19 def WillNavigateToPage(self
, page
, tab
):
20 tab
.ClearCache(force
=True)
21 self
._metrics
.Start(page
, tab
)
23 def ValidateAndMeasurePage(self
, page
, tab
, results
):
24 # Wait for the load event.
25 tab
.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
26 self
._metrics
.Stop(page
, tab
)
27 self
._metrics
.AddResultsForLatency(tab
, results
)
30 class ChromeProxyLatency(ChromeProxyLatencyBase
):
31 """Chrome proxy latency measurement."""
33 def __init__(self
, *args
, **kwargs
):
34 super(ChromeProxyLatency
, self
).__init
__(*args
, **kwargs
)
36 def CustomizeBrowserOptions(self
, options
):
37 # NOTE: When using the Data Saver API, the first few requests for this test
38 # could go over direct instead of through the Data Reduction Proxy if the
39 # Data Saver API fetch is slow to finish. This test can't just use
40 # measurements.WaitForViaHeader(tab) since that would affect the results of
41 # the latency measurement, e.g. Chrome would have a hot proxy connection.
42 options
.AppendExtraBrowserArgs('--enable-spdy-proxy-auth')
45 class ChromeProxyLatencyDirect(ChromeProxyLatencyBase
):
46 """Direct connection latency measurement."""
48 def __init__(self
, *args
, **kwargs
):
49 super(ChromeProxyLatencyDirect
, self
).__init
__(*args
, **kwargs
)
52 class ChromeProxyDataSavingBase(page_test
.PageTest
):
53 """Chrome data saving measurement."""
54 def __init__(self
, *args
, **kwargs
):
55 super(ChromeProxyDataSavingBase
, self
).__init
__(*args
, **kwargs
)
56 self
._metrics
= metrics
.ChromeProxyMetric()
58 def WillNavigateToPage(self
, page
, tab
):
59 tab
.ClearCache(force
=True)
60 self
._metrics
.Start(page
, tab
)
62 def ValidateAndMeasurePage(self
, page
, tab
, results
):
63 # Wait for the load event.
64 tab
.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
65 self
._metrics
.Stop(page
, tab
)
66 self
._metrics
.AddResultsForDataSaving(tab
, results
)
69 class ChromeProxyDataSaving(ChromeProxyDataSavingBase
):
70 """Chrome proxy data saving measurement."""
72 def __init__(self
, *args
, **kwargs
):
73 super(ChromeProxyDataSaving
, self
).__init
__(*args
, **kwargs
)
75 def CustomizeBrowserOptions(self
, options
):
76 options
.AppendExtraBrowserArgs('--enable-spdy-proxy-auth')
78 def WillNavigateToPage(self
, page
, tab
):
79 measurements
.WaitForViaHeader(tab
)
80 super(ChromeProxyDataSaving
, self
).WillNavigateToPage(page
, tab
)
83 class ChromeProxyDataSavingDirect(ChromeProxyDataSavingBase
):
84 """Direct connection data saving measurement."""
86 def __init__(self
, *args
, **kwargs
):
87 super(ChromeProxyDataSavingDirect
, self
).__init
__(*args
, **kwargs
)