1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-26 00:34:17 -07:00
emacs/mps/tool/monitor.py
Gareth Rees 5cc5bb5922 Don't store booleans as bit-fields in event structures: this makes it impossible to automatically unpack them using python's struct module. (the only event where this actually saved any space was poolinitmvff!)
Update event format to 2.0.0 since telemetry format changed.
New macro EVENT_ANY_FIELDS allows consumers to determine the layout of the event header.
mpseventpy now analyzes the event layout (including padding bytes) and emits struct format specifications.
New program tool/monitor.py reads and unpacks a stream of telemetry events.

Copied from Perforce
 Change: 194026
2018-06-20 15:51:38 +01:00

39 lines
1.1 KiB
Python

import argparse
import struct
import sys
import mpsevent
def run(file):
_read = file.read
_unpack = struct.unpack
_any_desc = mpsevent.EventAnyDesc
_any_size = mpsevent.EVENT_ANY_SIZE
_any_format = mpsevent.EVENT_ANY_FORMAT
_event = mpsevent.EVENT
while True:
header_data = _read(_any_size)
if not header_data:
break
header = _any_desc(*_unpack(_any_format, header_data))
event_desc = _event[header.code]
size = header.size - _any_size
assert size <= event_desc.maxsize
event_data = _read(size)
print(event_desc.name, event_desc.format, len(event_data))
event = _unpack(event_desc.format, event_data)
def main():
parser = argparse.ArgumentParser(description="Memory Pool System Monitor.")
parser.add_argument('telemetry', metavar='FILENAME', nargs='?',
type=argparse.FileType('rb'), default=sys.stdin,
help="telemetry output from the MPS instance")
args = parser.parse_args()
run(args.telemetry)
if __name__ == '__main__':
main()