RESOLVED FIXED74086
[chromium] Layer contents scale change should trigger invalidation
https://bugs.webkit.org/show_bug.cgi?id=74086
Summary [chromium] Layer contents scale change should trigger invalidation
Sami Kyostila
Reported 2011-12-08 06:43:17 PST
LayerChromium::setContentsScale() should invalidate the layer contents to ensure the scale change becomes visible.
Attachments
Patch (4.44 KB, patch)
2011-12-08 07:03 PST, Sami Kyostila
jamesr: review+
jamesr: commit-queue-
Patch (4.27 KB, patch)
2011-12-08 12:19 PST, Sami Kyostila
no flags
Sami Kyostila
Comment 1 2011-12-08 07:03:31 PST
Adrienne Walker
Comment 2 2011-12-08 10:54:39 PST
Comment on attachment 118384 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=118384&action=review > Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:428 > + if (!needsContentsScale() || m_contentsScale == contentsScale) I don't understand how this interacts with the needsContentsScale() check. Only ContentLayerChromium handles contents scale at this point. Do we want to set the contents scale for any layer, even if it doesn't handle it? What layer type are you trying to solve this for?
Sami Kyostila
Comment 3 2011-12-08 11:15:22 PST
Comment on attachment 118384 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=118384&action=review >> Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:428 >> + if (!needsContentsScale() || m_contentsScale == contentsScale) > > I don't understand how this interacts with the needsContentsScale() check. Only ContentLayerChromium handles contents scale at this point. Do we want to set the contents scale for any layer, even if it doesn't handle it? > > What layer type are you trying to solve this for? The contents scale should only be set for layers for which needsContentScale() is true. The check that I've added is intended to avoid unnecessary invalidation in the case that the contents scale did not actually change from its current value. I haven't checked whether that actually happens; this is just a precaution. I'm seeing the problem of missed invalidations on non-root ContentLayerChromium instances. The root layer is properly invalidated through WebViewImpl::invalidateRootLayerRect() when the page scale changes.
Adrienne Walker
Comment 4 2011-12-08 12:02:39 PST
Comment on attachment 118384 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=118384&action=review >>> Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:428 >>> + if (!needsContentsScale() || m_contentsScale == contentsScale) >> >> I don't understand how this interacts with the needsContentsScale() check. Only ContentLayerChromium handles contents scale at this point. Do we want to set the contents scale for any layer, even if it doesn't handle it? >> >> What layer type are you trying to solve this for? > > The contents scale should only be set for layers for which needsContentScale() is true. The check that I've added is intended to avoid unnecessary invalidation in the case that the contents scale did not actually change from its current value. I haven't checked whether that actually happens; this is just a precaution. > > I'm seeing the problem of missed invalidations on non-root ContentLayerChromium instances. The root layer is properly invalidated through WebViewImpl::invalidateRootLayerRect() when the page scale changes. Thanks for the explanation; this makes a lot more sense to me with that context. :)
James Robinson
Comment 5 2011-12-08 12:09:29 PST
Comment on attachment 118384 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=118384&action=review Please fix the ChangeLogs + nits, otherwise R=me > Source/WebCore/ChangeLog:10 > + Change-Id: Ic824414f65c2214ab7bacbe50f909c4cbc9ab59d I don't know where this comes from but it doesn't belong here. >>>> Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:428 >>>> + if (!needsContentsScale() || m_contentsScale == contentsScale) >>> >>> I don't understand how this interacts with the needsContentsScale() check. Only ContentLayerChromium handles contents scale at this point. Do we want to set the contents scale for any layer, even if it doesn't handle it? >>> >>> What layer type are you trying to solve this for? >> >> The contents scale should only be set for layers for which needsContentScale() is true. The check that I've added is intended to avoid unnecessary invalidation in the case that the contents scale did not actually change from its current value. I haven't checked whether that actually happens; this is just a precaution. >> >> I'm seeing the problem of missed invalidations on non-root ContentLayerChromium instances. The root layer is properly invalidated through WebViewImpl::invalidateRootLayerRect() when the page scale changes. > > Thanks for the explanation; this makes a lot more sense to me with that context. :) this feels a lot like an issue with our type system. We have functions on LayerChromium that should only ever be called on subclasses of LayerChromium, and we have this information available at the callsite. Something to clean up later, methinks. This looks fine. > Source/WebKit/chromium/ChangeLog:10 > + Change-Id: Ic824414f65c2214ab7bacbe50f909c4cbc9ab59d Same here > Source/WebKit/chromium/tests/LayerChromiumTest.cpp:710 > + bool needsContentsScale() const this is virtual, please tag it as such here for clarity
Sami Kyostila
Comment 6 2011-12-08 12:19:35 PST
Created attachment 118445 [details] Patch Thanks James and Enne. This patch addresses the remaining issues.
WebKit Review Bot
Comment 7 2011-12-08 16:38:02 PST
Comment on attachment 118445 [details] Patch Clearing flags on attachment: 118445 Committed r102395: <http://trac.webkit.org/changeset/102395>
WebKit Review Bot
Comment 8 2011-12-08 16:38:06 PST
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.