feat: Tile compression - backtracking layers level#137
Merged
abelonogov-ld merged 30 commits intomainfrom Feb 18, 2026
Merged
Conversation
…ssion * andrey/send-changed-rectangles: sending just rect (+3 squashed commits) Squashed commits: [1a92964] deduplicate images before buffer [80ed3b3] starting tile signature fix concurrency issues remove after buffer image comparisons (+4 squashed commits) Squashed commits: [397779f] ImageSignature [1a92964] deduplicate images before buffer [80ed3b3] starting tile signature # Conflicts: # Sources/LaunchDarklySessionReplay/ScreenCapture/ScreenCaptureService.swift # Sources/LaunchDarklySessionReplay/ScreenCapture/TiledSignatureManager.swift
Sources/LaunchDarklySessionReplay/ScreenCapture/TileDiffManager.swift
Outdated
Show resolved
Hide resolved
Sources/LaunchDarklySessionReplay/Exporter/RRWebEventGenerator.swift
Outdated
Show resolved
Hide resolved
Sources/LaunchDarklySessionReplay/Exporter/RRWebEventGenerator.swift
Outdated
Show resolved
Hide resolved
Sources/LaunchDarklySessionReplay/Exporter/RRWebEventGenerator.swift
Outdated
Show resolved
Hide resolved
mario-launchdarkly
approved these changes
Feb 17, 2026
Vadman97
pushed a commit
that referenced
this pull request
Feb 18, 2026
🤖 I have created a release *beep* *boop* --- ## [0.19.0](0.18.2...0.19.0) (2026-02-18) ### Features * Tile compression - backtracking layers level ([#137](#137)) ([56d86da](56d86da)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Release bookkeeping only (version/changelog updates) with no functional code changes in this diff. > > **Overview** > Publishes **v0.19.0** by bumping the version in release metadata (manifest, podspecs) and updating `sdkVersion`. > > Updates `CHANGELOG.md` with the 0.19.0 release notes, including the *Tile compression - backtracking layers level* feature. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9febef4. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
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.
Implemented tile compression, which divides the screen into multiple tiles and changes from the previous screen being detected. If possible, only a portion of the screen is sent; otherwise, the entire screen is sent. If it’s possible to restore the previous state by removing a layer, the layer is removed.
Added an option
compression: overlayTiles(layers = 10). Thelayersparameter specifies the number of layers that can be stacked on top of each other.Note
Medium Risk
Changes the core capture/compression and RRWeb event-generation paths; bugs could lead to missing/incorrect frames or increased payloads, but the change is scoped to session replay data generation (not auth/security).
Overview
Introduces a configurable session replay compression mode (
SessionReplayOptions.compression) with anoverlayTiles(layers:)strategy that periodically emits keyframes and otherwise sends only the changed screen region.Refactors capture/export to produce
ExportFrame(one or more image tiles + rects, keyframe flag, and optionalImageSignature) via a newCaptureManager+TileDiffManager, and updates the RRWeb pipeline to apply incremental updates using a new.mutationIncrementalSource(MutationDataadd/remove nodes with backtracking) instead of always redrawing a single full-screen canvas.Updates supporting RRWeb encodings (
WindowDatasizing, canvas commands to accept rects), renamesSessionReplayEventGeneratortoRRWebEventGenerator, and adjusts tests and the test app for the new capture API.Written by Cursor Bugbot for commit 135e672. This will update automatically on new commits. Configure here.