Changeset 171306 in webkit
- Timestamp:
- Jul 21, 2014 11:26:43 AM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r171299 r171306 1 2014-07-20 Simon Fraser <simon.fraser@apple.com> 2 3 [iOS WK1] Single touch div scrolling doesn't work in framesets (breaks Word previews) 4 https://bugs.webkit.org/show_bug.cgi?id=135103 5 <rdar://problem/11830219> 6 7 Reviewed by Darin Adler. 8 9 After r166117 all layer flushing starts on the root frame; we no longer flush layers 10 for each frame during painting. However, flushing GraphicsLayers can set some state 11 on a subframe RenderLayerCompositor that is now never processed, which breaks scroll 12 layer registration. 13 14 Fix by doing a walk of the Frame tree, and calling didFlushLayers() on subframe RenderLayerCompositors 15 before calling didFlushLayers() on self. 16 17 * rendering/RenderLayerCompositor.cpp: 18 (WebCore::RenderLayerCompositor::flushPendingLayerChanges): 19 (WebCore::RenderLayerCompositor::didFlushLayers): 20 (WebCore::RenderLayerCompositor::notifySubframesAfterLayerFlush): 21 (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers): Drive-by nullptr. 22 * rendering/RenderLayerCompositor.h: 23 1 24 2014-07-21 Eric Carlson <eric.carlson@apple.com> 2 25 -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r171073 r171306 471 471 m_flushingLayers = false; 472 472 473 updateScrollCoordinatedLayersAfterFlushIncludingSubframes(); 474 473 475 #if PLATFORM(IOS) 474 updateCustomLayersAfterFlush();475 476 476 ChromeClient* client = this->chromeClient(); 477 477 if (client && isFlushRoot) … … 479 479 #endif 480 480 481 startLayerFlushTimerIfNeeded(); 482 } 483 484 void RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlushIncludingSubframes() 485 { 486 updateScrollCoordinatedLayersAfterFlush(); 487 488 Frame& frame = m_renderView.frameView().frame(); 489 for (Frame* subframe = frame.tree().firstChild(); subframe; subframe = subframe->tree().traverseNext(&frame)) { 490 RenderView* view = subframe->contentRenderer(); 491 if (!view) 492 continue; 493 494 view->compositor().updateScrollCoordinatedLayersAfterFlush(); 495 } 496 } 497 498 void RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlush() 499 { 500 #if PLATFORM(IOS) 501 updateCustomLayersAfterFlush(); 502 #endif 503 481 504 for (auto it = m_scrollCoordinatedLayersNeedingUpdate.begin(), end = m_scrollCoordinatedLayersNeedingUpdate.end(); it != end; ++it) 482 505 updateScrollCoordinatedStatus(**it); 483 506 484 507 m_scrollCoordinatedLayersNeedingUpdate.clear(); 485 startLayerFlushTimerIfNeeded();486 508 } 487 509 … … 601 623 { 602 624 for (Frame* frame = &m_renderView.frameView().frame(); frame; frame = frame->tree().parent()) { 603 RenderLayerCompositor* compositor = frame->contentRenderer() ? &frame->contentRenderer()->compositor() : 0;625 RenderLayerCompositor* compositor = frame->contentRenderer() ? &frame->contentRenderer()->compositor() : nullptr; 604 626 if (compositor->isFlushingLayers()) 605 627 return compositor; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r171073 r171306 382 382 383 383 bool isFlushingLayers() const { return m_flushingLayers; } 384 void updateScrollCoordinatedLayersAfterFlushIncludingSubframes(); 385 void updateScrollCoordinatedLayersAfterFlush(); 384 386 385 387 Page* page() const;
Note: See TracChangeset
for help on using the changeset viewer.