1 # Copyright (c) 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.
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
:
16 histogram
= json
.loads(histogram_json
)
17 if ('pid' in start_histogram
and 'pid' in histogram
18 and start_histogram
['pid'] != histogram
['pid']):
20 'Trying to compare histograms from different processes (%d and %d)'
21 % (start_histogram
['pid'], histogram
['pid']))
23 start_histogram_buckets
= dict()
24 for b
in start_histogram
['buckets']:
25 start_histogram_buckets
[b
['low']] = b
['count']
28 for b
in histogram
['buckets']:
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 '
36 if new_bucket
['count']:
37 new_buckets
.append(new_bucket
)
38 histogram
['buckets'] = new_buckets
39 histogram
['count'] -= start_histogram
['count']
41 return json
.dumps(histogram
)