[RFC] Systrace's custom events formatting
Created by: derkling
The Android run-time can inject interesting function profiling events from user-space which unfortunately are not formatted using the key=value
pairs required by TRAPpy.
The format string it uses is expected by other tools, e.g. systrace, thus changing the formatting at the source can be much more complex than dealing with in in TRAPpy. Since TRAPpy learnt to parse systrace events, we can try to improve its skills by properly parsing these custom events too.
The basic idea is to add a simple call-back based mechanism which allows a specific parser (i.e. SysTrace
) to reformat a data string into a TRAPpy compliant format before processing it the usual way.
This is an initial prototype which I share to get feedback on the overall approach before going further to develop more complex functionalities. Thus, I've not yet added a test for this feature, however a simple example trace can contain these events:
RenderThread-9568 ( 9546) [006] ...1 3210.844141: tracing_mark_write: B|9546|flush drawing commands
hwuiTask1-9571 ( 9546) [007] ...1 3210.844145: tracing_mark_write: E
hwuiTask1-9571 ( 9546) [007] ...1 3210.844151: tracing_mark_write: B|9546|tessellateAmbientShadow
hwuiTask1-9571 ( 9546) [007] ...1 3210.844159: tracing_mark_write: E
hwuiTask1-9571 ( 9546) [007] ...1 3210.844162: tracing_mark_write: B|9546|tessellateSpotShadow
hwuiTask1-9571 ( 9546) [007] ...1 3210.844182: tracing_mark_write: E
As additional goals, not yet provided by this prototype, it would be nice to:
- support the generation and registration on-the-fly of new dataframes from within the callback, which should allow to create separate dataframe for different classes of custom events
- make sure the systrace viewer and the TRAPpy generated dataframes are on the same timeline, which will require to play with basetime and windows... but, since this is a more complex task, I would keep this topic for a different PR.