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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11529006: [cc] Fold more update calls into updateDrawProperties (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: works, but funky 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
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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 // damage rect. The root damage rect is then used to scissor each surface. 373 // damage rect. The root damage rect is then used to scissor each surface.
374 374
375 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) { 375 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
376 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; 376 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
377 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface(); 377 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface();
378 DCHECK(renderSurface); 378 DCHECK(renderSurface);
379 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get()); 379 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get());
380 } 380 }
381 } 381 }
382 382
383 void LayerTreeHostImpl::updateRootScrollLayerImplTransform()
384 {
385 if (rootScrollLayer()) {
386 rootScrollLayer()->setImplTransform(implTransform());
387 }
388 }
389
390 void LayerTreeHostImpl::updateDrawProperties() 383 void LayerTreeHostImpl::updateDrawProperties()
391 { 384 {
392 if (!needsUpdateDrawProperties()) 385 if (!needsUpdateDrawProperties())
393 return; 386 return;
394 387
395 m_renderSurfaceLayerList.clear(); 388 m_renderSurfaceLayerList.clear();
396 m_needsUpdateDrawProperties = false; 389 m_needsUpdateDrawProperties = false;
397 390
398 if (!rootLayer()) 391 if (!rootLayer())
399 return; 392 return;
400 393
401 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); 394 if (!m_renderer) // For maxTextureSize.
402 } 395 return;
403 396
404 void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface LayerList) 397 if (rootScrollLayer())
405 { 398 rootScrollLayer()->setImplTransform(implTransform());
406 DCHECK(renderSurfaceLayerList.empty()); 399
407 DCHECK(rootLayer());
408 DCHECK(m_renderer); // For maxTextureSize.
409 { 400 {
410 updateRootScrollLayerImplTransform(); 401 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
411 402 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
412 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 403 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewportSi ze(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureSiz e, m_renderSurfaceLayerList);
413 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
414 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, renderSurfaceLayerList);
415 } 404 }
416 } 405 }
417 406
418 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 407 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
419 { 408 {
420 RenderPass* pass = renderPass.get(); 409 RenderPass* pass = renderPass.get();
421 renderPasses.push_back(pass); 410 renderPasses.push_back(pass);
422 renderPassesById.set(pass->id, renderPass.Pass()); 411 renderPassesById.set(pass->id, renderPass.Pass());
423 } 412 }
424 413
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 494 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
506 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 495 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
507 } 496 }
508 } 497 }
509 498
510 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 499 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
511 { 500 {
512 DCHECK(frame.renderPasses.empty()); 501 DCHECK(frame.renderPasses.empty());
513 502
514 updateDrawProperties(); 503 updateDrawProperties();
504 if (!canDraw())
505 return false;
506
515 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList); 507 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
516 508
517 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 509 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
518 510
519 // Create the render passes in dependency order. 511 // Create the render passes in dependency order.
520 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) { 512 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) {
521 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex]; 513 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex];
522 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); 514 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame);
523 } 515 }
524 516
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame); 751 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame);
760 it = frame.renderPasses.size() - positionFromEnd; 752 it = frame.renderPasses.size() - positionFromEnd;
761 DCHECK(it >= 0); 753 DCHECK(it >= 0);
762 } 754 }
763 } 755 }
764 } 756 }
765 757
766 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame) 758 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame)
767 { 759 {
768 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw"); 760 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw");
769 DCHECK(canDraw());
770 761
771 if (m_tileManager) 762 if (m_tileManager)
772 m_tileManager->CheckForCompletedSetPixels(); 763 m_tileManager->CheckForCompletedSetPixels();
773 764
774 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList; 765 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList;
775 frame.renderPasses.clear(); 766 frame.renderPasses.clear();
776 frame.renderPassesById.clear(); 767 frame.renderPassesById.clear();
777 frame.willDrawLayers.clear(); 768 frame.willDrawLayers.clear();
778 769
779 if (!calculateRenderPasses(frame)) 770 if (!calculateRenderPasses(frame))
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 rootLayer()->resetAllChangeTrackingForSubtree(); 887 rootLayer()->resetAllChangeTrackingForSubtree();
897 } 888 }
898 889
899 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) 890 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame)
900 { 891 {
901 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) 892 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i)
902 frame.willDrawLayers[i]->didDraw(m_resourceProvider.get()); 893 frame.willDrawLayers[i]->didDraw(m_resourceProvider.get());
903 894
904 // Once all layers have been drawn, pending texture uploads should no 895 // Once all layers have been drawn, pending texture uploads should no
905 // longer block future uploads. 896 // longer block future uploads.
906 m_resourceProvider->markPendingUploadsAsNonBlocking(); 897 if (m_resourceProvider)
898 m_resourceProvider->markPendingUploadsAsNonBlocking();
907 } 899 }
908 900
909 void LayerTreeHostImpl::finishAllRendering() 901 void LayerTreeHostImpl::finishAllRendering()
910 { 902 {
911 if (m_renderer) 903 if (m_renderer)
912 m_renderer->finish(); 904 m_renderer->finish();
913 } 905 }
914 906
915 bool LayerTreeHostImpl::isContextLost() 907 bool LayerTreeHostImpl::isContextLost()
916 { 908 {
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 void LayerTreeHostImpl::setNeedsRedraw() 1178 void LayerTreeHostImpl::setNeedsRedraw()
1187 { 1179 {
1188 m_client->setNeedsRedrawOnImplThread(); 1180 m_client->setNeedsRedrawOnImplThread();
1189 } 1181 }
1190 1182
1191 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1183 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1192 { 1184 {
1193 // TODO(enne): See http://crbug.com/164949. This function should really 1185 // TODO(enne): See http://crbug.com/164949. This function should really
1194 // just call updateDrawProperties(), but that breaks a number of 1186 // just call updateDrawProperties(), but that breaks a number of
1195 // impl transform tests that don't expect the tree to be updated. 1187 // impl transform tests that don't expect the tree to be updated.
1196 if (!rootLayer()) 1188
1197 return false; 1189 // TODO(nduca): Try to delete this before landing.
enne (OOO) 2012/12/12 18:44:24 I just checked. This function can just call updat
1198 if (!m_renderer)
1199 return false;
1200 1190
1201 // We need both a non-empty render surface layer list and a root render 1191 // We need both a non-empty render surface layer list and a root render
1202 // surface to be able to iterate over the visible layers. 1192 // surface to be able to iterate over the visible layers.
1203 if (m_renderSurfaceLayerList.size() && rootLayer()->renderSurface()) 1193 if (m_renderSurfaceLayerList.size() && rootLayer()->renderSurface())
1204 return true; 1194 return true;
1205 1195
1206 // If we are called after setRootLayer() but before prepareToDraw(), we need 1196 // If we are called after setRootLayer() but before prepareToDraw(), we need
1207 // to recalculate the visible layers. This prevents being unable to scroll 1197 // to recalculate the visible layers. This prevents being unable to scroll
1208 // during part of a commit. 1198 // during part of a commit.
1209 setNeedsUpdateDrawProperties(); 1199 setNeedsUpdateDrawProperties();
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
1720 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1710 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1721 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1711 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1722 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1712 if (scrollbarController && scrollbarController->animate(monotonicTime))
1723 m_client->setNeedsRedrawOnImplThread(); 1713 m_client->setNeedsRedrawOnImplThread();
1724 1714
1725 for (size_t i = 0; i < layer->children().size(); ++i) 1715 for (size_t i = 0; i < layer->children().size(); ++i)
1726 animateScrollbarsRecursive(layer->children()[i], time); 1716 animateScrollbarsRecursive(layer->children()[i], time);
1727 } 1717 }
1728 1718
1729 } // namespace cc 1719 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698