Skip to content

[backport core/1.40] fix: cache canvas cursor style to avoid redundant DOM writes#9604

Merged
christian-byrne merged 1 commit intocore/1.40from
backport-9171-to-core-1.40
Mar 8, 2026
Merged

[backport core/1.40] fix: cache canvas cursor style to avoid redundant DOM writes#9604
christian-byrne merged 1 commit intocore/1.40from
backport-9171-to-core-1.40

Conversation

@comfy-pr-bot
Copy link
Member

@comfy-pr-bot comfy-pr-bot commented Mar 8, 2026

Backport of #9171 to core/1.40

Automatically created by backport workflow.

┆Issue is synchronized with this Notion page by Unito

## Summary

Cache `canvas.style.cursor` to avoid redundant DOM writes that dirty
Firefox's style tree.

## Changes

- **What**: Add `_lastCursor` field to
`LGraphCanvas._updateCursorStyle()` — only writes `canvas.style.cursor`
when the value changes. Eliminates ~347 redundant style mutations per
profiling session.

## Review Focus

- The fix is 2 lines (cache field + comparison). The unit test validates
the caching pattern without requiring full LGraphCanvas instantiation.
- This is one of several contributors to Firefox's cascading style
recalculation freeze. Each `canvas.style.cursor` write dirties the style
tree, which is flushed during the next paint in the canvas render loop.

## Stack

2 of 4 in Firefox perf fix stack. Depends on #9170.

<!-- Fixes #ISSUE_NUMBER -->

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9171-fix-cache-canvas-cursor-style-to-avoid-redundant-DOM-writes-3116d73d36508139827fe1d644fa1bd0)
by [Unito](https://www.unito.io)
@comfy-pr-bot comfy-pr-bot requested a review from a team as a code owner March 8, 2026 02:33
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Mar 8, 2026
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Mar 8, 2026
@github-actions
Copy link

github-actions bot commented Mar 8, 2026

🎨 Storybook Build Status

Build failed!

⏰ Completed at: 03/08/2026, 02:34:46 AM UTC

🔗 Links


⚠️ Please check the workflow logs for error details.

@github-actions
Copy link

github-actions bot commented Mar 8, 2026

Playwright: 🕵🏻 0 passed, 0 failed

📊 Browser Reports
  • chromium: ❌ Deployment failed
  • chromium-2x: ❌ Deployment failed
  • chromium-0.5x: ❌ Deployment failed
  • mobile-chrome: ❌ Deployment failed

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 8, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b3b111b4-44d3-43b1-b5a1-1eef2563a114

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch backport-9171-to-core-1.40

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@christian-byrne christian-byrne merged commit 44d0159 into core/1.40 Mar 8, 2026
19 of 25 checks passed
@christian-byrne christian-byrne deleted the backport-9171-to-core-1.40 branch March 8, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport Backporting a PR onto a release candidate size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants