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

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: nits 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 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll)); 1174 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll));
1184 } 1175 }
1185 1176
1186 void LayerTreeHostImpl::setNeedsRedraw() 1177 void LayerTreeHostImpl::setNeedsRedraw()
1187 { 1178 {
1188 m_client->setNeedsRedrawOnImplThread(); 1179 m_client->setNeedsRedrawOnImplThread();
1189 } 1180 }
1190 1181
1191 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1182 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1192 { 1183 {
1193 // TODO(enne): See http://crbug.com/164949. This function should really
1194 // just call updateDrawProperties(), but that breaks a number of
1195 // impl transform tests that don't expect the tree to be updated.
1196 if (!rootLayer())
1197 return false;
1198 if (!m_renderer)
1199 return false;
1200
1201 // 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.
1203 if (m_renderSurfaceLayerList.size() && rootLayer()->renderSurface())
1204 return true;
1205
1206 // If we are called after setRootLayer() but before prepareToDraw(), we need
1207 // to recalculate the visible layers. This prevents being unable to scroll
1208 // during part of a commit.
1209 setNeedsUpdateDrawProperties();
1210 updateDrawProperties(); 1184 updateDrawProperties();
1211
1212 return m_renderSurfaceLayerList.size(); 1185 return m_renderSurfaceLayerList.size();
1213 } 1186 }
1214 1187
1215 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1188 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1216 { 1189 {
1217 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1190 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1218 1191
1219 DCHECK(!currentlyScrollingLayer()); 1192 DCHECK(!currentlyScrollingLayer());
1220 clearCurrentlyScrollingLayer(); 1193 clearCurrentlyScrollingLayer();
1221 1194
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1720 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1693 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1721 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1694 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1722 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1695 if (scrollbarController && scrollbarController->animate(monotonicTime))
1723 m_client->setNeedsRedrawOnImplThread(); 1696 m_client->setNeedsRedrawOnImplThread();
1724 1697
1725 for (size_t i = 0; i < layer->children().size(); ++i) 1698 for (size_t i = 0; i < layer->children().size(); ++i)
1726 animateScrollbarsRecursive(layer->children()[i], time); 1699 animateScrollbarsRecursive(layer->children()[i], time);
1727 } 1700 }
1728 1701
1729 } // namespace cc 1702 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698