| OLD | NEW |
| (Empty) |
| 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 | |
| 3 # found in the LICENSE file. | |
| 4 import json | |
| 5 import logging | |
| 6 | |
| 7 def SubtractHistogram(histogram_json, start_histogram_json): | |
| 8 """Subtracts a previous histogram from a histogram. Both parameters are json | |
| 9 serializations of histograms.""" | |
| 10 start_histogram = json.loads(start_histogram_json) | |
| 11 # It's ok if the start histogram is empty (we had no data, maybe even no | |
| 12 # histogram at all, at the start of the test). | |
| 13 if 'buckets' not in start_histogram: | |
| 14 return histogram_json | |
| 15 | |
| 16 histogram = json.loads(histogram_json) | |
| 17 if ('pid' in start_histogram and 'pid' in histogram | |
| 18 and start_histogram['pid'] != histogram['pid']): | |
| 19 raise Exception( | |
| 20 'Trying to compare histograms from different processes (%d and %d)' | |
| 21 % (start_histogram['pid'], histogram['pid'])) | |
| 22 | |
| 23 start_histogram_buckets = dict() | |
| 24 for b in start_histogram['buckets']: | |
| 25 start_histogram_buckets[b['low']] = b['count'] | |
| 26 | |
| 27 new_buckets = [] | |
| 28 for b in histogram['buckets']: | |
| 29 new_bucket = b | |
| 30 low = b['low'] | |
| 31 if low in start_histogram_buckets: | |
| 32 new_bucket['count'] = b['count'] - start_histogram_buckets[low] | |
| 33 if new_bucket['count'] < 0: | |
| 34 logging.error('Histogram subtraction error, starting histogram most ' | |
| 35 'probably invalid.') | |
| 36 if new_bucket['count']: | |
| 37 new_buckets.append(new_bucket) | |
| 38 histogram['buckets'] = new_buckets | |
| 39 histogram['count'] -= start_histogram['count'] | |
| 40 | |
| 41 return json.dumps(histogram) | |
| 42 | |
| 43 def GetHistogramFromDomAutomation(function, name, tab): | |
| 44 # TODO(jeremy): Remove references to | |
| 45 # domAutomationController when we update the reference builds. | |
| 46 js = ('(window.statsCollectionController ? ' | |
| 47 'statsCollectionController : ' | |
| 48 'domAutomationController).%s("%s")' % | |
| 49 (function, name)) | |
| 50 return tab.EvaluateJavaScript(js) | |
| OLD | NEW |