Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: swarm_client/tools/zip_profiler.py

Issue 69143004: Delete swarm_client. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « swarm_client/tools/swarming_load_test_client.py ('k') | swarm_client/tools/zip_run_isolated.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Profiler to compare various compression levels with regards to speed
7 and final size when compressing the full set of files from a given
8 isolated file.
9 """
10
11 import bz2
12 import optparse
13 import os
14 import shutil
15 import subprocess
16 import sys
17 import tempfile
18 import time
19 import zlib
20
21 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
22 sys.path.insert(0, ROOT_DIR)
23
24 from utils import tools
25
26
27 def zip_file(compressor_constructor, compression_level, filename):
28 compressed_size = 0
29 compressor = compressor_constructor(compression_level)
30 with open(filename, 'rb') as f:
31 while True:
32 chunk = f.read(16 * 1024)
33 if not chunk:
34 break
35 compressed_size += len(compressor.compress(f.read()))
36 compressed_size += len(compressor.flush())
37
38 return compressed_size
39
40
41 def zip_directory(compressor_constructor, compression_level, root_dir):
42 compressed_size = 0
43 for root, _, files in os.walk(root_dir):
44 compressed_size += sum(zip_file(compressor_constructor, compression_level,
45 os.path.join(root, name))
46 for name in files)
47 return compressed_size
48
49
50 def profile_compress(zip_module_name, compressor_constructor,
51 compression_range, compress_func, compress_target):
52 for i in compression_range:
53 start_time = time.time()
54 compressed_size = compress_func(compressor_constructor, i, compress_target)
55 end_time = time.time()
56
57 print('%4s at compression level %s, total size %11d, time taken %6.3f' %
58 (zip_module_name, i, compressed_size, end_time - start_time))
59
60
61 def tree_files(root_dir):
62 file_set = {}
63 for root, _, files in os.walk(root_dir):
64 for name in files:
65 filename = os.path.join(root, name)
66 file_set[filename] = os.stat(filename).st_size
67
68 return file_set
69
70
71 def main():
72 tools.disable_buffering()
73 parser = optparse.OptionParser()
74 parser.add_option('-s', '--isolated', help='.isolated file to profile with.')
75 parser.add_option('--largest_files', type='int',
76 help='If this is set, instead of compressing all the '
77 'files, only the large n files will be compressed')
78 options, args = parser.parse_args()
79
80 if args:
81 parser.error('Unknown args passed in; %s' % args)
82 if not options.isolated:
83 parser.error('The .isolated file must be given.')
84
85 temp_dir = None
86 try:
87 temp_dir = tempfile.mkdtemp()
88
89 # Create a directory of the required files
90 subprocess.check_call([os.path.join(ROOT_DIR, 'isolate.py'),
91 'remap',
92 '-s', options.isolated,
93 '--outdir', temp_dir])
94
95 file_set = tree_files(temp_dir)
96
97 if options.largest_files:
98 sorted_by_size = sorted(file_set.iteritems(), key=lambda x: x[1],
99 reverse=True)
100 files_to_compress = sorted_by_size[:options.largest_files]
101
102 for filename, size in files_to_compress:
103 print('Compressing %s, uncompressed size %d' % (filename, size))
104
105 profile_compress('zlib', zlib.compressobj, range(10), zip_file,
106 filename)
107 profile_compress('bz2', bz2.BZ2Compressor, range(1, 10), zip_file,
108 filename)
109 else:
110 print('Number of files: %s' % len(file_set))
111 print('Total size: %s' % sum(file_set.itervalues()))
112
113 # Profile!
114 profile_compress('zlib', zlib.compressobj, range(10), zip_directory,
115 temp_dir)
116 profile_compress('bz2', bz2.BZ2Compressor, range(1, 10), zip_directory,
117 temp_dir)
118 finally:
119 shutil.rmtree(temp_dir)
120
121
122 if __name__ == '__main__':
123 sys.exit(main())
OLDNEW
« no previous file with comments | « swarm_client/tools/swarming_load_test_client.py ('k') | swarm_client/tools/zip_run_isolated.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698