LayerChromium::setContentsScale() should invalidate the layer contents to ensure the scale change becomes visible.
Created attachment 118384 [details] Patch
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?
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.
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. :)
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
Created attachment 118445 [details] Patch Thanks James and Enne. This patch addresses the remaining issues.
Comment on attachment 118445 [details] Patch Clearing flags on attachment: 118445 Committed r102395: <http://trac.webkit.org/changeset/102395>
All reviewed patches have been landed. Closing bug.