Index: tools/include_tracer.py |
diff --git a/tools/include_tracer.py b/tools/include_tracer.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..238902f6dbed9a0c31e0febcb55efd748f841c75 |
--- /dev/null |
+++ b/tools/include_tracer.py |
@@ -0,0 +1,190 @@ |
+#!/usr/bin/python |
+# Copyright 2011 Google Inc. |
Evan Martin
2011/04/18 21:05:55
I think you need to fix this to the official licen
Nico
2011/04/18 21:20:23
Done.
|
+# All Rights Reserved. |
+# author: thakis@chromium.org (Nico Weber) |
+# based on an almost identical script by: jyrki@google.com (Jyrki Alakuijala) |
+# |
+# This script prints out include dependencies in chrome. Since it ignores |
+# defines, it gives just a rough estimation of file size. |
+# |
+# Usage: |
+# python tools/include_tracer.py chrome/browser/ui/browser.h |
+ |
+import os |
+import sys |
+ |
+# Created by copying the command line for prerender_browsertest.cc, replacing |
+# spaces with newlines, and dropping everything except -F and -I switches. |
+# TODO(port): Add windows, linux directories. |
+ |
+INCLUDE_PATHS = [ |
+ '', |
+ 'gpu', |
+ 'skia/config', |
+ 'skia/ext', |
+ 'testing/gmock/include', |
+ 'testing/gtest/include', |
+ 'third_party/GTM', |
+ 'third_party/WebKit/Source', |
+ 'third_party/WebKit/Source/JavaScriptCore', |
+ 'third_party/WebKit/Source/JavaScriptCore/wtf', |
+ 'third_party/WebKit/Source/ThirdParty/glu', |
+ 'third_party/WebKit/Source/WebCore', |
+ 'third_party/WebKit/Source/WebCore/accessibility', |
+ 'third_party/WebKit/Source/WebCore/accessibility/chromium', |
+ 'third_party/WebKit/Source/WebCore/bindings', |
+ 'third_party/WebKit/Source/WebCore/bindings/generic', |
+ 'third_party/WebKit/Source/WebCore/bindings/v8', |
+ 'third_party/WebKit/Source/WebCore/bindings/v8/custom', |
+ 'third_party/WebKit/Source/WebCore/bindings/v8/specialization', |
+ 'third_party/WebKit/Source/WebCore/bridge', |
+ 'third_party/WebKit/Source/WebCore/bridge/jni', |
+ 'third_party/WebKit/Source/WebCore/bridge/jni/v8', |
+ 'third_party/WebKit/Source/WebCore/css', |
+ 'third_party/WebKit/Source/WebCore/dom', |
+ 'third_party/WebKit/Source/WebCore/dom/default', |
+ 'third_party/WebKit/Source/WebCore/editing', |
+ 'third_party/WebKit/Source/WebCore/fileapi', |
+ 'third_party/WebKit/Source/WebCore/history', |
+ 'third_party/WebKit/Source/WebCore/html', |
+ 'third_party/WebKit/Source/WebCore/html/canvas', |
+ 'third_party/WebKit/Source/WebCore/html/parser', |
+ 'third_party/WebKit/Source/WebCore/html/shadow', |
+ 'third_party/WebKit/Source/WebCore/inspector', |
+ 'third_party/WebKit/Source/WebCore/loader', |
+ 'third_party/WebKit/Source/WebCore/loader/appcache', |
+ 'third_party/WebKit/Source/WebCore/loader/archive', |
+ 'third_party/WebKit/Source/WebCore/loader/cache', |
+ 'third_party/WebKit/Source/WebCore/loader/icon', |
+ 'third_party/WebKit/Source/WebCore/mathml', |
+ 'third_party/WebKit/Source/WebCore/notifications', |
+ 'third_party/WebKit/Source/WebCore/page', |
+ 'third_party/WebKit/Source/WebCore/page/animation', |
+ 'third_party/WebKit/Source/WebCore/page/chromium', |
+ 'third_party/WebKit/Source/WebCore/platform', |
+ 'third_party/WebKit/Source/WebCore/platform/animation', |
+ 'third_party/WebKit/Source/WebCore/platform/audio', |
+ 'third_party/WebKit/Source/WebCore/platform/audio/chromium', |
+ 'third_party/WebKit/Source/WebCore/platform/audio/mac', |
+ 'third_party/WebKit/Source/WebCore/platform/chromium', |
+ 'third_party/WebKit/Source/WebCore/platform/cocoa', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/cg', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/chromium', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/cocoa', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/filters', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/gpu', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/mac', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/opentype', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/skia', |
+ 'third_party/WebKit/Source/WebCore/platform/graphics/transforms', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/bmp', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/gif', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/ico', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/jpeg', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/png', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/skia', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/webp', |
+ 'third_party/WebKit/Source/WebCore/platform/image-decoders/xbm', |
+ 'third_party/WebKit/Source/WebCore/platform/image-encoders/skia', |
+ 'third_party/WebKit/Source/WebCore/platform/mac', |
+ 'third_party/WebKit/Source/WebCore/platform/mock', |
+ 'third_party/WebKit/Source/WebCore/platform/network', |
+ 'third_party/WebKit/Source/WebCore/platform/network/chromium', |
+ 'third_party/WebKit/Source/WebCore/platform/sql', |
+ 'third_party/WebKit/Source/WebCore/platform/text', |
+ 'third_party/WebKit/Source/WebCore/platform/text/mac', |
+ 'third_party/WebKit/Source/WebCore/platform/text/transcoder', |
+ 'third_party/WebKit/Source/WebCore/plugins', |
+ 'third_party/WebKit/Source/WebCore/plugins/chromium', |
+ 'third_party/WebKit/Source/WebCore/rendering', |
+ 'third_party/WebKit/Source/WebCore/rendering/style', |
+ 'third_party/WebKit/Source/WebCore/rendering/svg', |
+ 'third_party/WebKit/Source/WebCore/storage', |
+ 'third_party/WebKit/Source/WebCore/storage/chromium', |
+ 'third_party/WebKit/Source/WebCore/svg', |
+ 'third_party/WebKit/Source/WebCore/svg/animation', |
+ 'third_party/WebKit/Source/WebCore/svg/graphics', |
+ 'third_party/WebKit/Source/WebCore/svg/graphics/filters', |
+ 'third_party/WebKit/Source/WebCore/svg/properties', |
+ 'third_party/WebKit/Source/WebCore/webaudio', |
+ 'third_party/WebKit/Source/WebCore/websockets', |
+ 'third_party/WebKit/Source/WebCore/workers', |
+ 'third_party/WebKit/Source/WebCore/xml', |
+ 'third_party/WebKit/Source/WebKit/chromium/public', |
+ 'third_party/WebKit/Source/WebKit/chromium/src', |
+ 'third_party/WebKit/Source/WebKit/mac/WebCoreSupport', |
+ 'third_party/WebKit/WebKitLibraries', |
+ 'third_party/cld', |
+ 'third_party/icu/public/common', |
+ 'third_party/icu/public/i18n', |
+ 'third_party/npapi', |
+ 'third_party/npapi/bindings', |
+ 'third_party/protobuf', |
+ 'third_party/protobuf/src', |
+ 'third_party/skia/gpu/include', |
+ 'third_party/skia/include/config', |
+ 'third_party/skia/include/core', |
+ 'third_party/skia/include/effects', |
+ 'third_party/skia/include/gpu', |
+ 'third_party/skia/include/pdf', |
+ 'third_party/skia/include/ports', |
+ 'v8/include', |
+ 'xcodebuild/Debug/include', |
+ 'xcodebuild/DerivedSources/Debug/chrome', |
+ 'xcodebuild/DerivedSources/Debug/policy', |
+ 'xcodebuild/DerivedSources/Debug/protoc_out', |
+ 'xcodebuild/DerivedSources/Debug/webkit', |
+ 'xcodebuild/DerivedSources/Debug/webkit/bindings', |
+] |
+ |
+def Exists(p): |
+ return os.path.exists(p) |
+ |
+def Walk(seen, filename, parent, indent): |
Evan Martin
2011/04/18 21:05:55
docstrings?
Nico
2011/04/18 21:20:23
Done.
|
+ total_bytes = 0 |
+ # .proto(devel) filename translation |
+ if filename.endswith('.pb.h'): |
+ basename = filename[:-5] |
+ if Exists(basename + '.proto'): |
+ filename = basename + '.proto' |
+ else: |
+ print 'could not find ', filename |
+ # show and count only once |
+ if filename in seen: |
+ return total_bytes |
+ seen.add(filename) |
+ # display the paths |
+ print ' ' * indent + filename |
+ # skip these |
+ if filename == 'base/stl_decl.h' or filename[0] == '<': |
+ return total_bytes |
+ # recursion |
+ resolved_filename = filename |
+ for root in INCLUDE_PATHS + [os.path.dirname(parent)]: |
+ if Exists(os.path.join(root, filename)): |
+ resolved_filename = os.path.join(root, filename) |
+ break |
+ if Exists(resolved_filename): |
+ lines = open(resolved_filename).readlines() |
+ else: |
+ print ' ' * (indent + 2) + "-- not found" |
+ lines = [] |
+ for line in lines: |
+ line = line.strip() |
+ if line.startswith('#include "'): |
+ total_bytes += Walk( |
+ seen, line.split('"')[1], resolved_filename, indent + 2) |
+ elif line.startswith('#include '): |
+ include = '<' + line.split('<')[1].split('>')[0] + '>' |
+ total_bytes += Walk( |
+ seen, include, resolved_filename, indent + 2) |
+ elif line.startswith('import '): |
+ total_bytes += Walk( |
+ seen, line.split('"')[1], resolved_filename, indent + 2) |
+ return total_bytes + len("".join(lines)) |
Evan Martin
2011/04/18 21:05:55
Can you add some whitespace to this function? It
Nico
2011/04/18 21:20:23
Done.
|
+ |
+bytes = Walk(set(), sys.argv[1], '', 0) |
+print float(bytes) / (1 << 20), "megabytes of chrome source" |