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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11596005: Revert 173406 - Crashes on Win & Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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 | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layer_tree_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 // damage rect. The root damage rect is then used to scissor each surface. 376 // damage rect. The root damage rect is then used to scissor each surface.
377 377
378 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) { 378 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
379 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; 379 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
380 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface(); 380 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface();
381 DCHECK(renderSurface); 381 DCHECK(renderSurface);
382 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get()); 382 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get());
383 } 383 }
384 } 384 }
385 385
386 void LayerTreeHostImpl::updateRootScrollLayerImplTransform()
387 {
388 if (rootScrollLayer()) {
389 rootScrollLayer()->setImplTransform(implTransform());
390 }
391 }
392
386 void LayerTreeHostImpl::updateDrawProperties() 393 void LayerTreeHostImpl::updateDrawProperties()
387 { 394 {
388 if (!needsUpdateDrawProperties()) 395 if (!needsUpdateDrawProperties())
389 return; 396 return;
390 397
391 m_renderSurfaceLayerList.clear(); 398 m_renderSurfaceLayerList.clear();
392 m_needsUpdateDrawProperties = false; 399 m_needsUpdateDrawProperties = false;
393 400
394 if (!rootLayer()) 401 if (!rootLayer())
395 return; 402 return;
396 403
397 if (!m_renderer) // For maxTextureSize. 404 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList);
398 return; 405 }
399 406
400 if (rootScrollLayer()) 407 void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface LayerList)
401 rootScrollLayer()->setImplTransform(implTransform()); 408 {
409 DCHECK(renderSurfaceLayerList.empty());
410 DCHECK(rootLayer());
411 DCHECK(m_renderer); // For maxTextureSize.
412 {
413 updateRootScrollLayerImplTransform();
402 414
403 {
404 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 415 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
405 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 416 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
406 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList); 417 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, renderSurfaceLayerList);
407 } 418 }
408 } 419 }
409 420
410 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 421 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
411 { 422 {
412 RenderPass* pass = renderPass.get(); 423 RenderPass* pass = renderPass.get();
413 renderPasses.push_back(pass); 424 renderPasses.push_back(pass);
414 renderPassesById.set(pass->id, renderPass.Pass()); 425 renderPassesById.set(pass->id, renderPass.Pass());
415 } 426 }
416 427
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 508 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
498 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 509 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
499 } 510 }
500 } 511 }
501 512
502 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 513 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
503 { 514 {
504 DCHECK(frame.renderPasses.empty()); 515 DCHECK(frame.renderPasses.empty());
505 516
506 updateDrawProperties(); 517 updateDrawProperties();
507 if (!canDraw())
508 return false;
509
510 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList); 518 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
511 519
512 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 520 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
513 521
514 // Create the render passes in dependency order. 522 // Create the render passes in dependency order.
515 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) { 523 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) {
516 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex]; 524 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex];
517 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); 525 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame);
518 } 526 }
519 527
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame); 770 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame);
763 it = frame.renderPasses.size() - positionFromEnd; 771 it = frame.renderPasses.size() - positionFromEnd;
764 DCHECK(it >= 0); 772 DCHECK(it >= 0);
765 } 773 }
766 } 774 }
767 } 775 }
768 776
769 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame) 777 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame)
770 { 778 {
771 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw"); 779 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw");
780 DCHECK(canDraw());
772 781
773 if (m_tileManager) 782 if (m_tileManager)
774 m_tileManager->CheckForCompletedSetPixels(); 783 m_tileManager->CheckForCompletedSetPixels();
775 784
776 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList; 785 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList;
777 frame.renderPasses.clear(); 786 frame.renderPasses.clear();
778 frame.renderPassesById.clear(); 787 frame.renderPassesById.clear();
779 frame.willDrawLayers.clear(); 788 frame.willDrawLayers.clear();
780 789
781 if (!calculateRenderPasses(frame)) 790 if (!calculateRenderPasses(frame))
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll)); 1199 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll));
1191 } 1200 }
1192 1201
1193 void LayerTreeHostImpl::setNeedsRedraw() 1202 void LayerTreeHostImpl::setNeedsRedraw()
1194 { 1203 {
1195 m_client->setNeedsRedrawOnImplThread(); 1204 m_client->setNeedsRedrawOnImplThread();
1196 } 1205 }
1197 1206
1198 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1207 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1199 { 1208 {
1209 // TODO(enne): See http://crbug.com/164949. This function should really
1210 // just call updateDrawProperties(), but that breaks a number of
1211 // impl transform tests that don't expect the tree to be updated.
1212 if (!rootLayer())
1213 return false;
1214 if (!m_renderer)
1215 return false;
1216
1217 // We need both a non-empty render surface layer list and a root render
1218 // surface to be able to iterate over the visible layers.
1219 if (m_renderSurfaceLayerList.size() && rootLayer()->renderSurface())
1220 return true;
1221
1222 // If we are called after setRootLayer() but before prepareToDraw(), we need
1223 // to recalculate the visible layers. This prevents being unable to scroll
1224 // during part of a commit.
1225 setNeedsUpdateDrawProperties();
1200 updateDrawProperties(); 1226 updateDrawProperties();
1227
1201 return m_renderSurfaceLayerList.size(); 1228 return m_renderSurfaceLayerList.size();
1202 } 1229 }
1203 1230
1204 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1231 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1205 { 1232 {
1206 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1233 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1207 1234
1208 DCHECK(!currentlyScrollingLayer()); 1235 DCHECK(!currentlyScrollingLayer());
1209 clearCurrentlyScrollingLayer(); 1236 clearCurrentlyScrollingLayer();
1210 1237
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1736 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1710 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1737 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1711 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1738 if (scrollbarController && scrollbarController->animate(monotonicTime))
1712 m_client->setNeedsRedrawOnImplThread(); 1739 m_client->setNeedsRedrawOnImplThread();
1713 1740
1714 for (size_t i = 0; i < layer->children().size(); ++i) 1741 for (size_t i = 0; i < layer->children().size(); ++i)
1715 animateScrollbarsRecursive(layer->children()[i], time); 1742 animateScrollbarsRecursive(layer->children()[i], time);
1716 } 1743 }
1717 1744
1718 } // namespace cc 1745 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698