Mercurial > hg
annotate contrib/catapipe.py @ 40073:e92454e69dc3
narrow: introduce a config option to check if narrow is enabled or not
This patch introduces a new config option experimental.narrow which is set to
False by default and set to True by the narrow extension.
While moving narrow related logic into core, we need to know at places whether
narrow extension is enabled or not. Checking the list of extension enabled is
one solution but once narrow is inbuilt, we will definitely want a config option
to check whether narrow is turned on or not.
So this patch introduces a config option, which will evolve to the main point to
turn narrow capability on and off once all the narrow is in core.
Differential Revision: https://phab.mercurial-scm.org/D4889
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Fri, 05 Oct 2018 22:19:19 +0300 |
parents | cb9b23ec093c |
children | c311424ea579 |
rev | line source |
---|---|
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 # |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 # Copyright 2018 Google LLC. |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 # |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 """Tool read primitive events from a pipe to produce a catapult trace. |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 For now the event stream supports |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 START $SESSIONID ... |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 and |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 END $SESSIONID ... |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 events. Everything after the SESSIONID (which must not contain spaces) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 is used as a label for the event. Events are timestamped as of when |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 they arrive in this process and are then used to produce catapult |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 traces that can be loaded in Chrome's about:tracing utility. It's |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 important that the event stream *into* this process stay simple, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 because we have to emit it from the shell scripts produced by |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 run-tests.py. |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
25 Typically you'll want to place the path to the named pipe in the |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
26 HGCATAPULTSERVERPIPE environment variable, which both run-tests and hg |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
27 understand. |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
28 """ |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
29 from __future__ import absolute_import, print_function |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
30 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
31 import argparse |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 import json |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
33 import os |
39514
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
34 import timeit |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 _TYPEMAP = { |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 'START': 'B', |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
38 'END': 'E', |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 } |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
40 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 _threadmap = {} |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 |
39514
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
43 # Timeit already contains the whole logic about which timer to use based on |
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
44 # Python version and OS |
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
45 timer = timeit.default_timer |
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
46 |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 def main(): |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
48 parser = argparse.ArgumentParser() |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
49 parser.add_argument('pipe', type=str, nargs=1, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
50 help='Path of named pipe to create and listen on.') |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
51 parser.add_argument('output', default='trace.json', type=str, nargs='?', |
39513
e9706686451b
contrib: fix catapipe output argument documentation
Boris Feld <boris.feld@octobus.net>
parents:
39252
diff
changeset
|
52 help='Path of json file to create where the traces ' |
e9706686451b
contrib: fix catapipe output argument documentation
Boris Feld <boris.feld@octobus.net>
parents:
39252
diff
changeset
|
53 'will be stored.') |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
54 parser.add_argument('--debug', default=False, action='store_true', |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
55 help='Print useful debug messages') |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
56 args = parser.parse_args() |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
57 fn = args.pipe[0] |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
58 os.mkfifo(fn) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
59 try: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
60 with open(fn) as f, open(args.output, 'w') as out: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
61 out.write('[\n') |
39514
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
62 start = timer() |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
63 while True: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
64 ev = f.readline().strip() |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
65 if not ev: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
66 continue |
39514
b29ec19748a7
contrib: use a monotonic timer in catapipe
Boris Feld <boris.feld@octobus.net>
parents:
39513
diff
changeset
|
67 now = timer() |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
68 if args.debug: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
69 print(ev) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
70 verb, session, label = ev.split(' ', 2) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
71 if session not in _threadmap: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
72 _threadmap[session] = len(_threadmap) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
73 pid = _threadmap[session] |
39935
cb9b23ec093c
catapipe: fix bug introduced when switching to the timer api
Augie Fackler <augie@google.com>
parents:
39514
diff
changeset
|
74 ts_micros = (now - start) * 1000000 |
39252
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
75 out.write(json.dumps( |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
76 { |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
77 "name": label, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 "cat": "misc", |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 "ph": _TYPEMAP[verb], |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
80 "ts": ts_micros, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 "pid": pid, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
82 "tid": 1, |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
83 "args": {} |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
84 })) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 out.write(',\n') |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
86 finally: |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
87 os.unlink(fn) |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
88 |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
89 if __name__ == '__main__': |
9a81f126f9fa
contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 main() |