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 """This is a helper module to get and manipulate histogram data. | 5 """This is a helper module to get and manipulate histogram data. |
6 | 6 |
7 The histogram data is the same data as is visible from "chrome://histograms". | 7 The histogram data is the same data as is visible from "chrome://histograms". |
8 More information can be found at: chromium/src/base/metrics/histogram.h | 8 More information can be found at: chromium/src/base/metrics/histogram.h |
9 | 9 |
10 Histogram data is collected with either the window.statsCollectionController | 10 Histogram data is collected with either the window.statsCollectionController |
11 object or the window.domAutomationController object. | 11 object or the window.domAutomationController object. |
12 """ | 12 """ |
13 | 13 |
14 import json | 14 import json |
15 import logging | 15 import logging |
16 | 16 |
17 BROWSER_HISTOGRAM = 'browser_histogram' | 17 BROWSER_HISTOGRAM = 'browser_histogram' |
18 RENDERER_HISTOGRAM = 'renderer_histogram' | 18 RENDERER_HISTOGRAM = 'renderer_histogram' |
19 | 19 |
20 def GetHistogramData(histogram_type, histogram_name, tab): | 20 def GetHistogramData(histogram_type, histogram_name, tab): |
21 """Get a json serialization of a histogram.""" | 21 """Get a json serialization of a histogram.""" |
22 assert histogram_type in [BROWSER_HISTOGRAM, RENDERER_HISTOGRAM] | 22 assert histogram_type in [BROWSER_HISTOGRAM, RENDERER_HISTOGRAM] |
23 function = 'getHistogram' | 23 function = 'getHistogram' |
24 if histogram_type == BROWSER_HISTOGRAM: | 24 if histogram_type == BROWSER_HISTOGRAM: |
25 function = 'getBrowserHistogram' | 25 function = 'getBrowserHistogram' |
26 # TODO(jeremy): Remove references to | 26 # TODO(jeremy): Remove references to |
27 # domAutomationController when we update the reference builds. | 27 # domAutomationController when we update the reference builds. |
28 return tab.EvaluateJavaScript( | 28 histogram_json = tab.EvaluateJavaScript( |
29 '(window.statsCollectionController ? ' | 29 '(window.statsCollectionController ? ' |
30 'statsCollectionController : ' | 30 'statsCollectionController : ' |
31 'domAutomationController).%s("%s")' % | 31 'domAutomationController).%s("%s")' % |
32 (function, histogram_name)) | 32 (function, histogram_name)) |
33 | 33 if histogram_json: |
| 34 return histogram_json |
| 35 return None |
34 | 36 |
35 def SubtractHistogram(histogram_json, start_histogram_json): | 37 def SubtractHistogram(histogram_json, start_histogram_json): |
36 """Subtracts a previous histogram from a histogram. | 38 """Subtracts a previous histogram from a histogram. |
37 | 39 |
38 Both parameters and the returned result are json serializations. | 40 Both parameters and the returned result are json serializations. |
39 """ | 41 """ |
40 start_histogram = json.loads(start_histogram_json) | 42 start_histogram = json.loads(start_histogram_json) |
41 # It's ok if the start histogram is empty (we had no data, maybe even no | 43 # It's ok if the start histogram is empty (we had no data, maybe even no |
42 # histogram at all, at the start of the test). | 44 # histogram at all, at the start of the test). |
43 if 'buckets' not in start_histogram: | 45 if 'buckets' not in start_histogram: |
(...skipping 19 matching lines...) Expand all Loading... |
63 if new_bucket['count'] < 0: | 65 if new_bucket['count'] < 0: |
64 logging.error('Histogram subtraction error, starting histogram most ' | 66 logging.error('Histogram subtraction error, starting histogram most ' |
65 'probably invalid.') | 67 'probably invalid.') |
66 if new_bucket['count']: | 68 if new_bucket['count']: |
67 new_buckets.append(new_bucket) | 69 new_buckets.append(new_bucket) |
68 histogram['buckets'] = new_buckets | 70 histogram['buckets'] = new_buckets |
69 histogram['count'] -= start_histogram['count'] | 71 histogram['count'] -= start_histogram['count'] |
70 | 72 |
71 return json.dumps(histogram) | 73 return json.dumps(histogram) |
72 | 74 |
OLD | NEW |