blob: 3cc8e75f4c088bcb7c1783f7e7c187cc989da59c [file] [log] [blame]
# This script parses the logcat lines produced by the Tuning Fork DebugBackend
# which are base64 encoded serializations of TuningForkLogEvent protos.
# Usage:
# adb logcat -d | python parselogcat.py
import sys
import re
# To generate python files from the proto files:
# export TF_PROTO_DIR=../../src/tuningfork/proto/
# protoc --python_out=. -I$TF_PROTO_DIR $TF_PROTO_DIR/tuningfork.proto
# protoc --python_out=. -I$TF_PROTO_DIR $TF_PROTO_DIR/tuningfork_clearcut_log.proto
# export TF_DEV_PROTO_DIR=<somewhere>
# protoc --python_out=. -I$TF_DEV_PROTO_DIR $TF_DEV_PROTO_DIR/dev_tuningfork.proto
# 'pip install protobuf' if you get a 'No module named protobuf' error
import tuningfork_clearcut_log_pb2 as tcl
import dev_tuningfork_pb2 as tf
# Example logcat line:
#11-30 15:32:22.892 13781 16553 I TuningFork.Clearcut: (TCL1/1)GgAqHAgAEgAaFgAAAAAAAAAAAAAAAAAAAAAAAAAAAEg=
tflogcat_regex = r"(\S+ \S+).*TuningFork.*\(TCL(.+)/(.+)\)(.*)"
def flatten(s):
return ', '.join(s.strip().split('\n'))
def prettyPrint(tclevent):
fp =tf.FidelityParams()
fp.ParseFromString(tclevent.fidelityparams)
print "fidelityparams: ", flatten(str(fp))
for h in tclevent.histograms:
print "histograms {"
print " instrument_id: ", h.instrument_id
a = tf.Annotation()
a.ParseFromString(h.annotation)
print " annotation: ", flatten(str(a))
for c in h.counts:
print " counts: ", c
print "}"
ser = ""
def getTCLEvent(i, n, ser_in):
global ser
if i==1:
ser = ""
ser += ser_in
if i<>n:
return
l = tcl.TuningForkLogEvent()
l.ParseFromString(ser.decode("base64"))
return l
def readStdin():
for logcat_lines in sys.stdin.readlines():
m = re.match(tflogcat_regex, logcat_lines)
if m:
subparts = m.groups()
tstamp = subparts[0]
tclevent = getTCLEvent(int(subparts[1]),int(subparts[2]),subparts[3])
if tclevent:
prettyPrint(tclevent)
def main():
readStdin()
if __name__ == "__main__":
main()