- add sources.
[platform/framework/web/crosswalk.git] / src / tools / include_tracer.py
1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5 # based on an almost identical script by: jyrki@google.com (Jyrki Alakuijala)
6
7 """Prints out include dependencies in chrome.
8
9 Since it ignores defines, it gives just a rough estimation of file size.
10
11 Usage:
12   tools/include_tracer.py chrome/browser/ui/browser.h
13 """
14
15 import os
16 import sys
17
18 # Created by copying the command line for prerender_browsertest.cc, replacing
19 # spaces with newlines, and dropping everything except -F and -I switches.
20 # TODO(port): Add windows, linux directories.
21 INCLUDE_PATHS = [
22   '',
23   'gpu',
24   'skia/config',
25   'skia/ext',
26   'testing/gmock/include',
27   'testing/gtest/include',
28   'third_party/GTM',
29   'third_party/WebKit/Source',
30   'third_party/WebKit/Source/wtf',
31   'third_party/WebKit/Source/core',
32   'third_party/WebKit/Source/core/accessibility',
33   'third_party/WebKit/Source/core/accessibility/chromium',
34   'third_party/WebKit/Source/core/bindings',
35   'third_party/WebKit/Source/core/bindings/generic',
36   'third_party/WebKit/Source/core/bindings/v8',
37   'third_party/WebKit/Source/core/bindings/v8/custom',
38   'third_party/WebKit/Source/core/bindings/v8/specialization',
39   'third_party/WebKit/Source/core/bridge',
40   'third_party/WebKit/Source/core/bridge/jni',
41   'third_party/WebKit/Source/core/bridge/jni/v8',
42   'third_party/WebKit/Source/core/css',
43   'third_party/WebKit/Source/core/dom',
44   'third_party/WebKit/Source/core/dom/default',
45   'third_party/WebKit/Source/core/editing',
46   'third_party/WebKit/Source/core/fileapi',
47   'third_party/WebKit/Source/core/history',
48   'third_party/WebKit/Source/core/html',
49   'third_party/WebKit/Source/core/html/canvas',
50   'third_party/WebKit/Source/core/html/parser',
51   'third_party/WebKit/Source/core/html/shadow',
52   'third_party/WebKit/Source/core/inspector',
53   'third_party/WebKit/Source/core/loader',
54   'third_party/WebKit/Source/core/loader/appcache',
55   'third_party/WebKit/Source/core/loader/archive',
56   'third_party/WebKit/Source/core/loader/cache',
57   'third_party/WebKit/Source/core/loader/icon',
58   'third_party/WebKit/Source/core/mathml',
59   'third_party/WebKit/Source/core/notifications',
60   'third_party/WebKit/Source/core/page',
61   'third_party/WebKit/Source/core/page/animation',
62   'third_party/WebKit/Source/core/page/chromium',
63   'third_party/WebKit/Source/core/platform',
64   'third_party/WebKit/Source/core/platform/animation',
65   'third_party/WebKit/Source/core/platform/audio',
66   'third_party/WebKit/Source/core/platform/audio/chromium',
67   'third_party/WebKit/Source/core/platform/audio/mac',
68   'third_party/WebKit/Source/core/platform/chromium',
69   'third_party/WebKit/Source/core/platform/cocoa',
70   'third_party/WebKit/Source/core/platform/graphics',
71   'third_party/WebKit/Source/core/platform/graphics/cg',
72   'third_party/WebKit/Source/core/platform/graphics/chromium',
73   'third_party/WebKit/Source/core/platform/graphics/cocoa',
74   'third_party/WebKit/Source/core/platform/graphics/filters',
75   'third_party/WebKit/Source/core/platform/graphics/gpu',
76   'third_party/WebKit/Source/core/platform/graphics/mac',
77   'third_party/WebKit/Source/core/platform/graphics/opentype',
78   'third_party/WebKit/Source/core/platform/graphics/skia',
79   'third_party/WebKit/Source/core/platform/graphics/transforms',
80   'third_party/WebKit/Source/core/platform/image-decoders',
81   'third_party/WebKit/Source/core/platform/image-decoders/bmp',
82   'third_party/WebKit/Source/core/platform/image-decoders/gif',
83   'third_party/WebKit/Source/core/platform/image-decoders/ico',
84   'third_party/WebKit/Source/core/platform/image-decoders/jpeg',
85   'third_party/WebKit/Source/core/platform/image-decoders/png',
86   'third_party/WebKit/Source/core/platform/image-decoders/skia',
87   'third_party/WebKit/Source/core/platform/image-decoders/webp',
88   'third_party/WebKit/Source/core/platform/image-decoders/xbm',
89   'third_party/WebKit/Source/core/platform/image-encoders/skia',
90   'third_party/WebKit/Source/core/platform/mac',
91   'third_party/WebKit/Source/core/platform/mock',
92   'third_party/WebKit/Source/core/platform/network',
93   'third_party/WebKit/Source/core/platform/network/chromium',
94   'third_party/WebKit/Source/core/platform/sql',
95   'third_party/WebKit/Source/core/platform/text',
96   'third_party/WebKit/Source/core/platform/text/mac',
97   'third_party/WebKit/Source/core/platform/text/transcoder',
98   'third_party/WebKit/Source/core/plugins',
99   'third_party/WebKit/Source/core/plugins/chromium',
100   'third_party/WebKit/Source/core/rendering',
101   'third_party/WebKit/Source/core/rendering/style',
102   'third_party/WebKit/Source/core/rendering/svg',
103   'third_party/WebKit/Source/core/storage',
104   'third_party/WebKit/Source/core/storage/chromium',
105   'third_party/WebKit/Source/core/svg',
106   'third_party/WebKit/Source/core/svg/animation',
107   'third_party/WebKit/Source/core/svg/graphics',
108   'third_party/WebKit/Source/core/svg/graphics/filters',
109   'third_party/WebKit/Source/core/svg/properties',
110   'third_party/WebKit/Source/core/webaudio',
111   'third_party/WebKit/Source/core/websockets',
112   'third_party/WebKit/Source/core/workers',
113   'third_party/WebKit/Source/core/xml',
114   'third_party/WebKit/Source/public',
115   'third_party/WebKit/Source/web',
116   'third_party/cld',
117   'third_party/icu/public/common',
118   'third_party/icu/public/i18n',
119   'third_party/npapi',
120   'third_party/npapi/bindings',
121   'third_party/protobuf',
122   'third_party/protobuf/src',
123   'third_party/skia/gpu/include',
124   'third_party/skia/include/config',
125   'third_party/skia/include/core',
126   'third_party/skia/include/effects',
127   'third_party/skia/include/gpu',
128   'third_party/skia/include/pdf',
129   'third_party/skia/include/ports',
130   'v8/include',
131   'xcodebuild/Debug/include',
132   'xcodebuild/DerivedSources/Debug/chrome',
133   'xcodebuild/DerivedSources/Debug/policy',
134   'xcodebuild/DerivedSources/Debug/protoc_out',
135   'xcodebuild/DerivedSources/Debug/webkit',
136   'xcodebuild/DerivedSources/Debug/webkit/bindings',
137 ]
138
139
140 def Walk(seen, filename, parent, indent):
141   """Returns the size of |filename| plus the size of all files included by
142   |filename| and prints the include tree of |filename| to stdout. Every file
143   is visited at most once.
144   """
145   total_bytes = 0
146
147   # .proto(devel) filename translation
148   if filename.endswith('.pb.h'):
149     basename = filename[:-5]
150     if os.path.exists(basename + '.proto'):
151       filename = basename + '.proto'
152     else:
153       print 'could not find ', filename
154
155   # Show and count files only once.
156   if filename in seen:
157     return total_bytes
158   seen.add(filename)
159
160   # Display the paths.
161   print ' ' * indent + filename
162
163   # Skip system includes.
164   if filename[0] == '<':
165     return total_bytes
166
167   # Find file in all include paths.
168   resolved_filename = filename
169   for root in INCLUDE_PATHS + [os.path.dirname(parent)]:
170     if os.path.exists(os.path.join(root, filename)):
171       resolved_filename = os.path.join(root, filename)
172       break
173
174   # Recurse.
175   if os.path.exists(resolved_filename):
176     lines = open(resolved_filename).readlines()
177   else:
178     print ' ' * (indent + 2) + "-- not found"
179     lines = []
180   for line in lines:
181     line = line.strip()
182     if line.startswith('#include "'):
183       total_bytes += Walk(
184           seen, line.split('"')[1], resolved_filename, indent + 2)
185     elif line.startswith('#include '):
186       include = '<' + line.split('<')[1].split('>')[0] + '>'
187       total_bytes += Walk(
188           seen, include, resolved_filename, indent + 2)
189     elif line.startswith('import '):
190       total_bytes += Walk(
191           seen, line.split('"')[1], resolved_filename, indent + 2)
192   return total_bytes + len("".join(lines))
193
194
195 def main():
196   bytes = Walk(set(), sys.argv[1], '', 0)
197   print
198   print float(bytes) / (1 << 20), "megabytes of chrome source"
199
200
201 if __name__ == '__main__':
202   sys.exit(main())