xref: /llvm-project/clang/test/Driver/ftime-trace-sections.py (revision 72b73e23b6c36537db730ebea00f92798108a6e5)
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