Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Conversation

@harryterkelsen
Copy link
Contributor

@harryterkelsen harryterkelsen commented Oct 1, 2024

This enhances the overlay optimization by delaying combining pictures to get tighter bounds for the pictures that make up the scene, enabling more sophisticated optimization since we can determine if they intersect with platform views on a per-picture basis.

Fixes flutter/flutter#149863
Fixes flutter/flutter#155833

On a Macbook in Chrome in an example app with an infinite scrolling grid of platform views, this brings the ratio of dropped frames from 93% to 55% (roughly 4 fps to 30 fps).

This is a reland of #54878 with a fix for scenes with pictures and shader masks that are eventually entirely clipped out. It also fixes a performance issue caused by making too many Canvases just to record the size of the picture elements in the scene.

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide and the C++, Objective-C, Java style guides.
  • I listed at least one issue that this PR fixes in the description above.
  • I added new tests to check the change I am making or feature I am adding, or the PR is test-exempt. See testing the engine for instructions on writing and running engine tests.
  • I updated/added relevant documentation (doc comments with ///).
  • I signed the CLA.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@github-actions github-actions bot added the platform-web Code specifically for the web engine label Oct 1, 2024
@harryterkelsen harryterkelsen requested a review from yjbanov October 1, 2024 22:53
List<CkManagedSkImageFilterConvertible> imageFilterStack =
<CkManagedSkImageFilterConvertible>[];

late CkPictureRecorder measuringRecorder;
Copy link
Contributor

Choose a reason for hiding this comment

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

Does it need to be late if it's initialized immediately in the constructor?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes for measuringRecorder but measuringCanvas still needs to be late because I can't use a initializer in the constructor to set it because you can't reference instance fields in the initializers.

/// A compositor for embedded HTML views.
final HtmlViewEmbedder viewEmbedder;

void dispose() {
Copy link
Contributor

Choose a reason for hiding this comment

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

Once disposed of, it looks like MeasureVisitor is no longer usable. Should we have a _isDisposed flag that we can assert on inside the methods? Otherwise, we'd be attempting to use a dangling pointer.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That might be a little overkill since MeasureVisitor is only used one place, then immediately disposed and goes out of scope.

Copy link
Contributor Author

@harryterkelsen harryterkelsen left a comment

Choose a reason for hiding this comment

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

Thanks!

/// A compositor for embedded HTML views.
final HtmlViewEmbedder viewEmbedder;

void dispose() {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

That might be a little overkill since MeasureVisitor is only used one place, then immediately disposed and goes out of scope.

List<CkManagedSkImageFilterConvertible> imageFilterStack =
<CkManagedSkImageFilterConvertible>[];

late CkPictureRecorder measuringRecorder;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes for measuringRecorder but measuringCanvas still needs to be late because I can't use a initializer in the constructor to set it because you can't reference instance fields in the initializers.

@harryterkelsen harryterkelsen added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 2, 2024
@auto-submit auto-submit bot merged commit 804f434 into main Oct 2, 2024
@auto-submit auto-submit bot deleted the revert-55501-revert-55464-revert-55456-revert_746149965de9d31687096a857f58bec6fd71ec2b branch October 2, 2024 21:26
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Oct 2, 2024
auto-submit bot pushed a commit to flutter/flutter that referenced this pull request Oct 2, 2024
…156118)

flutter/engine@751ab9b...33ac1b3

2024-10-02 [email protected] Roll Dart SDK from 7d0becb773d1 to 14b931c40076 (2 revisions) (flutter/engine#55594)
2024-10-02 [email protected] Remove all use of `gn desc` global test fixtures. (flutter/engine#55592)
2024-10-02 [email protected] Roll Skia from 61bb59fcef34 to 40d51ebc76db (1 revision) (flutter/engine#55593)
2024-10-02 [email protected] Reland "[canvaskit] Further improve overlay optimization by splitting pictures" (flutter/engine#55563)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
brandon-bethke-timu pushed a commit to timu-com/engine that referenced this pull request Oct 4, 2024
… pictures" (flutter#55563)

This enhances the overlay optimization by delaying combining pictures to get tighter bounds for the pictures that make up the scene, enabling more sophisticated optimization since we can determine if they intersect with platform views on a per-picture basis.

Fixes flutter/flutter#149863
Fixes flutter/flutter#155833

On a Macbook in Chrome in an example app with an infinite scrolling grid of platform views, this brings the ratio of dropped frames from 93% to 55% (roughly 4 fps to 30 fps).

This is a reland of flutter#54878 with a fix for scenes with pictures and shader masks that are eventually entirely clipped out. It also fixes a performance issue caused by making too many Canvases just to record the size of the picture elements in the scene.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
fluttermirroringbot pushed a commit to flutter/flutter that referenced this pull request Dec 18, 2024
… pictures" (flutter/engine#55563)

This enhances the overlay optimization by delaying combining pictures to get tighter bounds for the pictures that make up the scene, enabling more sophisticated optimization since we can determine if they intersect with platform views on a per-picture basis.

Fixes #149863
Fixes #155833

On a Macbook in Chrome in an example app with an infinite scrolling grid of platform views, this brings the ratio of dropped frames from 93% to 55% (roughly 4 fps to 30 fps).

This is a reland of flutter/engine#54878 with a fix for scenes with pictures and shader masks that are eventually entirely clipped out. It also fixes a performance issue caused by making too many Canvases just to record the size of the picture elements in the scene.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

autosubmit Merge PR when tree becomes green via auto submit App platform-web Code specifically for the web engine

Projects

None yet

3 participants