Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: Source/core/rendering/compositing/RenderLayerCompositor.cpp

Issue 397023003: Preparing Blink for cross-process frame tree replication (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Removed extra blank line Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // No tests fail if it's deleted. 132 // No tests fail if it's deleted.
133 setNeedsCompositingUpdate(CompositingUpdateRebuildTree); 133 setNeedsCompositingUpdate(CompositingUpdateRebuildTree);
134 setCompositingModeEnabled(true); 134 setCompositingModeEnabled(true);
135 } 135 }
136 } 136 }
137 137
138 bool RenderLayerCompositor::rootShouldAlwaysComposite() const 138 bool RenderLayerCompositor::rootShouldAlwaysComposite() const
139 { 139 {
140 if (!m_hasAcceleratedCompositing) 140 if (!m_hasAcceleratedCompositing)
141 return false; 141 return false;
142 return m_renderView.frame()->isMainFrame() || m_compositingReasonFinder.requ iresCompositingForScrollableFrame(); 142 return m_renderView.frame()->isLocalRoot() || m_compositingReasonFinder.requ iresCompositingForScrollableFrame();
143 } 143 }
144 144
145 void RenderLayerCompositor::updateAcceleratedCompositingSettings() 145 void RenderLayerCompositor::updateAcceleratedCompositingSettings()
146 { 146 {
147 m_compositingReasonFinder.updateTriggers(); 147 m_compositingReasonFinder.updateTriggers();
148 m_hasAcceleratedCompositing = m_renderView.document().settings()->accelerate dCompositingEnabled(); 148 m_hasAcceleratedCompositing = m_renderView.document().settings()->accelerate dCompositingEnabled();
149 m_rootShouldAlwaysCompositeDirty = true; 149 m_rootShouldAlwaysCompositeDirty = true;
150 } 150 }
151 151
152 bool RenderLayerCompositor::layerSquashingEnabled() const 152 bool RenderLayerCompositor::layerSquashingEnabled() const
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 } 244 }
245 245
246 #endif 246 #endif
247 247
248 void RenderLayerCompositor::applyOverlayFullscreenVideoAdjustment() 248 void RenderLayerCompositor::applyOverlayFullscreenVideoAdjustment()
249 { 249 {
250 m_inOverlayFullscreenVideo = false; 250 m_inOverlayFullscreenVideo = false;
251 if (!m_rootContentLayer) 251 if (!m_rootContentLayer)
252 return; 252 return;
253 253
254 bool isMainFrame = m_renderView.frame()->isMainFrame(); 254 bool isLocalRoot = m_renderView.frame()->isLocalRoot();
255 RenderVideo* video = findFullscreenVideoRenderer(m_renderView.document()); 255 RenderVideo* video = findFullscreenVideoRenderer(m_renderView.document());
256 if (!video || !video->layer()->hasCompositedLayerMapping()) { 256 if (!video || !video->layer()->hasCompositedLayerMapping()) {
257 if (isMainFrame) { 257 if (isLocalRoot) {
258 GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer(); 258 GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer();
259 if (backgroundLayer && !backgroundLayer->parent()) 259 if (backgroundLayer && !backgroundLayer->parent())
260 rootFixedBackgroundsChanged(); 260 rootFixedBackgroundsChanged();
261 } 261 }
262 return; 262 return;
263 } 263 }
264 264
265 GraphicsLayer* videoLayer = video->layer()->compositedLayerMapping()->mainGr aphicsLayer(); 265 GraphicsLayer* videoLayer = video->layer()->compositedLayerMapping()->mainGr aphicsLayer();
266 266
267 // The fullscreen video has layer position equal to its enclosing frame's sc roll position because fullscreen container is fixed-positioned. 267 // The fullscreen video has layer position equal to its enclosing frame's sc roll position because fullscreen container is fixed-positioned.
268 // We should reset layer position here since we are going to reattach the la yer at the very top level. 268 // We should reset layer position here since we are going to reattach the la yer at the very top level.
269 videoLayer->setPosition(IntPoint()); 269 videoLayer->setPosition(IntPoint());
270 270
271 // Only steal fullscreen video layer and clear all other layers if we are th e main frame. 271 // Only steal fullscreen video layer and clear all other layers if we are th e main frame.
272 if (!isMainFrame) 272 if (!isLocalRoot)
273 return; 273 return;
274 274
275 m_rootContentLayer->removeAllChildren(); 275 m_rootContentLayer->removeAllChildren();
276 m_overflowControlsHostLayer->addChild(videoLayer); 276 m_overflowControlsHostLayer->addChild(videoLayer);
277 if (GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer()) 277 if (GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer())
278 backgroundLayer->removeFromParent(); 278 backgroundLayer->removeFromParent();
279 m_inOverlayFullscreenVideo = true; 279 m_inOverlayFullscreenVideo = true;
280 } 280 }
281 281
282 void RenderLayerCompositor::updateIfNeeded() 282 void RenderLayerCompositor::updateIfNeeded()
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 // sorts of compositingState transitions. 386 // sorts of compositingState transitions.
387 layer->setLostGroupedMapping(false); 387 layer->setLostGroupedMapping(false);
388 layer->setGroupedMapping(0); 388 layer->setGroupedMapping(0);
389 389
390 // If we need to repaint, do so before allocating the compositedLayerMap ping 390 // If we need to repaint, do so before allocating the compositedLayerMap ping
391 repaintOnCompositingChange(layer); 391 repaintOnCompositingChange(layer);
392 layer->ensureCompositedLayerMapping(); 392 layer->ensureCompositedLayerMapping();
393 compositedLayerMappingChanged = true; 393 compositedLayerMappingChanged = true;
394 394
395 // At this time, the ScrollingCooridnator only supports the top-level fr ame. 395 // At this time, the ScrollingCooridnator only supports the top-level fr ame.
396 if (layer->isRootLayer() && m_renderView.frame()->isMainFrame()) { 396 if (layer->isRootLayer() && m_renderView.frame()->isLocalRoot()) {
397 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator()) 397 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator())
398 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f rameView()); 398 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f rameView());
399 } 399 }
400 break; 400 break;
401 case RemoveOwnCompositedLayerMapping: 401 case RemoveOwnCompositedLayerMapping:
402 // PutInSquashingLayer means you might have to remove the composited layer m apping first. 402 // PutInSquashingLayer means you might have to remove the composited layer m apping first.
403 case PutInSquashingLayer: 403 case PutInSquashingLayer:
404 if (layer->hasCompositedLayerMapping()) { 404 if (layer->hasCompositedLayerMapping()) {
405 // If we're removing the compositedLayerMapping from a reflection, c lear the source GraphicsLayer's pointer to 405 // If we're removing the compositedLayerMapping from a reflection, c lear the source GraphicsLayer's pointer to
406 // its replica GraphicsLayer. In practice this should never happen b ecause reflectee and reflection 406 // its replica GraphicsLayer. In practice this should never happen b ecause reflectee and reflection
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 { 496 {
497 FrameView* frameView = m_renderView.frameView(); 497 FrameView* frameView = m_renderView.frameView();
498 IntPoint scrollPosition = frameView->scrollPosition(); 498 IntPoint scrollPosition = frameView->scrollPosition();
499 499
500 if (!m_scrollLayer) 500 if (!m_scrollLayer)
501 return; 501 return;
502 502
503 bool scrollingCoordinatorHandlesOffset = false; 503 bool scrollingCoordinatorHandlesOffset = false;
504 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) { 504 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) {
505 if (Settings* settings = m_renderView.document().settings()) { 505 if (Settings* settings = m_renderView.document().settings()) {
506 if (m_renderView.frame()->isMainFrame() || settings->compositedScrol lingForFramesEnabled()) 506 if (m_renderView.frame()->isLocalRoot() || settings->compositedScrol lingForFramesEnabled())
507 scrollingCoordinatorHandlesOffset = scrollingCoordinator->scroll ableAreaScrollLayerDidChange(frameView); 507 scrollingCoordinatorHandlesOffset = scrollingCoordinator->scroll ableAreaScrollLayerDidChange(frameView);
508 } 508 }
509 } 509 }
510 510
511 // Scroll position = scroll minimum + scroll offset. Adjust the layer's 511 // Scroll position = scroll minimum + scroll offset. Adjust the layer's
512 // position to handle whatever the scroll coordinator isn't handling. 512 // position to handle whatever the scroll coordinator isn't handling.
513 // The minimum scroll position is non-zero for RTL pages with overflow. 513 // The minimum scroll position is non-zero for RTL pages with overflow.
514 if (scrollingCoordinatorHandlesOffset) 514 if (scrollingCoordinatorHandlesOffset)
515 m_scrollLayer->setPosition(-frameView->minimumScrollPosition()); 515 m_scrollLayer->setPosition(-frameView->minimumScrollPosition());
516 else 516 else
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 682
683 void RenderLayerCompositor::setIsInWindow(bool isInWindow) 683 void RenderLayerCompositor::setIsInWindow(bool isInWindow)
684 { 684 {
685 if (!staleInCompositingMode()) 685 if (!staleInCompositingMode())
686 return; 686 return;
687 687
688 if (isInWindow) { 688 if (isInWindow) {
689 if (m_rootLayerAttachment != RootLayerUnattached) 689 if (m_rootLayerAttachment != RootLayerUnattached)
690 return; 690 return;
691 691
692 RootLayerAttachment attachment = m_renderView.frame()->isMainFrame() ? R ootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame; 692 RootLayerAttachment attachment = m_renderView.frame()->isLocalRoot() ? R ootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame;
693 attachRootLayer(attachment); 693 attachRootLayer(attachment);
694 } else { 694 } else {
695 if (m_rootLayerAttachment == RootLayerUnattached) 695 if (m_rootLayerAttachment == RootLayerUnattached)
696 return; 696 return;
697 697
698 detachRootLayer(); 698 detachRootLayer();
699 } 699 }
700 } 700 }
701 701
702 void RenderLayerCompositor::updateRootLayerPosition() 702 void RenderLayerCompositor::updateRootLayerPosition()
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 880
881 bool RenderLayerCompositor::requiresScrollCornerLayer() const 881 bool RenderLayerCompositor::requiresScrollCornerLayer() const
882 { 882 {
883 FrameView* view = m_renderView.frameView(); 883 FrameView* view = m_renderView.frameView();
884 return shouldCompositeOverflowControls(view) && view->isScrollCornerVisible( ); 884 return shouldCompositeOverflowControls(view) && view->isScrollCornerVisible( );
885 } 885 }
886 886
887 void RenderLayerCompositor::updateOverflowControlsLayers() 887 void RenderLayerCompositor::updateOverflowControlsLayers()
888 { 888 {
889 #if USE(RUBBER_BANDING) 889 #if USE(RUBBER_BANDING)
890 if (m_renderView.frame()->isMainFrame()) { 890 if (m_renderView.frame()->isLocalRoot()) {
891 if (!m_layerForOverhangShadow) { 891 if (!m_layerForOverhangShadow) {
892 m_layerForOverhangShadow = GraphicsLayer::create(graphicsLayerFactor y(), this); 892 m_layerForOverhangShadow = GraphicsLayer::create(graphicsLayerFactor y(), this);
893 OverscrollTheme::theme()->setUpOverhangShadowLayer(m_layerForOverhan gShadow.get()); 893 OverscrollTheme::theme()->setUpOverhangShadowLayer(m_layerForOverhan gShadow.get());
894 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha ngShadow.get(), m_rootContentLayer.get()); 894 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha ngShadow.get(), m_rootContentLayer.get());
895 m_scrollLayer->addChild(m_layerForOverhangShadow.get()); 895 m_scrollLayer->addChild(m_layerForOverhangShadow.get());
896 } 896 }
897 } else { 897 } else {
898 ASSERT(!m_layerForOverhangShadow); 898 ASSERT(!m_layerForOverhangShadow);
899 } 899 }
900 #endif 900 #endif
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 } else if (m_layerForScrollCorner) { 946 } else if (m_layerForScrollCorner) {
947 m_layerForScrollCorner->removeFromParent(); 947 m_layerForScrollCorner->removeFromParent();
948 m_layerForScrollCorner = nullptr; 948 m_layerForScrollCorner = nullptr;
949 } 949 }
950 950
951 m_renderView.frameView()->positionScrollbarLayers(); 951 m_renderView.frameView()->positionScrollbarLayers();
952 } 952 }
953 953
954 void RenderLayerCompositor::ensureRootLayer() 954 void RenderLayerCompositor::ensureRootLayer()
955 { 955 {
956 RootLayerAttachment expectedAttachment = m_renderView.frame()->isMainFrame() ? RootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame; 956 RootLayerAttachment expectedAttachment = m_renderView.frame()->isLocalRoot() ? RootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame;
957 if (expectedAttachment == m_rootLayerAttachment) 957 if (expectedAttachment == m_rootLayerAttachment)
958 return; 958 return;
959 959
960 if (!m_rootContentLayer) { 960 if (!m_rootContentLayer) {
961 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ; 961 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ;
962 IntRect overflowRect = m_renderView.pixelSnappedLayoutOverflowRect(); 962 IntRect overflowRect = m_renderView.pixelSnappedLayoutOverflowRect();
963 m_rootContentLayer->setSize(FloatSize(overflowRect.maxX(), overflowRect. maxY())); 963 m_rootContentLayer->setSize(FloatSize(overflowRect.maxX(), overflowRect. maxY()));
964 m_rootContentLayer->setPosition(FloatPoint()); 964 m_rootContentLayer->setPosition(FloatPoint());
965 m_rootContentLayer->setOwnerNodeId(InspectorNodeIds::idForNode(m_renderV iew.generatingNode())); 965 m_rootContentLayer->setOwnerNodeId(InspectorNodeIds::idForNode(m_renderV iew.generatingNode()));
966 966
967 // Need to clip to prevent transformed content showing outside this fram e 967 // Need to clip to prevent transformed content showing outside this fram e
968 m_rootContentLayer->setMasksToBounds(true); 968 m_rootContentLayer->setMasksToBounds(true);
969 } 969 }
970 970
971 if (!m_overflowControlsHostLayer) { 971 if (!m_overflowControlsHostLayer) {
972 ASSERT(!m_scrollLayer); 972 ASSERT(!m_scrollLayer);
973 ASSERT(!m_containerLayer); 973 ASSERT(!m_containerLayer);
974 974
975 // Create a layer to host the clipping layer and the overflow controls l ayers. 975 // Create a layer to host the clipping layer and the overflow controls l ayers.
976 m_overflowControlsHostLayer = GraphicsLayer::create(graphicsLayerFactory (), this); 976 m_overflowControlsHostLayer = GraphicsLayer::create(graphicsLayerFactory (), this);
977 977
978 // Create a clipping layer if this is an iframe or settings require to c lip. 978 // Create a clipping layer if this is an iframe or settings require to c lip.
979 m_containerLayer = GraphicsLayer::create(graphicsLayerFactory(), this); 979 m_containerLayer = GraphicsLayer::create(graphicsLayerFactory(), this);
980 bool containerMasksToBounds = !m_renderView.frame()->isMainFrame(); 980 bool containerMasksToBounds = !m_renderView.frame()->isLocalRoot();
981 if (Settings* settings = m_renderView.document().settings()) { 981 if (Settings* settings = m_renderView.document().settings()) {
982 if (settings->mainFrameClipsContent()) 982 if (settings->mainFrameClipsContent())
983 containerMasksToBounds = true; 983 containerMasksToBounds = true;
984 } 984 }
985 m_containerLayer->setMasksToBounds(containerMasksToBounds); 985 m_containerLayer->setMasksToBounds(containerMasksToBounds);
986 986
987 m_scrollLayer = GraphicsLayer::create(graphicsLayerFactory(), this); 987 m_scrollLayer = GraphicsLayer::create(graphicsLayerFactory(), this);
988 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor()) 988 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
989 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(m_sc rollLayer.get(), true); 989 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(m_sc rollLayer.get(), true);
990 990
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 } else if (graphicsLayer == m_scrollLayer.get()) { 1167 } else if (graphicsLayer == m_scrollLayer.get()) {
1168 name = "LocalFrame Scrolling Layer"; 1168 name = "LocalFrame Scrolling Layer";
1169 } else { 1169 } else {
1170 ASSERT_NOT_REACHED(); 1170 ASSERT_NOT_REACHED();
1171 } 1171 }
1172 1172
1173 return name; 1173 return name;
1174 } 1174 }
1175 1175
1176 } // namespace WebCore 1176 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698