Title: [257933] trunk/Source/WebCore
- Revision
- 257933
- Author
- simon.fra...@apple.com
- Date
- 2020-03-05 11:06:19 -0800 (Thu, 05 Mar 2020)
Log Message
Make m_viewportConstrainedObjects into a WeakHashSet
https://bugs.webkit.org/show_bug.cgi?id=208625
Reviewed by Ryosuke Niwa.
Use WeakHashSet<> for m_viewportConstrainedObjects.
* page/FrameView.cpp:
(WebCore::FrameView::didDestroyRenderTree):
(WebCore::FrameView::addViewportConstrainedObject):
(WebCore::FrameView::removeViewportConstrainedObject):
(WebCore::FrameView::scrollContentsFastPath):
(WebCore::FrameView::setViewportConstrainedObjectsNeedLayout):
* page/FrameView.h:
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects const):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateCompositingLayers):
* rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::willBeDestroyed):
(WebCore::RenderLayerModelObject::styleDidChange):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (257932 => 257933)
--- trunk/Source/WebCore/ChangeLog 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/ChangeLog 2020-03-05 19:06:19 UTC (rev 257933)
@@ -1,3 +1,27 @@
+2020-03-05 Simon Fraser <simon.fra...@apple.com>
+
+ Make m_viewportConstrainedObjects into a WeakHashSet
+ https://bugs.webkit.org/show_bug.cgi?id=208625
+
+ Reviewed by Ryosuke Niwa.
+
+ Use WeakHashSet<> for m_viewportConstrainedObjects.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::didDestroyRenderTree):
+ (WebCore::FrameView::addViewportConstrainedObject):
+ (WebCore::FrameView::removeViewportConstrainedObject):
+ (WebCore::FrameView::scrollContentsFastPath):
+ (WebCore::FrameView::setViewportConstrainedObjectsNeedLayout):
+ * page/FrameView.h:
+ * page/scrolling/ScrollingCoordinator.cpp:
+ (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects const):
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::updateCompositingLayers):
+ * rendering/RenderLayerModelObject.cpp:
+ (WebCore::RenderLayerModelObject::willBeDestroyed):
+ (WebCore::RenderLayerModelObject::styleDidChange):
+
2020-03-05 Kenneth Russell <k...@chromium.org>
REGRESSION: [ Mac ] fast/canvas/webgl/texImage2D-video-flipY-false.html is Timing out
Modified: trunk/Source/WebCore/page/FrameView.cpp (257932 => 257933)
--- trunk/Source/WebCore/page/FrameView.cpp 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/page/FrameView.cpp 2020-03-05 19:06:19 UTC (rev 257933)
@@ -589,7 +589,7 @@
// Everything else should have removed itself as the tree was felled.
ASSERT(!m_embeddedObjectsToUpdate || m_embeddedObjectsToUpdate->isEmpty() || (m_embeddedObjectsToUpdate->size() == 1 && m_embeddedObjectsToUpdate->first() == nullptr));
- ASSERT(!m_viewportConstrainedObjects || m_viewportConstrainedObjects->isEmpty());
+ ASSERT(!m_viewportConstrainedObjects || m_viewportConstrainedObjects->computesEmpty());
ASSERT(!m_slowRepaintObjects || m_slowRepaintObjects->computesEmpty());
ASSERT(!frame().animation().hasAnimations());
@@ -1514,10 +1514,10 @@
}
}
-void FrameView::addViewportConstrainedObject(RenderLayerModelObject* object)
+void FrameView::addViewportConstrainedObject(RenderLayerModelObject& object)
{
if (!m_viewportConstrainedObjects)
- m_viewportConstrainedObjects = makeUnique<ViewportConstrainedObjectSet>();
+ m_viewportConstrainedObjects = makeUnique<WeakHashSet<RenderLayerModelObject>>();
if (!m_viewportConstrainedObjects->contains(object)) {
m_viewportConstrainedObjects->add(object);
@@ -1531,7 +1531,7 @@
}
}
-void FrameView::removeViewportConstrainedObject(RenderLayerModelObject* object)
+void FrameView::removeViewportConstrainedObject(RenderLayerModelObject& object)
{
if (m_viewportConstrainedObjects && m_viewportConstrainedObjects->remove(object)) {
if (Page* page = frame().page()) {
@@ -2070,7 +2070,7 @@
bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
{
- if (!m_viewportConstrainedObjects || m_viewportConstrainedObjects->isEmpty()) {
+ if (!m_viewportConstrainedObjects || m_viewportConstrainedObjects->computesEmpty()) {
frame().page()->chrome().scroll(scrollDelta, rectToScroll, clipRect);
return true;
}
@@ -2080,14 +2080,14 @@
// Get the rects of the fixed objects visible in the rectToScroll
Region regionToUpdate;
for (auto& renderer : *m_viewportConstrainedObjects) {
- if (!renderer->style().hasViewportConstrainedPosition())
+ if (!renderer.style().hasViewportConstrainedPosition())
continue;
- if (renderer->isComposited())
+ if (renderer.isComposited())
continue;
// Fixed items should always have layers.
- ASSERT(renderer->hasLayer());
- RenderLayer* layer = downcast<RenderBoxModelObject>(*renderer).layer();
+ ASSERT(renderer.hasLayer());
+ RenderLayer* layer = downcast<RenderBoxModelObject>(renderer).layer();
if (layer->viewportConstrainedNotCompositedReason() == RenderLayer::NotCompositedForBoundsOutOfView
|| layer->viewportConstrainedNotCompositedReason() == RenderLayer::NotCompositedForNoVisibleContent) {
@@ -2436,9 +2436,9 @@
return;
for (auto& renderer : *m_viewportConstrainedObjects) {
- renderer->setNeedsLayout();
- if (renderer->hasLayer()) {
- auto* layer = downcast<RenderBoxModelObject>(*renderer).layer();
+ renderer.setNeedsLayout();
+ if (renderer.hasLayer()) {
+ auto* layer = downcast<RenderBoxModelObject>(renderer).layer();
layer->setNeedsCompositingGeometryUpdate();
}
}
Modified: trunk/Source/WebCore/page/FrameView.h (257932 => 257933)
--- trunk/Source/WebCore/page/FrameView.h 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/page/FrameView.h 2020-03-05 19:06:19 UTC (rev 257933)
@@ -34,6 +34,7 @@
#include "Pagination.h"
#include "PaintPhase.h"
#include "RenderElement.h"
+#include "RenderLayerModelObject.h"
#include "RenderPtr.h"
#include "ScrollView.h"
#include "StyleColor.h"
@@ -292,14 +293,13 @@
void addSlowRepaintObject(RenderElement&);
void removeSlowRepaintObject(RenderElement&);
bool hasSlowRepaintObject(const RenderElement& renderer) const { return m_slowRepaintObjects && m_slowRepaintObjects->contains(renderer); }
- bool hasSlowRepaintObjects() const { return m_slowRepaintObjects && m_slowRepaintObjects->computeSize(); }
+ bool hasSlowRepaintObjects() const { return m_slowRepaintObjects && !m_slowRepaintObjects->computesEmpty(); }
// Includes fixed- and sticky-position objects.
- typedef HashSet<RenderLayerModelObject*> ViewportConstrainedObjectSet;
- void addViewportConstrainedObject(RenderLayerModelObject*);
- void removeViewportConstrainedObject(RenderLayerModelObject*);
- const ViewportConstrainedObjectSet* viewportConstrainedObjects() const { return m_viewportConstrainedObjects.get(); }
- bool hasViewportConstrainedObjects() const { return m_viewportConstrainedObjects && m_viewportConstrainedObjects->size() > 0; }
+ void addViewportConstrainedObject(RenderLayerModelObject&);
+ void removeViewportConstrainedObject(RenderLayerModelObject&);
+ const WeakHashSet<RenderLayerModelObject>* viewportConstrainedObjects() const { return m_viewportConstrainedObjects.get(); }
+ bool hasViewportConstrainedObjects() const { return m_viewportConstrainedObjects && !m_viewportConstrainedObjects->computesEmpty(); }
float frameScaleFactor() const;
@@ -886,7 +886,7 @@
IntSize m_autoSizeContentSize;
std::unique_ptr<ScrollableAreaSet> m_scrollableAreas;
- std::unique_ptr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects;
+ std::unique_ptr<WeakHashSet<RenderLayerModelObject>> m_viewportConstrainedObjects;
OptionSet<LayoutMilestone> m_milestonesPendingPaint;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (257932 => 257933)
--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp 2020-03-05 19:06:19 UTC (rev 257933)
@@ -312,14 +312,14 @@
bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(const FrameView& frameView) const
{
- const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView.viewportConstrainedObjects();
+ auto* viewportConstrainedObjects = frameView.viewportConstrainedObjects();
if (!viewportConstrainedObjects)
return false;
for (auto& viewportConstrainedObject : *viewportConstrainedObjects) {
- if (!is<RenderBoxModelObject>(*viewportConstrainedObject) || !viewportConstrainedObject->hasLayer())
+ if (!is<RenderBoxModelObject>(viewportConstrainedObject) || !viewportConstrainedObject.hasLayer())
return true;
- auto& layer = *downcast<RenderBoxModelObject>(*viewportConstrainedObject).layer();
+ auto& layer = *downcast<RenderBoxModelObject>(viewportConstrainedObject).layer();
// Any explicit reason that a fixed position element is not composited shouldn't cause slow scrolling.
if (!layer.isComposited() && layer.viewportConstrainedNotCompositedReason() == RenderLayer::NoNotCompositedReason)
return true;
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (257932 => 257933)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2020-03-05 19:06:19 UTC (rev 257933)
@@ -719,8 +719,8 @@
// We only get here if we didn't scroll on the scrolling thread, so this update needs to re-position viewport-constrained layers.
if (m_renderView.settings().acceleratedCompositingForFixedPositionEnabled() && isPageScroll) {
if (auto* viewportConstrainedObjects = m_renderView.frameView().viewportConstrainedObjects()) {
- for (auto* renderer : *viewportConstrainedObjects) {
- if (auto* layer = renderer->layer())
+ for (auto& renderer : *viewportConstrainedObjects) {
+ if (auto* layer = renderer.layer())
layer->setNeedsCompositingGeometryUpdate();
}
}
Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (257932 => 257933)
--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2020-03-05 19:02:53 UTC (rev 257932)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2020-03-05 19:06:19 UTC (rev 257933)
@@ -70,7 +70,7 @@
{
if (isPositioned()) {
if (style().hasViewportConstrainedPosition())
- view().frameView().removeViewportConstrainedObject(this);
+ view().frameView().removeViewportConstrainedObject(*this);
}
if (hasLayer()) {
@@ -200,9 +200,9 @@
bool oldStyleIsViewportConstrained = oldStyle && oldStyle->hasViewportConstrainedPosition();
if (newStyleIsViewportConstrained != oldStyleIsViewportConstrained) {
if (newStyleIsViewportConstrained && layer())
- view().frameView().addViewportConstrainedObject(this);
+ view().frameView().addViewportConstrainedObject(*this);
else
- view().frameView().removeViewportConstrainedObject(this);
+ view().frameView().removeViewportConstrainedObject(*this);
}
#if ENABLE(CSS_SCROLL_SNAP)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes