| Index: tools/perf/perf_tools/histogram.py
|
| diff --git a/tools/perf/perf_tools/histogram.py b/tools/perf/perf_tools/histogram.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c5cbb2ebce57abbaf050344c6bca2beb9cf979b5
|
| --- /dev/null
|
| +++ b/tools/perf/perf_tools/histogram.py
|
| @@ -0,0 +1,35 @@
|
| +# Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +import json
|
| +import logging
|
| +
|
| +def SubtractHistogram(histogram_json, start_histogram_json):
|
| + """Subtracts a previous histogram from a histogram. Both parameters are json
|
| + serializations of histograms."""
|
| + start_histogram = json.loads(start_histogram_json)
|
| + # It's ok if the start histogram is empty (we had no data, maybe even no
|
| + # histogram at all, at the start of the test).
|
| + if 'buckets' not in start_histogram:
|
| + return histogram_json
|
| +
|
| + start_histogram_buckets = dict()
|
| + for b in start_histogram['buckets']:
|
| + start_histogram_buckets[b['low']] = b['count']
|
| +
|
| + new_buckets = []
|
| + histogram = json.loads(histogram_json)
|
| + for b in histogram['buckets']:
|
| + new_bucket = b
|
| + low = b['low']
|
| + if low in start_histogram_buckets:
|
| + new_bucket['count'] = b['count'] - start_histogram_buckets[low]
|
| + if new_bucket['count'] < 0:
|
| + logging.error('Histogram subtraction error, starting histogram most '
|
| + 'probably invalid.')
|
| + if new_bucket['count']:
|
| + new_buckets.append(new_bucket)
|
| + histogram['buckets'] = new_buckets
|
| + histogram['count'] -= start_histogram['count']
|
| +
|
| + return json.dumps(histogram)
|
|
|