Skip to content

⚗️ Add canvas change detection for Session Replay - #4949

Draft
BeltranBulbarellaDD wants to merge 5 commits into
beltran.bulbarella/canvas_support_1-initconfigfrom
beltran.bulbarella/canvas_support-2-prefilter
Draft

⚗️ Add canvas change detection for Session Replay#4949
BeltranBulbarellaDD wants to merge 5 commits into
beltran.bulbarella/canvas_support_1-initconfigfrom
beltran.bulbarella/canvas_support-2-prefilter

Conversation

@BeltranBulbarellaDD

@BeltranBulbarellaDD BeltranBulbarellaDD commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Motivation

Canvas image capture can be expensive, so Session Replay should only capture a canvas after its contents have changed. This stacked PR adds the dirty-state pre-filter foundation for canvas recording.

Depends on #4947.

Design references:

Changes

  • Add a WeakSet-backed canvas manager to track dirty canvases without retaining detached elements.
  • Instrument bitmap-mutating CanvasRenderingContext2D methods and canvas width/height changes.
  • Enable canvas mutation tracking only when canvas recording is enabled with a positive maximum frame rate.
  • Safely handle canvas APIs that are unavailable in older browser versions.
  • Add focused unit coverage for dirty-state management, canvas instrumentation, cleanup, and recorder activation.

This PR only adds change detection; capturing and marking canvases clean will be connected in a follow-up.

Test instructions

yarn test:unit --spec packages/browser-rum/src/domain/record/canvas/canvasManager.spec.ts --spec packages/browser-rum/src/domain/record/trackers/trackCanvas.spec.ts --spec packages/browser-rum/src/domain/record/record.spec.ts
yarn typecheck

Checklist

  • Tested locally
  • Tested on staging
  • Added unit tests for this change.
  • Added e2e/integration tests for this change.
  • Updated documentation and/or relevant AGENTS.md file

@cit-pr-commenter-54b7da

cit-pr-commenter-54b7da Bot commented Aug 14, 2026

Copy link
Copy Markdown

Bundles Sizes Evolution

📦 Bundle Name Base Size Local Size 𝚫 𝚫% Status
Rum N/A 181.25 KiB N/A N/A N/A
Rum Profiler N/A 8.43 KiB N/A N/A N/A
Rum Recorder N/A 22.25 KiB N/A N/A N/A
Logs N/A 57.50 KiB N/A N/A N/A
Rum Salesforce N/A 139.20 KiB N/A N/A N/A
Rum Slim N/A 139.19 KiB N/A N/A N/A
Worker N/A 22.96 KiB N/A N/A N/A
Rum Shopify N/A 202.13 KiB N/A N/A N/A
Rum-shopify Profiler N/A 8.43 KiB N/A N/A N/A
Rum-shopify Recorder N/A 3.72 KiB N/A N/A N/A

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Aug 14, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 87.50%
Overall Coverage: 77.21% (+0.03%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: ad260aa | Docs | Datadog PR Page | Give us feedback!

@BeltranBulbarellaDD BeltranBulbarellaDD changed the title Beltran.bulbarella/canvas support 2 prefilter ⚗️ Add canvas change detection for Session Replay Aug 14, 2026
@BeltranBulbarellaDD

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 685c28e8ed

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/browser-rum/src/domain/record/trackers/trackCanvas.ts Outdated
@BeltranBulbarellaDD
BeltranBulbarellaDD force-pushed the beltran.bulbarella/canvas_support-2-prefilter branch from 434f477 to ad260aa Compare August 14, 2026 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant