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

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: rebase yet again ughhh 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
393 void LayerTreeHostImpl::updateDrawProperties() 386 void LayerTreeHostImpl::updateDrawProperties()
394 { 387 {
395 if (!needsUpdateDrawProperties()) 388 if (!needsUpdateDrawProperties())
396 return; 389 return;
397 390
398 m_renderSurfaceLayerList.clear(); 391 m_renderSurfaceLayerList.clear();
399 m_needsUpdateDrawProperties = false; 392 m_needsUpdateDrawProperties = false;
400 393
401 if (!rootLayer()) 394 if (!rootLayer())
402 return; 395 return;
403 396
404 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); 397 if (!m_renderer) // For maxTextureSize.
405 } 398 return;
406 399
407 void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface LayerList) 400 if (rootScrollLayer())
408 { 401 rootScrollLayer()->setImplTransform(implTransform());
409 DCHECK(renderSurfaceLayerList.empty()); 402
410 DCHECK(rootLayer());
411 DCHECK(m_renderer); // For maxTextureSize.
412 { 403 {
413 updateRootScrollLayerImplTransform();
414
415 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 404 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
416 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 405 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
417 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, renderSurfaceLayerList); 406 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList);
418 } 407 }
419 } 408 }
420 409
421 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 410 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
422 { 411 {
423 RenderPass* pass = renderPass.get(); 412 RenderPass* pass = renderPass.get();
424 renderPasses.push_back(pass); 413 renderPasses.push_back(pass);
425 renderPassesById.set(pass->id, renderPass.Pass()); 414 renderPassesById.set(pass->id, renderPass.Pass());
426 } 415 }
427 416
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 497 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
509 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 498 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
510 } 499 }
511 } 500 }
512 501
513 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 502 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
514 { 503 {
515 DCHECK(frame.renderPasses.empty()); 504 DCHECK(frame.renderPasses.empty());
516 505
517 updateDrawProperties(); 506 updateDrawProperties();
507 if (!canDraw())
508 return false;
509
518 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList); 510 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
519 511
520 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 512 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
521 513
522 // Create the render passes in dependency order. 514 // Create the render passes in dependency order.
523 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) { 515 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) {
524 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex]; 516 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI ndex];
525 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); 517 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame);
526 } 518 }
527 519
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame); 762 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame);
771 it = frame.renderPasses.size() - positionFromEnd; 763 it = frame.renderPasses.size() - positionFromEnd;
772 DCHECK(it >= 0); 764 DCHECK(it >= 0);
773 } 765 }
774 } 766 }
775 } 767 }
776 768
777 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame) 769 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame)
778 { 770 {
779 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw"); 771 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw");
780 DCHECK(canDraw());
781 772
782 if (m_tileManager) 773 if (m_tileManager)
783 m_tileManager->CheckForCompletedSetPixels(); 774 m_tileManager->CheckForCompletedSetPixels();
784 775
785 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList; 776 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList;
786 frame.renderPasses.clear(); 777 frame.renderPasses.clear();
787 frame.renderPassesById.clear(); 778 frame.renderPassesById.clear();
788 frame.willDrawLayers.clear(); 779 frame.willDrawLayers.clear();
789 780
790 if (!calculateRenderPasses(frame)) 781 if (!calculateRenderPasses(frame))
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll)); 1190 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll));
1200 } 1191 }
1201 1192
1202 void LayerTreeHostImpl::setNeedsRedraw() 1193 void LayerTreeHostImpl::setNeedsRedraw()
1203 { 1194 {
1204 m_client->setNeedsRedrawOnImplThread(); 1195 m_client->setNeedsRedrawOnImplThread();
1205 } 1196 }
1206 1197
1207 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1198 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1208 { 1199 {
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();
1226 updateDrawProperties(); 1200 updateDrawProperties();
1227
1228 return m_renderSurfaceLayerList.size(); 1201 return m_renderSurfaceLayerList.size();
1229 } 1202 }
1230 1203
1231 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1204 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1232 { 1205 {
1233 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1206 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1234 1207
1235 DCHECK(!currentlyScrollingLayer()); 1208 DCHECK(!currentlyScrollingLayer());
1236 clearCurrentlyScrollingLayer(); 1209 clearCurrentlyScrollingLayer();
1237 1210
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1709 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1737 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1710 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1738 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1711 if (scrollbarController && scrollbarController->animate(monotonicTime))
1739 m_client->setNeedsRedrawOnImplThread(); 1712 m_client->setNeedsRedrawOnImplThread();
1740 1713
1741 for (size_t i = 0; i < layer->children().size(); ++i) 1714 for (size_t i = 0; i < layer->children().size(); ++i)
1742 animateScrollbarsRecursive(layer->children()[i], time); 1715 animateScrollbarsRecursive(layer->children()[i], time);
1743 } 1716 }
1744 1717
1745 } // namespace cc 1718 } // 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