fix(performance): enforce batched GadgetDataBuffer to prevent massive array spreads - #103
Open
Utkarshpandey0001 wants to merge 1 commit into
Open
Conversation
Utkarshpandey0001
force-pushed
the
fix-massive-data-spread
branch
2 times, most recently
from
April 17, 2026 13:40
b066f41 to
cdec7a8
Compare
… array spreads (Fixes inspektor-gadget#100)
Utkarshpandey0001
force-pushed
the
fix-massive-data-spread
branch
from
April 17, 2026 13:46
cdec7a8 to
fd80922
Compare
Contributor
Author
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The Inspektor Gadget plugin's data processing logic was previously suffering from severe CPU bottlenecks when monitoring high-frequency data streams (e.g.,
trace tcp). A legacy fallback logic path in src/gadgets/utility.tsx bypassed the newly introduced GadgetDataBuffer, falling back to updating the React component state individually for every single incoming WebSocket message.Because massive arrays (up to 20,000 items) were being spread into state directly on the main thread continuously, it caused severe UI freezing and browser crashes ("Page Unresponsive" warnings) when inspecting high-frequency cluster events.
This PR removes the legacy unbatched fallback code from processGadgetData, strictly enforcing that all data processing flows through GadgetDataBuffer. This ensures that all incoming high-frequency events are heavily aggregated and then flushed to the React state optimally across a 300ms interval, completely eliminating the main thread CPU lockups.
Fixes #100
How to use
Reviewers can validate this PR by doing the following:
trace tcportrace open.Testing done
All code formatting, linting, and TypeScript compilation CI workflows were successfully validated locally. Testing outputs are fully green.