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

Unified Diff: tools/grit/grit/format/gzip_string.py

Issue 1968993002: Compressing .pak resources with new option: "type=GZIPPABLE_BINDATA" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updating comments Created 4 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: tools/grit/grit/format/gzip_string.py
diff --git a/tools/grit/grit/format/gzip_string.py b/tools/grit/grit/format/gzip_string.py
new file mode 100644
index 0000000000000000000000000000000000000000..bd1e726a6efd9661f75d031abccf7c46ecaedbde
--- /dev/null
+++ b/tools/grit/grit/format/gzip_string.py
@@ -0,0 +1,40 @@
+# Copyright (c) 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Provides gzip utilities for strings.
+"""
+import gzip
+import StringIO
agrieve 2016/05/27 17:40:00 nit: cStringIO is probably faster.
smaier 2016/05/27 17:48:47 Done.
+import subprocess
+
+def GzipStringRsyncable(data):
+ # Make call to host system's gzip to get access to --rsyncable option. This
+ # option makes updates much smaller - if one line is changed in the resource,
+ # it won't have to push the entire compressed resource with the update.
+ # Instead, --rsyncable breaks the file into small chunks, so that one doesn't
+ # affect the other in compression, and then only that chunk will have to be
+ # updated.
+ gzip_proc = subprocess.Popen(['gzip', '--stdout', '--rsyncable',
+ '--best', '--no-name'],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ data, stderr = gzip_proc.communicate(data)
+ if gzip_proc.returncode != 0:
+ raise subprocess.CalledProcessError(gzip_proc.returncode, 'gzip',
+ stderr)
+ return data
+
+
+def GzipString(data):
+ # Allowing for option to use Python's gzip: Windows doesn't ship with gzip,
+ # and OSX's gzip does not have an --rsyncable option built in. Although this
+ # is not as good as --rsyncable, it is an option for the systems that do not
+ # have --rsyncable. This function should be avoided for release builds.
+ gzip_output = StringIO.StringIO()
+ with gzip.GzipFile(mode='wb', compresslevel=9, fileobj=gzip_output,
+ mtime=0) as gzip_file:
+ gzip_file.write(data)
+ data = gzip_output.getvalue()
+ gzip_output.close()
+ return data

Powered by Google App Engine
This is Rietveld 408576698