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

Unified Diff: tools/include_tracer.py

Issue 6873034: Add a tool that estimates the size of a file after all #includes have been resolved. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: -Is Created 9 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
+print float(bytes) / (1 << 20), "megabytes of chrome source"
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698