Index: tools/include_tracer.py |
diff --git a/tools/include_tracer.py b/tools/include_tracer.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..c35b41def50cda455d59b413abf81037f964dfff |
--- /dev/null |
+++ b/tools/include_tracer.py |
@@ -0,0 +1,199 @@ |
+#!/usr/bin/python |
+# Copyright (c) 2010 The Chromium Authors. All rights reserved. |
Evan Martin
2011/04/18 21:46:47
2011
Nico
2011/04/18 21:54:28
Done.
|
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+# 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 Walk(seen, filename, parent, indent): |
+ """Returns the size of |filename| plus the size of all files included by |
+ |filename| and prints the include tree of |filename| to stdout. Every file |
+ is visited at most once. |
+ """ |
+ total_bytes = 0 |
+ |
+ # .proto(devel) filename translation |
+ if filename.endswith('.pb.h'): |
+ basename = filename[:-5] |
+ if os.path.exists(basename + '.proto'): |
+ filename = basename + '.proto' |
+ else: |
+ print 'could not find ', filename |
+ |
+ # Show and count files only once. |
+ if filename in seen: |
+ return total_bytes |
+ seen.add(filename) |
+ |
+ # Display the paths. |
+ print ' ' * indent + filename |
+ |
+ # Skip system includes. |
+ if filename[0] == '<': |
+ return total_bytes |
+ |
+ # Find file in all include paths. |
+ resolved_filename = filename |
+ for root in INCLUDE_PATHS + [os.path.dirname(parent)]: |
+ if os.path.exists(os.path.join(root, filename)): |
+ resolved_filename = os.path.join(root, filename) |
+ break |
+ |
+ # Recurse. |
+ if os.path.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)) |
+ |
+ |
+bytes = Walk(set(), sys.argv[1], '', 0) |
+print float(bytes) / (1 << 20), "megabytes of chrome source" |