Title: [153397] trunk/Source/WebCore
- Revision
- 153397
- Author
- [email protected]
- Date
- 2013-07-26 18:17:04 -0700 (Fri, 26 Jul 2013)
Log Message
With frame flattening on, too many resize events fired if document is resized in onresize handler.
https://bugs.webkit.org/show_bug.cgi?id=119075
Patch by Yongjun Zhang <[email protected]> on 2013-07-26
Reviewed by Simon Fraser.
With http://trac.webkit.org/changeset/149287, WebCore also sends resize event in FrameView::setFrameRect. When
flattening an iframe, setFrameRect could be called multiple times from RenderFrameBase::layoutWithFlattening and
we could get multiple resize events. This patch adds a flag in FrameView to disallow sending resize events if
we are inside layoutWithFlattening. The resize event will be sent in performPostLayoutTasks after the iframe
is done laying out.
Manually tested by verifying the rendering slowness in www.hi-pda.com is fixed when frame flattening is enabled.
* page/FrameView.cpp:
(WebCore::FrameView::FrameView):
(WebCore::FrameView::setFrameRect):
* page/FrameView.h:
(WebCore::FrameView::setResizeEventAllowed):
(WebCore::FrameView::resizeEventAllowed):
* rendering/RenderFrameBase.cpp:
(WebCore::RenderFrameBase::layoutWithFlattening):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (153396 => 153397)
--- trunk/Source/WebCore/ChangeLog 2013-07-27 00:57:31 UTC (rev 153396)
+++ trunk/Source/WebCore/ChangeLog 2013-07-27 01:17:04 UTC (rev 153397)
@@ -1,3 +1,27 @@
+2013-07-26 Yongjun Zhang <[email protected]>
+
+ With frame flattening on, too many resize events fired if document is resized in onresize handler.
+ https://bugs.webkit.org/show_bug.cgi?id=119075
+
+ Reviewed by Simon Fraser.
+
+ With http://trac.webkit.org/changeset/149287, WebCore also sends resize event in FrameView::setFrameRect. When
+ flattening an iframe, setFrameRect could be called multiple times from RenderFrameBase::layoutWithFlattening and
+ we could get multiple resize events. This patch adds a flag in FrameView to disallow sending resize events if
+ we are inside layoutWithFlattening. The resize event will be sent in performPostLayoutTasks after the iframe
+ is done laying out.
+
+ Manually tested by verifying the rendering slowness in www.hi-pda.com is fixed when frame flattening is enabled.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::FrameView):
+ (WebCore::FrameView::setFrameRect):
+ * page/FrameView.h:
+ (WebCore::FrameView::setResizeEventAllowed):
+ (WebCore::FrameView::resizeEventAllowed):
+ * rendering/RenderFrameBase.cpp:
+ (WebCore::RenderFrameBase::layoutWithFlattening):
+
2013-07-26 Dean Jackson <[email protected]>
Allow new transitions to run even when controller is suspended
Modified: trunk/Source/WebCore/page/FrameView.cpp (153396 => 153397)
--- trunk/Source/WebCore/page/FrameView.cpp 2013-07-27 00:57:31 UTC (rev 153396)
+++ trunk/Source/WebCore/page/FrameView.cpp 2013-07-27 01:17:04 UTC (rev 153397)
@@ -204,6 +204,7 @@
#endif
, m_visualUpdatesAllowedByClient(true)
, m_scrollPinningBehavior(DoNotPin)
+ , m_resizeEventAllowed(true)
{
init();
@@ -481,7 +482,8 @@
}
#endif
- sendResizeEventIfNeeded();
+ if (m_resizeEventAllowed)
+ sendResizeEventIfNeeded();
}
#if ENABLE(REQUEST_ANIMATION_FRAME)
Modified: trunk/Source/WebCore/page/FrameView.h (153396 => 153397)
--- trunk/Source/WebCore/page/FrameView.h 2013-07-27 00:57:31 UTC (rev 153396)
+++ trunk/Source/WebCore/page/FrameView.h 2013-07-27 01:17:04 UTC (rev 153397)
@@ -439,6 +439,9 @@
void setScrollPinningBehavior(ScrollPinningBehavior);
+ void setResizeEventAllowed(bool resizeEventAllowed) { m_resizeEventAllowed = resizeEventAllowed; }
+ bool resizeEventAllowed() const { return m_resizeEventAllowed; }
+
protected:
virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
virtual void scrollContentsSlowPath(const IntRect& updateRect);
@@ -671,6 +674,7 @@
bool m_visualUpdatesAllowedByClient;
ScrollPinningBehavior m_scrollPinningBehavior;
+ bool m_resizeEventAllowed;
};
inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count)
Modified: trunk/Source/WebCore/rendering/RenderFrameBase.cpp (153396 => 153397)
--- trunk/Source/WebCore/rendering/RenderFrameBase.cpp 2013-07-27 00:57:31 UTC (rev 153396)
+++ trunk/Source/WebCore/rendering/RenderFrameBase.cpp 2013-07-27 01:17:04 UTC (rev 153397)
@@ -65,6 +65,8 @@
return;
}
+ childFrameView->setResizeEventAllowed(false);
+
// need to update to calculate min/max correctly
updateWidgetPosition();
@@ -93,6 +95,7 @@
setWidth(max<LayoutUnit>(width(), childFrameView->contentsWidth() + hBorder));
updateWidgetPosition();
+ childFrameView->setResizeEventAllowed(true);
ASSERT(!childFrameView->layoutPending());
ASSERT(!childRoot->needsLayout());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes