| Index: third_party/chrome/tools/include_tracer.py
|
| diff --git a/third_party/chrome/tools/include_tracer.py b/third_party/chrome/tools/include_tracer.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..5d908d1d1f79aeb37168913f13ffd07b24130bce
|
| --- /dev/null
|
| +++ b/third_party/chrome/tools/include_tracer.py
|
| @@ -0,0 +1,206 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2011 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.
|
| +# based on an almost identical script by: jyrki@google.com (Jyrki Alakuijala)
|
| +
|
| +"""Prints out include dependencies in chrome.
|
| +
|
| +Since it ignores defines, it gives just a rough estimation of file size.
|
| +
|
| +Usage:
|
| + 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))
|
| +
|
| +
|
| +def main():
|
| + bytes = Walk(set(), sys.argv[1], '', 0)
|
| + print
|
| + print float(bytes) / (1 << 20), "megabytes of chrome source"
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main())
|
|
|