feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(replay): Add ReplayCanvas integration - #9826

Closed
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration
Closed

feat(replay): Add ReplayCanvas integration#9826
mydea wants to merge 4 commits into
developfrom
fn/replay-canvas-integration

Conversation

@mydea

Copy link
Copy Markdown
Member

Adding this integration in addition to Replay will set up canvas recording.

This is a bit hacky because interacting between multiple integrations is not really great/easy. But I think it is the best user experience we can provide there, AND it also provides a direct way to use this with CDN bundles as well - users just have to add the replaycanvas integration bundle in addition to the regular browser+replay bundle and it should just work.

@mydeamydea self-assigned this Dec 14, 2023
@github-actions

github-actionsBot commented Dec 14, 2023

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)79.22 KB (+3.77% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)70.58 KB (+4.21% 🔺)
@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)64.19 KB (+4.65% 🔺)
@sentry/browser (incl. Tracing) - Webpack (gzipped)32.37 KB (0%)
@sentry/browser (incl. Feedback) - Webpack (gzipped)30.71 KB (0%)
@sentry/browser - Webpack (gzipped)22.45 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback) - ES6 CDN Bundle (gzipped)76.85 KB (+4.11% 🔺)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (gzipped)68.47 KB (+4.62% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (gzipped)31.63 KB (0%)
@sentry/browser - ES6 CDN Bundle (gzipped)23.58 KB (0%)
@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)215.88 KB (+5.21% 🔺)
@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)95.1 KB (0%)
@sentry/browser - ES6 CDN Bundle (minified & uncompressed)69.97 KB (0%)
@sentry/browser (incl. Tracing) - ES5 CDN Bundle (gzipped)34.56 KB (0%)
@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)71.06 KB (+4.32% 🔺)
@sentry/react - Webpack (gzipped)22.5 KB (0%)
@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)87.7 KB (+3.37% 🔺)
@sentry/nextjs Client - Webpack (gzipped)49.45 KB (0%)
@sentry-internal/feedback - Webpack (gzipped)16.73 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)70.58 KB (added)

@mydea

Copy link
Copy Markdown
MemberAuthor

Hmm, turns it this seems to not be tree shakeable automatically 😬 maybe this is related to getsentry/rrweb#141, though, I wonder 🤔

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's the reason for solving this via an integration? Bundle size? Right now it only sets options, right?


const mergedExperimentsOptions = {
...this._initialOptions._experiments,
...additionalOptions._experiments,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we excluding _experiments from being mangled? I guess we do but this broke CDN bundles before so we should double check 😅

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh wait, this is just a property this should be safe, no?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

yeah, this is excluded from being mangled! as we rely on this for some things 😅

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh it's for this, right? Only if the integration is used, the canvas manager will be added to the bundle

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, exactly - basically wrapping this, but providing a nicer way to add this than to ask people to pass some method into the replay config etc.

Also, it helps with CDN bundles, where this otherwise also very hard/impossible to solve 😬

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

should not be the case, but something is not quite right yet here 😅 so still need to look into it a bit more!

@billyvgbillyvg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems great to me from a DX standpoint!

@@ -0,0 +1,52 @@
import { getCanvasManager } from '@sentry-internal/rrweb';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Will we have any issues creating this bundle because rrweb is devDep?

Comment on lines +26 to +27
this._canvasOptions = {
fps: 4,
quality: 0.6,
...options,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In the future we'll want to control this a bit more (e.g. preconfigure quality settings like low, med, high).

@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch 3 times, most recently from 3230bc7 to fa6d477CompareDecember 19, 2023 09:19
mydea added a commit that referenced this pull request Dec 19, 2023
We've been using esbuild (default, from`@size-limit/preset-small-lib`)
for most jobs, but webpack for the one with custom config, which is a
bit inconsistent.
This now updates this to always use webpack, which should be more
consistent...
If we eventually get rid of the custom webpack config (e.g. when we
merge this or something like it:
#9826), we can revert
this back to use esbuild everywhere.
@mydea
mydeaforce-pushed the fn/replay-canvas-integration branch from fa6d477 to 0940301CompareJanuary 4, 2024 16:32
billyvg
billyvg previously requested changes Jan 4, 2024
Comment threadpackages/replay/src/canvas.ts Outdated
Comment on lines +26 to +27
// TODO FN: Allow to configure this
// But since we haven't finalized how to configure this, this is predefined for now
// to avoid breaking changes
this._canvasOptions = {
fps: 4,
quality: 0.6,
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm going to update this and move the following over to this integration: https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay/src/replay.ts#L348

@billyvg
billyvg dismissed their stale reviewJanuary 4, 2024 19:37

fixed changes

@mydea

mydea commented Jan 5, 2024

Copy link
Copy Markdown
MemberAuthor

hmm, still seems to not tree shake :(

mydeaand others added 3 commits January 5, 2024 11:06
Adding this integration in addition to `Replay` will set up canvas recording.
@billyvg
billyvgforce-pushed the fn/replay-canvas-integration branch from 66bc1a3 to 1044586CompareJanuary 5, 2024 16:07
@billyvgbillyvg assigned billyvg and unassigned mydeaJan 5, 2024
@mydea

mydea commented Jan 9, 2024

Copy link
Copy Markdown
MemberAuthor

Closing in favor of #10112

@mydeamydea closed this Jan 9, 2024
mydea added a commit that referenced this pull request Jan 10, 2024
This bump contains the following changes:
- fix(rrweb): Use unpatched requestAnimationFrame when possible
[#150](getsentry/rrweb#150)
- ref: Avoid async in canvas
[#143](getsentry/rrweb#143)
- feat: Bundle canvas worker manually
[#144](getsentry/rrweb#144)
- build: Build for ES2020
[#142](getsentry/rrweb#142)
Extracted out from
#9826Closes#6946
@billyvg
billyvg deleted the fn/replay-canvas-integration branch October 22, 2024 15:26
Sign up for freeto 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.

4 participants

@mydea@billyvg@Lms24@c298lee