New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix damage calculation when not providing populate_existing_damage for gl embedder #45611
Conversation
92bb9ae
to
4d805dc
Compare
Thanks for raising this, I facing same problem. |
82e8b3d
to
a518c0b
Compare
This looks like a sound change. Perhaps @knopp can also review? |
shell/platform/embedder/embedder.cc
Outdated
|
||
// Verify that at least one damage rectangle was provided. | ||
if (existing_damage.num_rects <= 0 || existing_damage.damage == nullptr) { | ||
FML_LOG(INFO) << "No damage was provided. Forcing full repaint."; | ||
existing_damage_rect = SkIRect::MakeEmpty(); | ||
partial_repaint_enabled = false; | ||
} else if (existing_damage.num_rects > 1) { | ||
// Log message notifying users that multi-damage is not yet available in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should join the rectangles here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done. Also added one more test.
0277297
to
a3ddee6
Compare
|
Thanks for doing this @ajihyf . How about rebasing the change? It should trigger the CI tests. |
a3ddee6
to
49337d5
Compare
…_damage for gl embedder (flutter/engine#45611)
…135717) flutter/engine@cc7c3c1...485543c 2023-09-28 skia-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from cu6apvEZ2P6zhishc... to l2RxJKPfYn7QzGOoL... (flutter/engine#46382) 2023-09-28 30870216+gaaclarke@users.noreply.github.com Remove opacity layer dcheck. (flutter/engine#46160) 2023-09-28 matanlurey@users.noreply.github.com Add initial support for 4x MSAA in OpenGLES backend. (flutter/engine#46381) 2023-09-28 matej.knopp@gmail.com Reland: [macOS] performKeyEquivalent cleanup (flutter/engine#46377) 2023-09-28 matej.knopp@gmail.com [macOS] TextInputPlugin should mark navigation events in IME popover as handled (flutter/engine#46141) 2023-09-28 30870216+gaaclarke@users.noreply.github.com Removed unnecessary dynamic dispatch (flutter/engine#46369) 2023-09-28 joel.winarske@gmail.com [Impeller] Fix OpenGLES EGL_BAD_ACCESS due to context being current on multiple threads. (flutter/engine#46287) 2023-09-28 ajihyf@gmail.com Fix damage calculation when not providing populate_existing_damage for gl embedder (flutter/engine#45611) Also rolling transitive DEPS: fuchsia/sdk/core/linux-amd64 from cu6apvEZ2P6z to l2RxJKPfYn7Q 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 jacksongardner@google.com,rmistry@google.com,zra@google.com 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://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…lutter#135717) flutter/engine@cc7c3c1...485543c 2023-09-28 skia-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from cu6apvEZ2P6zhishc... to l2RxJKPfYn7QzGOoL... (flutter/engine#46382) 2023-09-28 30870216+gaaclarke@users.noreply.github.com Remove opacity layer dcheck. (flutter/engine#46160) 2023-09-28 matanlurey@users.noreply.github.com Add initial support for 4x MSAA in OpenGLES backend. (flutter/engine#46381) 2023-09-28 matej.knopp@gmail.com Reland: [macOS] performKeyEquivalent cleanup (flutter/engine#46377) 2023-09-28 matej.knopp@gmail.com [macOS] TextInputPlugin should mark navigation events in IME popover as handled (flutter/engine#46141) 2023-09-28 30870216+gaaclarke@users.noreply.github.com Removed unnecessary dynamic dispatch (flutter/engine#46369) 2023-09-28 joel.winarske@gmail.com [Impeller] Fix OpenGLES EGL_BAD_ACCESS due to context being current on multiple threads. (flutter/engine#46287) 2023-09-28 ajihyf@gmail.com Fix damage calculation when not providing populate_existing_damage for gl embedder (flutter/engine#45611) Also rolling transitive DEPS: fuchsia/sdk/core/linux-amd64 from cu6apvEZ2P6z to l2RxJKPfYn7Q 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 jacksongardner@google.com,rmistry@google.com,zra@google.com 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://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…r gl embedder (#45611) # Description This PR fixes the `gl_populate_existing_damage` in embedder.cc, which currently returns an empty rectangle when a full repaint is needed. This leads to the `frame_damage` being considered empty in rasterizer.cc, causing incorrect partial repaint within Flutter when `gl_populate_existing_damage` is not provided by the embedder. # Related Issue flutter/flutter#119601 # Tests Add a new test. Also fixes damage calculation related tests in EmbedderTest by * Use a new Dart embedder fixture entry point `render_gradient_retained` which retains the old layer to make sure layer tree diff happens. * Add `latch.Wait()` after `SetGLPresentCallback` to make sure assertions have been executed. * Make `existing_damage_rects` static since it should be valid after `populate_existing_damage` returns.
Description
This PR fixes the
gl_populate_existing_damage
in embedder.cc, which currently returns an empty rectangle when a full repaint is needed. This leads to theframe_damage
being considered empty in rasterizer.cc, causing incorrect partial repaint within Flutter whengl_populate_existing_damage
is not provided by the embedder.Related Issue
flutter/flutter#119601
Tests
Add a new test. Also fixes damage calculation related tests in EmbedderTest by
render_gradient_retained
which retains the old layer to make sure layer tree diff happens.latch.Wait()
afterSetGLPresentCallback
to make sure assertions have been executed.existing_damage_rects
static since it should be valid afterpopulate_existing_damage
returns.