1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2018 The Chromium Authors. All rights reserved. 2*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker"""Writes a Perf-formated json file with stats about the given web file.""" 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Workerfrom __future__ import print_function 10*c8dee2aaSAndroid Build Coastguard Workerimport json 11*c8dee2aaSAndroid Build Coastguard Workerimport os 12*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 13*c8dee2aaSAndroid Build Coastguard Workerimport sys 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Workerdef main(): 17*c8dee2aaSAndroid Build Coastguard Worker input_file = sys.argv[1] 18*c8dee2aaSAndroid Build Coastguard Worker out_dir = sys.argv[2] 19*c8dee2aaSAndroid Build Coastguard Worker keystr = sys.argv[3] 20*c8dee2aaSAndroid Build Coastguard Worker propstr = sys.argv[4] 21*c8dee2aaSAndroid Build Coastguard Worker total_size_bytes_key = sys.argv[5] 22*c8dee2aaSAndroid Build Coastguard Worker magic_seperator = sys.argv[6] 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker results = { 25*c8dee2aaSAndroid Build Coastguard Worker 'key': { }, 26*c8dee2aaSAndroid Build Coastguard Worker 'results': { } 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker props = propstr.split(' ') 30*c8dee2aaSAndroid Build Coastguard Worker for i in range(0, len(props), 2): 31*c8dee2aaSAndroid Build Coastguard Worker results[props[i]] = props[i+1] 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker keys = keystr.split(' ') 34*c8dee2aaSAndroid Build Coastguard Worker for i in range(0, len(keys), 2): 35*c8dee2aaSAndroid Build Coastguard Worker results['key'][keys[i]] = keys[i+1] 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker r = { 38*c8dee2aaSAndroid Build Coastguard Worker total_size_bytes_key: os.path.getsize(input_file) 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker # Make a copy to avoid destroying the hardlinked file. 42*c8dee2aaSAndroid Build Coastguard Worker # Swarming hardlinks in the builds from isolated cache. 43*c8dee2aaSAndroid Build Coastguard Worker temp_file = input_file + '_tmp' 44*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['cp', input_file, temp_file]) 45*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['gzip', temp_file]) 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker r['gzip_size_bytes'] = os.path.getsize(temp_file + '.gz') 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker name = os.path.basename(input_file) 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker print(magic_seperator) 52*c8dee2aaSAndroid Build Coastguard Worker results['results'][name] = { 53*c8dee2aaSAndroid Build Coastguard Worker # We need this top level layer 'config'/slice 54*c8dee2aaSAndroid Build Coastguard Worker # Other analysis methods (e.g. libskia) might have 55*c8dee2aaSAndroid Build Coastguard Worker # slices for data on the 'code' section, etc. 56*c8dee2aaSAndroid Build Coastguard Worker 'default' : r, 57*c8dee2aaSAndroid Build Coastguard Worker } 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker # Make debugging easier 60*c8dee2aaSAndroid Build Coastguard Worker print(json.dumps(results, indent=2)) 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker with open(os.path.join(out_dir, name+'.json'), 'w') as output: 63*c8dee2aaSAndroid Build Coastguard Worker output.write(json.dumps(results, indent=2)) 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 67*c8dee2aaSAndroid Build Coastguard Worker main() 68