Support a ring buffer or a queue to store window manager traces
Currently the WM uses a BlockingQueue with limited capacity to store
the traces and a separate thread to continuously write the buffer
elements to disk. This implementation allows the WM trace to use its
current logging behavior or to use a ring buffer instead.
The ring buffer:
- Stores the most recent traces and discard the oldest ones when it
reaches maximum capacity.
- Write to disk only when the trace logging is stopped or during a
bugreport, instead of having a thread to continuously write to disk.
The ring buffer can be selected (or disabled) using the command:
- adb shell cmd window tracing continuous (true/false)
Any value other than "true" (case insensitive) is considered false
After selecting ring buffer, start and stop WM trace
monitoring with 'adb shell cmd window tracing (start/stop)'
Current capacity is fixed to 512KB. Future implementations will make
this value configurable.
Test: Flash a device. Enable continuous mode and window manager
tracing. Use the device. Stop the trace and pull the logged trace.
Open the trace in Winscope and check if the last X KB of data are
there. Unit tests: atest WmTests:WindowTraceBufferTest
Change-Id: Id4108b0231ab7af504240ea35c8a030fecf8b8a9
7 files changed