21 lines
645 B
Python
21 lines
645 B
Python
from typing import List
|
|
|
|
from eacgm.sampler import eBPFSamplerState
|
|
|
|
def to_perfetto(states:List[eBPFSamplerState]) -> List:
|
|
res = []
|
|
last_event = {}
|
|
for state in states:
|
|
if not isinstance(state, eBPFSamplerState):
|
|
continue
|
|
state = state.collect()
|
|
name = f"{state['name']}-{state['pid']}"
|
|
last_state = last_event.get(name, None)
|
|
if last_state is None:
|
|
last_event[name] = state
|
|
continue
|
|
if last_state["ph"] == "B" and state["ph"] == "E":
|
|
res.append(last_state)
|
|
res.append(state)
|
|
last_event[name] = state
|
|
return res |