199f933b6SFangrui Song#!/usr/bin/env python 299f933b6SFangrui Song 399f933b6SFangrui Songimport json, sys, time 499f933b6SFangrui Song 5*dd3c26a0STobias Hieta 699f933b6SFangrui Songdef is_inside(range1, range2): 7*dd3c26a0STobias Hieta a = range1["ts"] 8*dd3c26a0STobias Hieta b = a + range1["dur"] 9*dd3c26a0STobias Hieta c = range2["ts"] 10*dd3c26a0STobias Hieta d = c + range2["dur"] 1199f933b6SFangrui Song return (a >= c and a <= d) and (b >= c and b <= d) 1299f933b6SFangrui Song 13*dd3c26a0STobias Hieta 1499f933b6SFangrui Songdef is_before(range1, range2): 15*dd3c26a0STobias Hieta b = range1["ts"] + range1["dur"] 16*dd3c26a0STobias Hieta c = range2["ts"] 1799f933b6SFangrui Song return b <= c 1899f933b6SFangrui Song 19*dd3c26a0STobias Hieta 2099f933b6SFangrui Songlog_contents = json.loads(sys.stdin.read()) 2199f933b6SFangrui Songevents = log_contents["traceEvents"] 2299f933b6SFangrui Songcodegens = [event for event in events if event["name"] == "CodeGen Function"] 2399f933b6SFangrui Songfrontends = [event for event in events if event["name"] == "Frontend"] 2499f933b6SFangrui Songbackends = [event for event in events if event["name"] == "Backend"] 2599f933b6SFangrui Song 2699f933b6SFangrui Songbeginning_of_time = log_contents["beginningOfTime"] / 1000000 2799f933b6SFangrui Songseconds_since_epoch = time.time() 2899f933b6SFangrui Song 2999f933b6SFangrui Song# Make sure that the 'beginningOfTime' is not later than now. 3099f933b6SFangrui Songif beginning_of_time > seconds_since_epoch: 31*dd3c26a0STobias Hieta sys.exit( 32*dd3c26a0STobias Hieta "'beginningOfTime' should represent the absolute time when the " 33*dd3c26a0STobias Hieta "process has started" 34*dd3c26a0STobias Hieta ) 3599f933b6SFangrui Song 36*dd3c26a0STobias Hietaif not all( 37*dd3c26a0STobias Hieta [ 38*dd3c26a0STobias Hieta any([is_inside(codegen, frontend) for frontend in frontends]) 39*dd3c26a0STobias Hieta for codegen in codegens 40*dd3c26a0STobias Hieta ] 41*dd3c26a0STobias Hieta): 4299f933b6SFangrui Song sys.exit("Not all CodeGen sections are inside any Frontend section!") 4399f933b6SFangrui Song 44*dd3c26a0STobias Hietaif not all( 45*dd3c26a0STobias Hieta [ 46*dd3c26a0STobias Hieta all([is_before(frontend, backend) for frontend in frontends]) 47*dd3c26a0STobias Hieta for backend in backends 48*dd3c26a0STobias Hieta ] 49*dd3c26a0STobias Hieta): 5099f933b6SFangrui Song sys.exit("Not all Frontend section are before all Backend sections!") 51