OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import collections | 5 import collections |
6 import json | 6 import json |
7 import logging | 7 import logging |
8 | 8 |
9 from telemetry.core import exceptions | 9 from telemetry.core import exceptions |
10 from telemetry.value import histogram_util | 10 from telemetry.value import histogram_util |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 return (int(high_bytes) << 32) | (int(low_bytes) << 1) | 50 return (int(high_bytes) << 32) | (int(low_bytes) << 1) |
51 | 51 |
52 def _RecordTabLoadTimes(self, tab, browser_main_entry_time_ms, results): | 52 def _RecordTabLoadTimes(self, tab, browser_main_entry_time_ms, results): |
53 """Records the tab load times for the browser. """ | 53 """Records the tab load times for the browser. """ |
54 TabLoadTime = collections.namedtuple( | 54 TabLoadTime = collections.namedtuple( |
55 'TabLoadTime', | 55 'TabLoadTime', |
56 ['request_start_ms', 'load_end_ms']) | 56 ['request_start_ms', 'load_end_ms']) |
57 | 57 |
58 def RecordOneTab(t): | 58 def RecordOneTab(t): |
59 def EvaluateInt(exp): | 59 def EvaluateInt(exp): |
60 val = t.EvaluateJavaScript2(exp) | 60 val = t.EvaluateJavaScript(exp) |
61 if not val: | 61 if not val: |
62 logging.warn('%s undefined', exp) | 62 logging.warn('%s undefined', exp) |
63 return 0 | 63 return 0 |
64 return int(val) | 64 return int(val) |
65 | 65 |
66 try: | 66 try: |
67 t.WaitForJavaScriptCondition2( | 67 t.WaitForJavaScriptCondition( |
68 'window.performance.timing["loadEventEnd"] > 0', | 68 'window.performance.timing["loadEventEnd"] > 0', |
69 timeout=self.DEFAULT_LOADING_TIMEOUT) | 69 timeout=self.DEFAULT_LOADING_TIMEOUT) |
70 | 70 |
71 # EvaluateJavaScript(window.performance.timing) doesn't guarantee to | 71 # EvaluateJavaScript(window.performance.timing) doesn't guarantee to |
72 # return the desired javascript object (crbug/472603). It may return an | 72 # return the desired javascript object (crbug/472603). It may return an |
73 # empty object. However getting individual field works. | 73 # empty object. However getting individual field works. |
74 # The behavior depends on WebKit implementation on different platforms. | 74 # The behavior depends on WebKit implementation on different platforms. |
75 load_event_end = EvaluateInt( | 75 load_event_end = EvaluateInt( |
76 'window.performance.timing["loadEventEnd"]') | 76 'window.performance.timing["loadEventEnd"]') |
77 request_start = EvaluateInt( | 77 request_start = EvaluateInt( |
(...skipping 20 matching lines...) Expand all Loading... |
98 results.AddValue(scalar.ScalarValue( | 98 results.AddValue(scalar.ScalarValue( |
99 results.current_page, 'foreground_tab_load_complete', 'ms', | 99 results.current_page, 'foreground_tab_load_complete', 'ms', |
100 foreground_tab_load_complete)) | 100 foreground_tab_load_complete)) |
101 if foreground_tab_stats.request_start_ms > 0: | 101 if foreground_tab_stats.request_start_ms > 0: |
102 results.AddValue(scalar.ScalarValue( | 102 results.AddValue(scalar.ScalarValue( |
103 results.current_page, 'foreground_tab_request_start', 'ms', | 103 results.current_page, 'foreground_tab_request_start', 'ms', |
104 foreground_tab_stats.request_start_ms - browser_main_entry_time_ms)) | 104 foreground_tab_stats.request_start_ms - browser_main_entry_time_ms)) |
105 | 105 |
106 def AddResults(self, tab, results): | 106 def AddResults(self, tab, results): |
107 for display_name, histogram_name in self.HISTOGRAMS_TO_RECORD.iteritems(): | 107 for display_name, histogram_name in self.HISTOGRAMS_TO_RECORD.iteritems(): |
108 result = tab.EvaluateJavaScript2( | 108 result = tab.EvaluateJavaScript( |
109 'statsCollectionController.getBrowserHistogram({{ name }})', | 109 'statsCollectionController.getBrowserHistogram({{ name }})', |
110 name=histogram_name) | 110 name=histogram_name) |
111 result = json.loads(result) | 111 result = json.loads(result) |
112 measured_time = 0 | 112 measured_time = 0 |
113 | 113 |
114 if 'sum' in result: | 114 if 'sum' in result: |
115 # For all the histograms logged here, there's a single entry so sum | 115 # For all the histograms logged here, there's a single entry so sum |
116 # is the exact value for that entry. | 116 # is the exact value for that entry. |
117 measured_time = result['sum'] | 117 measured_time = result['sum'] |
118 elif 'buckets' in result: | 118 elif 'buckets' in result: |
119 measured_time = (result['buckets'][0]['high'] + | 119 measured_time = (result['buckets'][0]['high'] + |
120 result['buckets'][0]['low']) / 2 | 120 result['buckets'][0]['low']) / 2 |
121 | 121 |
122 results.AddValue(scalar.ScalarValue( | 122 results.AddValue(scalar.ScalarValue( |
123 results.current_page, display_name, 'ms', measured_time)) | 123 results.current_page, display_name, 'ms', measured_time)) |
124 | 124 |
125 # Get tab load times. | 125 # Get tab load times. |
126 browser_main_entry_time_ms = self._GetBrowserMainEntryTime(tab) | 126 browser_main_entry_time_ms = self._GetBrowserMainEntryTime(tab) |
127 if browser_main_entry_time_ms is None: | 127 if browser_main_entry_time_ms is None: |
128 print 'Outdated Chrome version, browser main entry time not supported.' | 128 print 'Outdated Chrome version, browser main entry time not supported.' |
129 return | 129 return |
130 self._RecordTabLoadTimes(tab, browser_main_entry_time_ms, results) | 130 self._RecordTabLoadTimes(tab, browser_main_entry_time_ms, results) |
OLD | NEW |