Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /tools /include_tracer.py
blob: 06ac21601aaffdf7955ba330e3278f061d53ff65 [file] [log] [blame]
maruel@chromium.orgcb155a82011-11-29 17:25:34[diff] [blame]1#!/usr/bin/env python
Avi Drissmandfd880852022-09-15 20:11:09[diff] [blame]2# Copyright 2011 The Chromium Authors
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]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)
maruel@chromium.orgcb155a82011-11-29 17:25:34[diff] [blame]6
7"""Prints out include dependencies in chrome.
8
9Since it ignores defines, it gives just a rough estimation of file size.
10
11Usage:
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]12 tools/include_tracer.py -Iout/Default/gen chrome/browser/ui/browser.h
maruel@chromium.orgcb155a82011-11-29 17:25:34[diff] [blame]13"""
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]14
Raul Tambref3d9412e2019-09-24 05:31:44[diff] [blame]15from __future__import print_function
16
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]17import argparse
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]18import os
Kent Tamura654d87ef2018-06-05 05:31:54[diff] [blame]19import re
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]20import sys
21
22# Created by copying the command line for prerender_browsertest.cc, replacing
23# spaces with newlines, and dropping everything except -F and -I switches.
24# TODO(port): Add windows, linux directories.
25INCLUDE_PATHS=[
26'',
27'gpu',
28'skia/config',
29'skia/ext',
30'testing/gmock/include',
31'testing/gtest/include',
tfarina@chromium.orga023dca2013-12-18 03:58:36[diff] [blame]32'third_party/google_toolbox_for_mac/src',
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]33'third_party/icu/public/common',
34'third_party/icu/public/i18n',
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]35'third_party/protobuf',
36'third_party/protobuf/src',
37'third_party/skia/gpu/include',
38'third_party/skia/include/config',
39'third_party/skia/include/core',
40'third_party/skia/include/effects',
41'third_party/skia/include/gpu',
42'third_party/skia/include/pdf',
43'third_party/skia/include/ports',
44'v8/include',
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]45]
46
47
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]48defWalk(include_dirs, seen, filename, parent, indent):
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]49"""Returns the size of |filename| plus the size of all files included by
50 |filename| and prints the include tree of |filename| to stdout. Every file
51 is visited at most once.
52 """
53 total_bytes=0
54
55# .proto(devel) filename translation
56if filename.endswith('.pb.h'):
57 basename= filename[:-5]
58if os.path.exists(basename+'.proto'):
59 filename= basename+'.proto'
60else:
Raul Tambref3d9412e2019-09-24 05:31:44[diff] [blame]61print('could not find ', filename)
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]62
63# Show and count files only once.
64if filenamein seen:
65return total_bytes
66 seen.add(filename)
67
68# Display the paths.
Raul Tambref3d9412e2019-09-24 05:31:44[diff] [blame]69print(' '* indent+ filename)
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]70
71# Skip system includes.
72if filename[0]=='<':
73return total_bytes
74
75# Find file in all include paths.
76 resolved_filename= filename
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]77for rootin INCLUDE_PATHS+[os.path.dirname(parent)]+ include_dirs:
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]78if os.path.exists(os.path.join(root, filename)):
79 resolved_filename= os.path.join(root, filename)
80break
81
82# Recurse.
83if os.path.exists(resolved_filename):
84 lines= open(resolved_filename).readlines()
85else:
Raul Tambref3d9412e2019-09-24 05:31:44[diff] [blame]86print(' '*(indent+2)+"-- not found")
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]87 lines=[]
88for linein lines:
89 line= line.strip()
Kent Tamura654d87ef2018-06-05 05:31:54[diff] [blame]90 match= re.match(r'#include\s+(\S+).*', line)
91if match:
92 include= match.group(1)
93if include.startswith('"'):
94 include= include[1:-1]
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]95 total_bytes+=Walk(
96 include_dirs, seen, include, resolved_filename, indent+2)
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]97elif line.startswith('import '):
98 total_bytes+=Walk(
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]99 include_dirs, seen, line.split('"')[1], resolved_filename, indent+2)
thakis@chromium.org833b584ce2011-04-18 22:04:09[diff] [blame]100return total_bytes+ len("".join(lines))
101
102
maruel@chromium.orgcb155a82011-11-29 17:25:34[diff] [blame]103def main():
Kent Tamuraa28b0bb2018-06-05 05:59:46[diff] [blame]104 parser= argparse.ArgumentParser()
105 parser.add_argument('-I', action='append', dest='include_dirs')
106 parser.add_argument('source_file')
107 options= parser.parse_args(sys.argv[1:])
108ifnot options.include_dirs:
109 options.include_dirs=[]
110
111 bytes=Walk(options.include_dirs, set(), options.source_file,'',0)
Raul Tambref3d9412e2019-09-24 05:31:44[diff] [blame]112print()
113print(float(bytes)/(1<<20),"megabytes of chrome source")
maruel@chromium.orgcb155a82011-11-29 17:25:34[diff] [blame]114
115
116if __name__=='__main__':
117 sys.exit(main())

[8]ページ先頭

©2009-2025 Movatter.jp