1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2019 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"""Creates a .tar.gz file containing an HTML treemap displaying the codesize. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker Requires docker to be installed. 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker Example usage: 11*c8dee2aaSAndroid Build Coastguard Worker python make_treemap.py $SKIA_ROOT/out/Release/skottie_tool /tmp/size 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker""" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Workerimport os 17*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 18*c8dee2aaSAndroid Build Coastguard Workerimport sys 19*c8dee2aaSAndroid Build Coastguard Workerimport tempfile 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard WorkerDOCKER_IMAGE = 'gcr.io/skia-public/binary-size:v1' 22*c8dee2aaSAndroid Build Coastguard WorkerDOCKER_SCRIPT = '/opt/binary_size/src/run_binary_size_analysis.py' 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Workerdef main(): 25*c8dee2aaSAndroid Build Coastguard Worker input_file = sys.argv[1] 26*c8dee2aaSAndroid Build Coastguard Worker out_dir = sys.argv[2] 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker input_base = os.path.basename(input_file) 29*c8dee2aaSAndroid Build Coastguard Worker input_dir = os.path.dirname(input_file) 30*c8dee2aaSAndroid Build Coastguard Worker temp_out = tempfile.mkdtemp('treemap') 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['docker', 'run', '--volume', '%s:/IN' % input_dir, 33*c8dee2aaSAndroid Build Coastguard Worker '--volume', '%s:/OUT' % temp_out, 34*c8dee2aaSAndroid Build Coastguard Worker DOCKER_IMAGE, DOCKER_SCRIPT, 35*c8dee2aaSAndroid Build Coastguard Worker '--library', '/IN/%s' % input_base, 36*c8dee2aaSAndroid Build Coastguard Worker '--destdir', '/OUT']) 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['tar', '--directory=%s' % temp_out, '-zcf', 39*c8dee2aaSAndroid Build Coastguard Worker '%s/%s_tree.tar.gz' % (out_dir, input_base), 40*c8dee2aaSAndroid Build Coastguard Worker '.']) 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker # Delete our temporary directory 43*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['docker', 'run', 44*c8dee2aaSAndroid Build Coastguard Worker '--volume', '%s:/OUT' % temp_out, 45*c8dee2aaSAndroid Build Coastguard Worker DOCKER_IMAGE, '/bin/sh', '-c', 'rm -rf /OUT/*']) 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 48*c8dee2aaSAndroid Build Coastguard Worker main() 49