commit | e61fdc062aa0af94d045ce7d7372cf5195ee92ea | [log] [tgz] |
---|---|---|
author | Primiano Tucci <primiano@google.com> | Wed Aug 09 19:53:09 2023 +0100 |
committer | Primiano Tucci <primiano@google.com> | Wed Aug 09 19:53:09 2023 +0100 |
tree | 7a89ed29b00a70e5db9b0e656e95e6109cae91db | |
parent | fc215b9b6a0df329b099f37d6d40ab07d5ab8542 [diff] |
probes: fix premature flush ack if a data source acks synchronously While iterating on the num_data_sources we populate the pending_flushes_ map. The intended use of that map is: - Every time a data source acks the flush, we clear the correponding entry in the map. - Once the map is empty, we know all data sources have acked, and we can give the cumulative Flush response to traced. - HOWEVER: if a data source invokes the flush_callback directly in the it->second->Flush(...) call we end up nesting a call to OnDataSourceFlushComplete while still in the first iteration of the Flush loop. - The final effect is that while we are in the first iteration of the Flush loop, we temporarily empty the map and send a confirmation straight-away to traced (which then will snapshot the trace ahead of time) while we are still flushing. Bug: 295189870 Bug: 290213426 Test: unfortunately this bug is so subtle and required the alignment on so many unfavorable conditions that I struggle to write a meaningful test for it. PerfettoFtraceIntegrationTest.TestFtraceFlush was intending to unveil this sort of bug, but didn't have all the triggering conditions. Change-Id: I84a3f1a89b0c7dddffaef6cccca8f21febf5519a
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.