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

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

Issue 348833005: [DO NOT COMMIT] Random hacks to unblock work on replication. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: More random hacks, including also dcheng's https://codereview.chromium.org/346403002 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
« no previous file with comments | « Source/core/page/Page.cpp ('k') | Source/modules/geolocation/GeolocationController.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 // No tests fail if it's deleted. 130 // No tests fail if it's deleted.
131 setNeedsCompositingUpdate(CompositingUpdateRebuildTree); 131 setNeedsCompositingUpdate(CompositingUpdateRebuildTree);
132 setCompositingModeEnabled(true); 132 setCompositingModeEnabled(true);
133 } 133 }
134 } 134 }
135 135
136 bool RenderLayerCompositor::rootShouldAlwaysComposite() const 136 bool RenderLayerCompositor::rootShouldAlwaysComposite() const
137 { 137 {
138 if (!m_hasAcceleratedCompositing) 138 if (!m_hasAcceleratedCompositing)
139 return false; 139 return false;
140 return m_renderView.frame()->isMainFrame() || m_compositingReasonFinder.requ iresCompositingForScrollableFrame(); 140 return m_renderView.frame()->isMainFrame() || m_renderView.frame()->isLocalR oot() ||
141 m_compositingReasonFinder.requiresCompositingForScrollableFrame();
141 } 142 }
142 143
143 void RenderLayerCompositor::updateAcceleratedCompositingSettings() 144 void RenderLayerCompositor::updateAcceleratedCompositingSettings()
144 { 145 {
145 m_compositingReasonFinder.updateTriggers(); 146 m_compositingReasonFinder.updateTriggers();
146 m_hasAcceleratedCompositing = m_renderView.document().settings()->accelerate dCompositingEnabled(); 147 m_hasAcceleratedCompositing = m_renderView.document().settings()->accelerate dCompositingEnabled();
147 m_rootShouldAlwaysCompositeDirty = true; 148 m_rootShouldAlwaysCompositeDirty = true;
148 } 149 }
149 150
150 bool RenderLayerCompositor::layerSquashingEnabled() const 151 bool RenderLayerCompositor::layerSquashingEnabled() const
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 } 244 }
244 245
245 #endif 246 #endif
246 247
247 void RenderLayerCompositor::applyOverlayFullscreenVideoAdjustment() 248 void RenderLayerCompositor::applyOverlayFullscreenVideoAdjustment()
248 { 249 {
249 m_inOverlayFullscreenVideo = false; 250 m_inOverlayFullscreenVideo = false;
250 if (!m_rootContentLayer) 251 if (!m_rootContentLayer)
251 return; 252 return;
252 253
253 bool isMainFrame = m_renderView.frame()->isMainFrame(); 254 bool isLocalRoot = m_renderView.frame()->isLocalRoot();
254 RenderVideo* video = findFullscreenVideoRenderer(m_renderView.document()); 255 RenderVideo* video = findFullscreenVideoRenderer(m_renderView.document());
255 if (!video || !video->hasCompositedLayerMapping()) { 256 if (!video || !video->hasCompositedLayerMapping()) {
256 if (isMainFrame) { 257 if (isLocalRoot) {
257 GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer(); 258 GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer();
258 if (backgroundLayer && !backgroundLayer->parent()) 259 if (backgroundLayer && !backgroundLayer->parent())
259 rootFixedBackgroundsChanged(); 260 rootFixedBackgroundsChanged();
260 } 261 }
261 return; 262 return;
262 } 263 }
263 264
264 GraphicsLayer* videoLayer = video->compositedLayerMapping()->mainGraphicsLay er(); 265 GraphicsLayer* videoLayer = video->compositedLayerMapping()->mainGraphicsLay er();
265 266
266 // 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.
267 // 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.
268 videoLayer->setPosition(IntPoint()); 269 videoLayer->setPosition(IntPoint());
269 270
270 // 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.
271 if (!isMainFrame) 272 if (!isLocalRoot)
272 return; 273 return;
273 274
274 m_rootContentLayer->removeAllChildren(); 275 m_rootContentLayer->removeAllChildren();
275 m_overflowControlsHostLayer->addChild(videoLayer); 276 m_overflowControlsHostLayer->addChild(videoLayer);
276 if (GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer()) 277 if (GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer())
277 backgroundLayer->removeFromParent(); 278 backgroundLayer->removeFromParent();
278 m_inOverlayFullscreenVideo = true; 279 m_inOverlayFullscreenVideo = true;
279 } 280 }
280 281
281 void RenderLayerCompositor::updateIfNeeded() 282 void RenderLayerCompositor::updateIfNeeded()
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 } 351 }
351 352
352 for (unsigned i = 0; i < layersNeedingRepaint.size(); i++) { 353 for (unsigned i = 0; i < layersNeedingRepaint.size(); i++) {
353 RenderLayer* layer = layersNeedingRepaint[i]; 354 RenderLayer* layer = layersNeedingRepaint[i];
354 layer->repainter().computeRepaintRectsIncludingNonCompositingDescendants (); 355 layer->repainter().computeRepaintRectsIncludingNonCompositingDescendants ();
355 356
356 repaintOnCompositingChange(layer); 357 repaintOnCompositingChange(layer);
357 } 358 }
358 359
359 // Inform the inspector that the layer tree has changed. 360 // Inform the inspector that the layer tree has changed.
360 if (m_renderView.frame()->isMainFrame()) 361 if (m_renderView.frame()->isLocalRoot())
361 InspectorInstrumentation::layerTreeDidChange(m_renderView.frame()); 362 InspectorInstrumentation::layerTreeDidChange(m_renderView.frame());
362 } 363 }
363 364
364 bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l ayer, const CompositingStateTransitionType compositedLayerUpdate) 365 bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l ayer, const CompositingStateTransitionType compositedLayerUpdate)
365 { 366 {
366 bool compositedLayerMappingChanged = false; 367 bool compositedLayerMappingChanged = false;
367 bool nonCompositedReasonChanged = updateLayerIfViewportConstrained(layer); 368 bool nonCompositedReasonChanged = updateLayerIfViewportConstrained(layer);
368 369
369 // FIXME: It would be nice to directly use the layer's compositing reason, 370 // FIXME: It would be nice to directly use the layer's compositing reason,
370 // but allocateOrClearCompositedLayerMapping also gets called without having updated compositing 371 // but allocateOrClearCompositedLayerMapping also gets called without having updated compositing
(...skipping 10 matching lines...) Expand all
381 // sorts of compositingState transitions. 382 // sorts of compositingState transitions.
382 layer->setLostGroupedMapping(false); 383 layer->setLostGroupedMapping(false);
383 layer->setGroupedMapping(0); 384 layer->setGroupedMapping(0);
384 385
385 // If we need to repaint, do so before allocating the compositedLayerMap ping 386 // If we need to repaint, do so before allocating the compositedLayerMap ping
386 repaintOnCompositingChange(layer); 387 repaintOnCompositingChange(layer);
387 layer->ensureCompositedLayerMapping(); 388 layer->ensureCompositedLayerMapping();
388 compositedLayerMappingChanged = true; 389 compositedLayerMappingChanged = true;
389 390
390 // At this time, the ScrollingCooridnator only supports the top-level fr ame. 391 // At this time, the ScrollingCooridnator only supports the top-level fr ame.
391 if (layer->isRootLayer() && m_renderView.frame()->isMainFrame()) { 392 if (layer->isRootLayer() && m_renderView.frame()->isLocalRoot()) {
392 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator()) 393 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator())
393 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f rameView()); 394 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f rameView());
394 } 395 }
395 break; 396 break;
396 case RemoveOwnCompositedLayerMapping: 397 case RemoveOwnCompositedLayerMapping:
397 // PutInSquashingLayer means you might have to remove the composited layer m apping first. 398 // PutInSquashingLayer means you might have to remove the composited layer m apping first.
398 case PutInSquashingLayer: 399 case PutInSquashingLayer:
399 if (layer->hasCompositedLayerMapping()) { 400 if (layer->hasCompositedLayerMapping()) {
400 // If we're removing the compositedLayerMapping from a reflection, c lear the source GraphicsLayer's pointer to 401 // If we're removing the compositedLayerMapping from a reflection, c lear the source GraphicsLayer's pointer to
401 // its replica GraphicsLayer. In practice this should never happen b ecause reflectee and reflection 402 // its replica GraphicsLayer. In practice this should never happen b ecause reflectee and reflection
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 { 538 {
538 FrameView* frameView = m_renderView.frameView(); 539 FrameView* frameView = m_renderView.frameView();
539 IntPoint scrollPosition = frameView->scrollPosition(); 540 IntPoint scrollPosition = frameView->scrollPosition();
540 541
541 if (!m_scrollLayer) 542 if (!m_scrollLayer)
542 return; 543 return;
543 544
544 bool scrollingCoordinatorHandlesOffset = false; 545 bool scrollingCoordinatorHandlesOffset = false;
545 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) { 546 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) {
546 if (Settings* settings = m_renderView.document().settings()) { 547 if (Settings* settings = m_renderView.document().settings()) {
547 if (m_renderView.frame()->isMainFrame() || settings->compositedScrol lingForFramesEnabled()) 548 if (m_renderView.frame()->isLocalRoot() || settings->compositedScrol lingForFramesEnabled())
548 scrollingCoordinatorHandlesOffset = scrollingCoordinator->scroll ableAreaScrollLayerDidChange(frameView); 549 scrollingCoordinatorHandlesOffset = scrollingCoordinator->scroll ableAreaScrollLayerDidChange(frameView);
549 } 550 }
550 } 551 }
551 552
552 // Scroll position = scroll minimum + scroll offset. Adjust the layer's 553 // Scroll position = scroll minimum + scroll offset. Adjust the layer's
553 // position to handle whatever the scroll coordinator isn't handling. 554 // position to handle whatever the scroll coordinator isn't handling.
554 // The minimum scroll position is non-zero for RTL pages with overflow. 555 // The minimum scroll position is non-zero for RTL pages with overflow.
555 if (scrollingCoordinatorHandlesOffset) 556 if (scrollingCoordinatorHandlesOffset)
556 m_scrollLayer->setPosition(-frameView->minimumScrollPosition()); 557 m_scrollLayer->setPosition(-frameView->minimumScrollPosition());
557 else 558 else
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 724
724 void RenderLayerCompositor::setIsInWindow(bool isInWindow) 725 void RenderLayerCompositor::setIsInWindow(bool isInWindow)
725 { 726 {
726 if (!staleInCompositingMode()) 727 if (!staleInCompositingMode())
727 return; 728 return;
728 729
729 if (isInWindow) { 730 if (isInWindow) {
730 if (m_rootLayerAttachment != RootLayerUnattached) 731 if (m_rootLayerAttachment != RootLayerUnattached)
731 return; 732 return;
732 733
733 RootLayerAttachment attachment = m_renderView.frame()->isMainFrame() ? R ootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame; 734 RootLayerAttachment attachment = m_renderView.frame()->isLocalRoot() ? R ootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame;
734 attachRootLayer(attachment); 735 attachRootLayer(attachment);
735 } else { 736 } else {
736 if (m_rootLayerAttachment == RootLayerUnattached) 737 if (m_rootLayerAttachment == RootLayerUnattached)
737 return; 738 return;
738 739
739 detachRootLayer(); 740 detachRootLayer();
740 } 741 }
741 } 742 }
742 743
743 void RenderLayerCompositor::updateRootLayerPosition() 744 void RenderLayerCompositor::updateRootLayerPosition()
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 946
946 bool RenderLayerCompositor::requiresScrollCornerLayer() const 947 bool RenderLayerCompositor::requiresScrollCornerLayer() const
947 { 948 {
948 FrameView* view = m_renderView.frameView(); 949 FrameView* view = m_renderView.frameView();
949 return shouldCompositeOverflowControls(view) && view->isScrollCornerVisible( ); 950 return shouldCompositeOverflowControls(view) && view->isScrollCornerVisible( );
950 } 951 }
951 952
952 void RenderLayerCompositor::updateOverflowControlsLayers() 953 void RenderLayerCompositor::updateOverflowControlsLayers()
953 { 954 {
954 #if USE(RUBBER_BANDING) 955 #if USE(RUBBER_BANDING)
955 if (m_renderView.frame()->isMainFrame()) { 956 if (m_renderView.frame()->isLocalRoot()) {
956 if (!m_layerForOverhangShadow) { 957 if (!m_layerForOverhangShadow) {
957 m_layerForOverhangShadow = GraphicsLayer::create(graphicsLayerFactor y(), this); 958 m_layerForOverhangShadow = GraphicsLayer::create(graphicsLayerFactor y(), this);
958 OverscrollTheme::theme()->setUpOverhangShadowLayer(m_layerForOverhan gShadow.get()); 959 OverscrollTheme::theme()->setUpOverhangShadowLayer(m_layerForOverhan gShadow.get());
959 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha ngShadow.get(), m_rootContentLayer.get()); 960 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha ngShadow.get(), m_rootContentLayer.get());
960 m_scrollLayer->addChild(m_layerForOverhangShadow.get()); 961 m_scrollLayer->addChild(m_layerForOverhangShadow.get());
961 } 962 }
962 } else { 963 } else {
963 ASSERT(!m_layerForOverhangShadow); 964 ASSERT(!m_layerForOverhangShadow);
964 } 965 }
965 #endif 966 #endif
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 } else if (m_layerForScrollCorner) { 1012 } else if (m_layerForScrollCorner) {
1012 m_layerForScrollCorner->removeFromParent(); 1013 m_layerForScrollCorner->removeFromParent();
1013 m_layerForScrollCorner = nullptr; 1014 m_layerForScrollCorner = nullptr;
1014 } 1015 }
1015 1016
1016 m_renderView.frameView()->positionScrollbarLayers(); 1017 m_renderView.frameView()->positionScrollbarLayers();
1017 } 1018 }
1018 1019
1019 void RenderLayerCompositor::ensureRootLayer() 1020 void RenderLayerCompositor::ensureRootLayer()
1020 { 1021 {
1021 RootLayerAttachment expectedAttachment = m_renderView.frame()->isMainFrame() ? RootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame; 1022 RootLayerAttachment expectedAttachment = m_renderView.frame()->isLocalRoot() ? RootLayerAttachedViaChromeClient : RootLayerAttachedViaEnclosingFrame;
1022 if (expectedAttachment == m_rootLayerAttachment) 1023 if (expectedAttachment == m_rootLayerAttachment)
1023 return; 1024 return;
1024 1025
1025 if (!m_rootContentLayer) { 1026 if (!m_rootContentLayer) {
1026 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ; 1027 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ;
1027 IntRect overflowRect = m_renderView.pixelSnappedLayoutOverflowRect(); 1028 IntRect overflowRect = m_renderView.pixelSnappedLayoutOverflowRect();
1028 m_rootContentLayer->setSize(FloatSize(overflowRect.maxX(), overflowRect. maxY())); 1029 m_rootContentLayer->setSize(FloatSize(overflowRect.maxX(), overflowRect. maxY()));
1029 m_rootContentLayer->setPosition(FloatPoint()); 1030 m_rootContentLayer->setPosition(FloatPoint());
1030 m_rootContentLayer->setOwnerNodeId(InspectorNodeIds::idForNode(m_renderV iew.generatingNode())); 1031 m_rootContentLayer->setOwnerNodeId(InspectorNodeIds::idForNode(m_renderV iew.generatingNode()));
1031 1032
1032 // Need to clip to prevent transformed content showing outside this fram e 1033 // Need to clip to prevent transformed content showing outside this fram e
1033 m_rootContentLayer->setMasksToBounds(true); 1034 m_rootContentLayer->setMasksToBounds(true);
1034 } 1035 }
1035 1036
1036 if (!m_overflowControlsHostLayer) { 1037 if (!m_overflowControlsHostLayer) {
1037 ASSERT(!m_scrollLayer); 1038 ASSERT(!m_scrollLayer);
1038 ASSERT(!m_containerLayer); 1039 ASSERT(!m_containerLayer);
1039 1040
1040 // Create a layer to host the clipping layer and the overflow controls l ayers. 1041 // Create a layer to host the clipping layer and the overflow controls l ayers.
1041 m_overflowControlsHostLayer = GraphicsLayer::create(graphicsLayerFactory (), this); 1042 m_overflowControlsHostLayer = GraphicsLayer::create(graphicsLayerFactory (), this);
1042 1043
1043 // Create a clipping layer if this is an iframe or settings require to c lip. 1044 // Create a clipping layer if this is an iframe or settings require to c lip.
1044 m_containerLayer = GraphicsLayer::create(graphicsLayerFactory(), this); 1045 m_containerLayer = GraphicsLayer::create(graphicsLayerFactory(), this);
1045 bool containerMasksToBounds = !m_renderView.frame()->isMainFrame(); 1046 bool containerMasksToBounds = !m_renderView.frame()->isLocalRoot();
1046 if (Settings* settings = m_renderView.document().settings()) { 1047 if (Settings* settings = m_renderView.document().settings()) {
1047 if (settings->mainFrameClipsContent()) 1048 if (settings->mainFrameClipsContent())
1048 containerMasksToBounds = true; 1049 containerMasksToBounds = true;
1049 } 1050 }
1050 m_containerLayer->setMasksToBounds(containerMasksToBounds); 1051 m_containerLayer->setMasksToBounds(containerMasksToBounds);
1051 1052
1052 m_scrollLayer = GraphicsLayer::create(graphicsLayerFactory(), this); 1053 m_scrollLayer = GraphicsLayer::create(graphicsLayerFactory(), this);
1053 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor()) 1054 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
1054 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(m_sc rollLayer.get(), true); 1055 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(m_sc rollLayer.get(), true);
1055 1056
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 } else if (graphicsLayer == m_scrollLayer.get()) { 1233 } else if (graphicsLayer == m_scrollLayer.get()) {
1233 name = "LocalFrame Scrolling Layer"; 1234 name = "LocalFrame Scrolling Layer";
1234 } else { 1235 } else {
1235 ASSERT_NOT_REACHED(); 1236 ASSERT_NOT_REACHED();
1236 } 1237 }
1237 1238
1238 return name; 1239 return name;
1239 } 1240 }
1240 1241
1241 } // namespace WebCore 1242 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/page/Page.cpp ('k') | Source/modules/geolocation/GeolocationController.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698