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

Side by Side Diff: third_party/WebKit/Source/build/scripts/make_instrumenting_probes.py

Issue 2793423002: [instrumentation] Move "include" section from PIDL to JSON5 config (Closed)
Patch Set: Created 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/build/scripts/templates/InstrumentingProbesInl.h.tmpl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2017 The Chromium Authors. All rights reserved. 1 # Copyright 2017 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import ast 5 import ast
6 import optparse 6 import optparse
7 import os.path 7 import os.path
8 import re 8 import re
9 import sys 9 import sys
10 10
(...skipping 30 matching lines...) Expand all
41 41
42 def to_singular(text): 42 def to_singular(text):
43 return text[:-1] if text[-1] == "s" else text 43 return text[:-1] if text[-1] == "s" else text
44 44
45 45
46 def to_lower_case(name): 46 def to_lower_case(name):
47 return name[:1].lower() + name[1:] 47 return name[:1].lower() + name[1:]
48 48
49 49
50 def agent_config(agent_name, field): 50 def agent_config(agent_name, field):
51 observers = config["observers"] 51 return config["observers"].get(agent_name, {}).get(field)
52 if agent_name not in observers:
53 return None
54 return observers[agent_name][field] if field in observers[agent_name] else N one
55 52
56 53
57 def agent_name_to_class(agent_name): 54 def agent_name_to_class(agent_name):
58 return agent_config(agent_name, "class") or "Inspector%sAgent" % agent_name 55 return agent_config(agent_name, "class") or "Inspector%sAgent" % agent_name
59 56
60 57
61 def agent_name_to_include(agent_name): 58 def agent_name_to_include(agent_name):
62 include_path = agent_config(agent_name, "include") or config["settings"]["de fault_include"] 59 include_path = agent_config(agent_name, "include_path") or config["settings" ]["include_path"]
63 return os.path.join(include_path, agent_name_to_class(agent_name) + ".h") 60 return os.path.join(include_path, agent_name_to_class(agent_name) + ".h")
64 61
65 62
66 def initialize_jinja_env(cache_dir): 63 def initialize_jinja_env(cache_dir):
67 jinja_env = jinja2.Environment( 64 jinja_env = jinja2.Environment(
68 loader=jinja2.FileSystemLoader(os.path.join(module_path, "templates")), 65 loader=jinja2.FileSystemLoader(os.path.join(module_path, "templates")),
69 # Bytecode cache is not concurrency-safe unless pre-cached: 66 # Bytecode cache is not concurrency-safe unless pre-cached:
70 # if pre-cached this is read-only, but writing creates a race condition. 67 # if pre-cached this is read-only, but writing creates a race condition.
71 bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir), 68 bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
72 keep_trailing_newline=True, # newline-terminate generated files 69 keep_trailing_newline=True, # newline-terminate generated files
(...skipping 23 matching lines...) Expand all
96 model = [] 93 model = []
97 while len(source): 94 while len(source):
98 match, source = match_and_consume(r"interface\s(\w*)\s?\{([^\{]*)\}", so urce) 95 match, source = match_and_consume(r"interface\s(\w*)\s?\{([^\{]*)\}", so urce)
99 if not match: 96 if not match:
100 sys.stderr.write("Cannot parse %s\n" % source[:100]) 97 sys.stderr.write("Cannot parse %s\n" % source[:100])
101 sys.exit(1) 98 sys.exit(1)
102 model.append(File(match.group(1), match.group(2))) 99 model.append(File(match.group(1), match.group(2)))
103 return model 100 return model
104 101
105 102
106 def include_probes_header():
107 return "#include \"%s\"" % config["settings"]["probes_header"]
108
109
110 class File(object): 103 class File(object):
111 def __init__(self, name, source): 104 def __init__(self, name, source):
112 self.name = name 105 self.name = name
113 self.header_name = self.name + "Inl" 106 self.header_name = self.name + "Inl"
114 self.includes = [include_probes_header()]
115 self.forward_declarations = [] 107 self.forward_declarations = []
116 self.declarations = [] 108 self.declarations = []
117 for line in map(str.strip, source.split("\n")): 109 for line in map(str.strip, source.split("\n")):
118 line = re.sub(r"\s{2,}", " ", line).strip() # Collapse whitespace 110 line = re.sub(r"\s{2,}", " ", line).strip() # Collapse whitespace
119 if len(line) == 0: 111 if len(line) == 0:
120 continue 112 continue
121 elif line.startswith("#include"):
122 self.includes.append(line)
123 elif line.startswith("class ") or line.startswith("struct "): 113 elif line.startswith("class ") or line.startswith("struct "):
124 self.forward_declarations.append(line) 114 self.forward_declarations.append(line)
125 else: 115 else:
126 self.declarations.append(Method(line)) 116 self.declarations.append(Method(line))
127 self.includes.sort()
128 self.forward_declarations.sort() 117 self.forward_declarations.sort()
129 118
130 119
131 class Method(object): 120 class Method(object):
132 def __init__(self, source): 121 def __init__(self, source):
133 match = re.match(r"(?:(\w+\*?)\s+)?(\w+)\s*\((.*)\)\s*;", source) 122 match = re.match(r"(?:(\w+\*?)\s+)?(\w+)\s*\((.*)\)\s*;", source)
134 if not match: 123 if not match:
135 sys.stderr.write("Cannot parse %s\n" % source) 124 sys.stderr.write("Cannot parse %s\n" % source)
136 sys.exit(1) 125 sys.exit(1)
137 126
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 all_observers = set() 193 all_observers = set()
205 observers_by_probe = {} 194 observers_by_probe = {}
206 unused_probes = set(all_pidl_probes) 195 unused_probes = set(all_pidl_probes)
207 for observer_name in config["observers"]: 196 for observer_name in config["observers"]:
208 all_observers.add(observer_name) 197 all_observers.add(observer_name)
209 observer = config["observers"][observer_name] 198 observer = config["observers"][observer_name]
210 for probe in observer["probes"]: 199 for probe in observer["probes"]:
211 unused_probes.discard(probe) 200 unused_probes.discard(probe)
212 if probe not in all_pidl_probes: 201 if probe not in all_pidl_probes:
213 raise Exception('Probe %s is not declared in PIDL file' % probe) 202 raise Exception('Probe %s is not declared in PIDL file' % probe)
214 if probe not in observers_by_probe: 203 observers_by_probe.setdefault(probe, set()).add(observer_name)
215 observers_by_probe[probe] = set()
216 observers_by_probe[probe].add(observer_name)
217 if unused_probes: 204 if unused_probes:
218 raise Exception("Unused probes: %s" % unused_probes) 205 raise Exception("Unused probes: %s" % unused_probes)
219 206
220 for f in files: 207 for f in files:
221 for probe in f.declarations: 208 for probe in f.declarations:
222 probe.agents = observers_by_probe[probe.name] 209 probe.agents = observers_by_probe[probe.name]
223 return all_observers 210 return all_observers
224 211
225 212
226 cmdline_parser = optparse.OptionParser() 213 cmdline_parser = optparse.OptionParser()
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 sink_h_file = open(output_dirpath + "/" + to_singular(base_name) + "Sink.h", "w" ) 257 sink_h_file = open(output_dirpath + "/" + to_singular(base_name) + "Sink.h", "w" )
271 sink_h_file.write(sink_h_template.render(template_context)) 258 sink_h_file.write(sink_h_template.render(template_context))
272 sink_h_file.close() 259 sink_h_file.close()
273 260
274 for f in files: 261 for f in files:
275 template_context["file"] = f 262 template_context["file"] = f
276 h_template = jinja_env.get_template("/InstrumentingProbesInl.h.tmpl") 263 h_template = jinja_env.get_template("/InstrumentingProbesInl.h.tmpl")
277 h_file = open(output_dirpath + "/" + f.header_name + ".h", "w") 264 h_file = open(output_dirpath + "/" + f.header_name + ".h", "w")
278 h_file.write(h_template.render(template_context)) 265 h_file.write(h_template.render(template_context))
279 h_file.close() 266 h_file.close()
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/build/scripts/templates/InstrumentingProbesInl.h.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698