Repository navigation
Fetch latest timeline events before exporting Performance data #10055
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
srawlins
merged 4 commits into
flutter:master
from
khanak0509:fix-9731-export-timeline-events
Nov 12, 2026
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
4202268
Fetch latest timeline events before exporting Performance data
khanak0509 1a20a74
Prevent overlapping VM timeline pulls from adding duplicate events
khanak0509 0c676aa
Add release notes
khanak0509 62ba485
Merge branch 'master' of https://github.com/flutter/devtools into fix…
khanak0509 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[MUST-FIX] Potential Race Condition / Duplicate Timeline Events
Calling
_pullPerfettoVmTimeline()concurrently can lead to a race condition where duplicate timeline events are fetched and added totraceRingBuffer.Why this happens:
In
_pullPerfettoVmTimeline(),_nextPollStartMicrosis read at the beginning of the method but is only updated at the very end (after several asynchronousawaitpoints likegetVMTimelineMicrosandgetPerfettoVMTimeline).If
pullLatestTimelineEvents()is called while a periodic poll (via_timelinePollingRateLimiter) or a manual refresh (viaforceRefresh()) is already in progress, both executions will use the same_nextPollStartMicrosvalue, resulting in overlapping time ranges and duplicate trace packets being appended totraceRingBuffer.Suggested Fix:
To prevent concurrent executions of
_pullPerfettoVmTimeline(), we should track the active pullFutureand return it if a pull is already in progress.Since
_pullPerfettoVmTimelineis outside the current diff hunk, you can declare aFuture<void>? _activePullfield inTimelineEventsControllerand update_pullPerfettoVmTimelineas follows:References
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks! fixed