1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/python 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project 4*6dbdd20aSAndroid Build Coastguard Worker# 5*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*6dbdd20aSAndroid Build Coastguard Worker# 9*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*6dbdd20aSAndroid Build Coastguard Worker# 11*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Workerimport sys 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Workerimport scipy as sp 20*6dbdd20aSAndroid Build Coastguard Workerimport seaborn as sns 21*6dbdd20aSAndroid Build Coastguard Worker 22*6dbdd20aSAndroid Build Coastguard Workerfrom collections import defaultdict 23*6dbdd20aSAndroid Build Coastguard Workerfrom matplotlib import pyplot as plt 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Workerdef main(argv): 27*6dbdd20aSAndroid Build Coastguard Worker sns.set() 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard Worker # Map from key to map from iteration id to bytes allocated. 30*6dbdd20aSAndroid Build Coastguard Worker distributions = defaultdict(lambda: defaultdict(int)) 31*6dbdd20aSAndroid Build Coastguard Worker ground_truth = {} 32*6dbdd20aSAndroid Build Coastguard Worker for line in sys.stdin: 33*6dbdd20aSAndroid Build Coastguard Worker stripped = line.strip() 34*6dbdd20aSAndroid Build Coastguard Worker # Skip empty lines 35*6dbdd20aSAndroid Build Coastguard Worker if not stripped: 36*6dbdd20aSAndroid Build Coastguard Worker continue 37*6dbdd20aSAndroid Build Coastguard Worker itr, code_location, size = stripped.split(" ") 38*6dbdd20aSAndroid Build Coastguard Worker if itr == 'g': 39*6dbdd20aSAndroid Build Coastguard Worker assert code_location not in ground_truth 40*6dbdd20aSAndroid Build Coastguard Worker ground_truth[code_location] = int(size) 41*6dbdd20aSAndroid Build Coastguard Worker else: 42*6dbdd20aSAndroid Build Coastguard Worker assert int(itr) not in distributions[code_location] 43*6dbdd20aSAndroid Build Coastguard Worker distributions[code_location][int(itr)] += int(size) 44*6dbdd20aSAndroid Build Coastguard Worker 45*6dbdd20aSAndroid Build Coastguard Worker # Map from key to list of bytes allocated, one for each iteration. 46*6dbdd20aSAndroid Build Coastguard Worker flat_distributions = { 47*6dbdd20aSAndroid Build Coastguard Worker key: list(value.values()) for key, value in distributions.items() 48*6dbdd20aSAndroid Build Coastguard Worker } 49*6dbdd20aSAndroid Build Coastguard Worker 50*6dbdd20aSAndroid Build Coastguard Worker for key, value in flat_distributions.items(): 51*6dbdd20aSAndroid Build Coastguard Worker print(key, "ground truth %d " % ground_truth[key], sp.stats.describe(value)) 52*6dbdd20aSAndroid Build Coastguard Worker sns.distplot(value) 53*6dbdd20aSAndroid Build Coastguard Worker plt.show() 54*6dbdd20aSAndroid Build Coastguard Worker 55*6dbdd20aSAndroid Build Coastguard Worker 56*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__': 57*6dbdd20aSAndroid Build Coastguard Worker main(sys.argv) 58