xref: /aosp_15_r20/external/skia/infra/bots/buildstats/make_treemap.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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