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

Side by Side Diff: cc/CCLayerTreeHostImpl.cpp

Issue 10940002: Add wrapper container for a vector of OwnPtr<T> (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: converts the rest of the Vector<OwnPtr<T>>s Created 8 years, 3 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
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 "config.h" 5 #include "config.h"
6 6
7 #include "CCLayerTreeHostImpl.h" 7 #include "CCLayerTreeHostImpl.h"
8 8
9 #include "CCAppendQuadsData.h" 9 #include "CCAppendQuadsData.h"
10 #include "CCDamageTracker.h" 10 #include "CCDamageTracker.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 // We animated if we either ticked a running animation, or started a new ani mation. 348 // We animated if we either ticked a running animation, or started a new ani mation.
349 if (hadActiveAnimation || startedAnimation) 349 if (hadActiveAnimation || startedAnimation)
350 didAnimate = true; 350 didAnimate = true;
351 351
352 // If the current controller still has an active animation, we must continue animating layers. 352 // If the current controller still has an active animation, we must continue animating layers.
353 if (currentController->hasActiveAnimation()) 353 if (currentController->hasActiveAnimation())
354 subtreeNeedsAnimateLayers = true; 354 subtreeNeedsAnimateLayers = true;
355 355
356 for (size_t i = 0; i < current->children().size(); ++i) { 356 for (size_t i = 0; i < current->children().size(); ++i) {
357 bool childNeedsAnimateLayers = false; 357 bool childNeedsAnimateLayers = false;
358 animateLayersRecursive(current->children()[i].get(), monotonicTime, wall ClockTime, events, didAnimate, childNeedsAnimateLayers); 358 animateLayersRecursive(current->children()[i], monotonicTime, wallClockT ime, events, didAnimate, childNeedsAnimateLayers);
359 if (childNeedsAnimateLayers) 359 if (childNeedsAnimateLayers)
360 subtreeNeedsAnimateLayers = true; 360 subtreeNeedsAnimateLayers = true;
361 } 361 }
362 362
363 needsAnimateLayers = subtreeNeedsAnimateLayers; 363 needsAnimateLayers = subtreeNeedsAnimateLayers;
364 } 364 }
365 365
366 void CCLayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) 366 void CCLayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled)
367 { 367 {
368 // Lazily create the timeSource adapter so that we can vary the interval for testing. 368 // Lazily create the timeSource adapter so that we can vary the interval for testing.
(...skipping 28 matching lines...) Expand all
397 if (removeIndex == notFound) 397 if (removeIndex == notFound)
398 return; 398 return;
399 399
400 const CCRenderPass* removedPass = frame.renderPasses[removeIndex]; 400 const CCRenderPass* removedPass = frame.renderPasses[removeIndex];
401 frame.renderPasses.remove(removeIndex); 401 frame.renderPasses.remove(removeIndex);
402 402
403 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 403 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
404 const CCQuadList& quadList = removedPass->quadList(); 404 const CCQuadList& quadList = removedPass->quadList();
405 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin(); 405 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin();
406 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 406 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
407 CCDrawQuad* currentQuad = (*quadListIterator).get(); 407 CCDrawQuad* currentQuad = (*quadListIterator);
408 if (currentQuad->material() != CCDrawQuad::RenderPass) 408 if (currentQuad->material() != CCDrawQuad::RenderPass)
409 continue; 409 continue;
410 410
411 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId(); 411 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId();
412 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); 412 removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
413 } 413 }
414 } 414 }
415 415
416 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const 416 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const
417 { 417 {
418 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId()); 418 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId());
419 } 419 }
420 420
421 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const 421 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const
422 { 422 {
423 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me); 423 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me);
424 size_t passIndex = frame.renderPasses.find(renderPass); 424 size_t passIndex = frame.renderPasses.find(renderPass);
425 425
426 bool renderPassAlreadyRemoved = passIndex == notFound; 426 bool renderPassAlreadyRemoved = passIndex == notFound;
427 if (renderPassAlreadyRemoved) 427 if (renderPassAlreadyRemoved)
428 return false; 428 return false;
429 429
430 // If any quad or RenderPass draws into this RenderPass, then keep it. 430 // If any quad or RenderPass draws into this RenderPass, then keep it.
431 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList(); 431 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList();
432 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 432 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
433 CCDrawQuad* currentQuad = quadListIterator->get(); 433 CCDrawQuad* currentQuad = *quadListIterator;
434 434
435 if (currentQuad->material() != CCDrawQuad::RenderPass) 435 if (currentQuad->material() != CCDrawQuad::RenderPass)
436 return false; 436 return false;
437 437
438 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame); 438 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame);
439 if (frame.renderPasses.contains(contributingPass)) 439 if (frame.renderPasses.contains(contributingPass))
440 return false; 440 return false;
441 } 441 }
442 return true; 442 return true;
443 } 443 }
444 444
445 // Defined for linking tests. 445 // Defined for linking tests.
446 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&); 446 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&);
447 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 447 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
448 448
449 // static 449 // static
450 template<typename RenderPassCuller> 450 template<typename RenderPassCuller>
451 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& frame) 451 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& frame)
452 { 452 {
453 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { 453 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) {
454 const CCRenderPass* currentPass = frame.renderPasses[it]; 454 const CCRenderPass* currentPass = frame.renderPasses[it];
455 const CCQuadList& quadList = currentPass->quadList(); 455 const CCQuadList& quadList = currentPass->quadList();
456 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF rontBegin(); 456 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF rontBegin();
457 457
458 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) { 458 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) {
459 CCDrawQuad* currentQuad = quadListIterator->get(); 459 CCDrawQuad* currentQuad = *quadListIterator;
460 460
461 if (currentQuad->material() != CCDrawQuad::RenderPass) 461 if (currentQuad->material() != CCDrawQuad::RenderPass)
462 continue; 462 continue;
463 463
464 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ uad*>(currentQuad); 464 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ uad*>(currentQuad);
465 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) 465 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame))
466 continue; 466 continue;
467 467
468 // We are changing the vector in the middle of iteration. Because we 468 // We are changing the vector in the middle of iteration. Because we
469 // delete render passes that draw into the current pass, we are 469 // delete render passes that draw into the current pass, we are
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 601
602 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) 602 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer)
603 { 603 {
604 if (!layer) 604 if (!layer)
605 return 0; 605 return 0;
606 606
607 if (layer->scrollable()) 607 if (layer->scrollable())
608 return layer; 608 return layer;
609 609
610 for (size_t i = 0; i < layer->children().size(); ++i) { 610 for (size_t i = 0; i < layer->children().size(); ++i) {
611 CCLayerImpl* found = findRootScrollLayer(layer->children()[i].get()); 611 CCLayerImpl* found = findRootScrollLayer(layer->children()[i]);
612 if (found) 612 if (found)
613 return found; 613 return found;
614 } 614 }
615 615
616 return 0; 616 return 0;
617 } 617 }
618 618
619 // Content layers can be either directly scrollable or contained in an outer 619 // Content layers can be either directly scrollable or contained in an outer
620 // scrolling layer which applies the scroll transform. Given a content layer, 620 // scrolling layer which applies the scroll transform. Given a content layer,
621 // this function returns the associated scroll layer if any. 621 // this function returns the associated scroll layer if any.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 return; 740 return;
741 741
742 if (layerImpl->scrollable()) { 742 if (layerImpl->scrollable()) {
743 // We need to convert impl-side scroll deltas to pageScale space. 743 // We need to convert impl-side scroll deltas to pageScale space.
744 FloatSize scrollDelta = layerImpl->scrollDelta(); 744 FloatSize scrollDelta = layerImpl->scrollDelta();
745 scrollDelta.scale(pageScaleChange); 745 scrollDelta.scale(pageScaleChange);
746 layerImpl->setScrollDelta(scrollDelta); 746 layerImpl->setScrollDelta(scrollDelta);
747 } 747 }
748 748
749 for (size_t i = 0; i < layerImpl->children().size(); ++i) 749 for (size_t i = 0; i < layerImpl->children().size(); ++i)
750 adjustScrollsForPageScaleChange(layerImpl->children()[i].get(), pageScal eChange); 750 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e);
751 } 751 }
752 752
753 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) 753 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
754 { 754 {
755 if (deviceScaleFactor == m_deviceScaleFactor) 755 if (deviceScaleFactor == m_deviceScaleFactor)
756 return; 756 return;
757 m_deviceScaleFactor = deviceScaleFactor; 757 m_deviceScaleFactor = deviceScaleFactor;
758 758
759 updateMaxScrollPosition(); 759 updateMaxScrollPosition();
760 } 760 }
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 if (!layerImpl->scrollDelta().isZero()) { 1111 if (!layerImpl->scrollDelta().isZero()) {
1112 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta()); 1112 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta());
1113 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; 1113 CCLayerTreeHostCommon::ScrollUpdateInfo scroll;
1114 scroll.layerId = layerImpl->id(); 1114 scroll.layerId = layerImpl->id();
1115 scroll.scrollDelta = scrollDelta; 1115 scroll.scrollDelta = scrollDelta;
1116 scrollInfo->scrolls.append(scroll); 1116 scrollInfo->scrolls.append(scroll);
1117 layerImpl->setSentScrollDelta(scrollDelta); 1117 layerImpl->setSentScrollDelta(scrollDelta);
1118 } 1118 }
1119 1119
1120 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1120 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1121 collectScrollDeltas(scrollInfo, layerImpl->children()[i].get()); 1121 collectScrollDeltas(scrollInfo, layerImpl->children()[i]);
1122 } 1122 }
1123 1123
1124 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() 1124 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas()
1125 { 1125 {
1126 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ; 1126 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ;
1127 1127
1128 if (m_pinchGestureActive || m_pageScaleAnimation) { 1128 if (m_pinchGestureActive || m_pageScaleAnimation) {
1129 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1; 1129 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1;
1130 if (m_pinchGestureActive) 1130 if (m_pinchGestureActive)
1131 computePinchZoomDeltas(scrollInfo.get()); 1131 computePinchZoomDeltas(scrollInfo.get());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 1196
1197 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) 1197 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current)
1198 { 1198 {
1199 ASSERT(current); 1199 ASSERT(current);
1200 current->didLoseContext(); 1200 current->didLoseContext();
1201 if (current->maskLayer()) 1201 if (current->maskLayer())
1202 sendDidLoseContextRecursive(current->maskLayer()); 1202 sendDidLoseContextRecursive(current->maskLayer());
1203 if (current->replicaLayer()) 1203 if (current->replicaLayer())
1204 sendDidLoseContextRecursive(current->replicaLayer()); 1204 sendDidLoseContextRecursive(current->replicaLayer());
1205 for (size_t i = 0; i < current->children().size(); ++i) 1205 for (size_t i = 0; i < current->children().size(); ++i)
1206 sendDidLoseContextRecursive(current->children()[i].get()); 1206 sendDidLoseContextRecursive(current->children()[i]);
1207 } 1207 }
1208 1208
1209 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) 1209 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current)
1210 { 1210 {
1211 ASSERT(current); 1211 ASSERT(current);
1212 for (size_t i = 0; i < current->children().size(); ++i) 1212 for (size_t i = 0; i < current->children().size(); ++i)
1213 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i].get()); 1213 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]);
1214 current->clearRenderSurface(); 1214 current->clearRenderSurface();
1215 } 1215 }
1216 1216
1217 void CCLayerTreeHostImpl::clearRenderSurfaces() 1217 void CCLayerTreeHostImpl::clearRenderSurfaces()
1218 { 1218 {
1219 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); 1219 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get());
1220 m_renderSurfaceLayerList.clear(); 1220 m_renderSurfaceLayerList.clear();
1221 } 1221 }
1222 1222
1223 std::string CCLayerTreeHostImpl::layerTreeAsText() const 1223 std::string CCLayerTreeHostImpl::layerTreeAsText() const
1224 { 1224 {
1225 std::string str; 1225 std::string str;
1226 if (m_rootLayerImpl) { 1226 if (m_rootLayerImpl) {
1227 str = m_rootLayerImpl->layerTreeAsText(); 1227 str = m_rootLayerImpl->layerTreeAsText();
1228 str += "RenderSurfaces:\n"; 1228 str += "RenderSurfaces:\n";
1229 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get()); 1229 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get());
1230 } 1230 }
1231 return str; 1231 return str;
1232 } 1232 }
1233 1233
1234 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const CCLayerImpl* layer) const 1234 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const CCLayerImpl* layer) const
1235 { 1235 {
1236 if (layer->renderSurface()) 1236 if (layer->renderSurface())
1237 layer->renderSurface()->dumpSurface(str, indent); 1237 layer->renderSurface()->dumpSurface(str, indent);
1238 1238
1239 for (size_t i = 0; i < layer->children().size(); ++i) 1239 for (size_t i = 0; i < layer->children().size(); ++i)
1240 dumpRenderSurfaces(str, indent, layer->children()[i].get()); 1240 dumpRenderSurfaces(str, indent, layer->children()[i]);
1241 } 1241 }
1242 1242
1243 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const 1243 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const
1244 { 1244 {
1245 return fpsCounter()->currentFrameNumber(); 1245 return fpsCounter()->currentFrameNumber();
1246 } 1246 }
1247 1247
1248 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const 1248 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const
1249 { 1249 {
1250 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber(); 1250 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber();
1251 stats.droppedFrameCount = fpsCounter()->droppedFrameCount(); 1251 stats.droppedFrameCount = fpsCounter()->droppedFrameCount();
1252 } 1252 }
1253 1253
1254 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime) 1254 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime)
1255 { 1255 {
1256 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime); 1256 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime);
1257 } 1257 }
1258 1258
1259 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double monotonicTime) 1259 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double monotonicTime)
1260 { 1260 {
1261 if (!layer) 1261 if (!layer)
1262 return; 1262 return;
1263 1263
1264 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController(); 1264 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController();
1265 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1265 if (scrollbarController && scrollbarController->animate(monotonicTime))
1266 m_client->setNeedsRedrawOnImplThread(); 1266 m_client->setNeedsRedrawOnImplThread();
1267 1267
1268 for (size_t i = 0; i < layer->children().size(); ++i) 1268 for (size_t i = 0; i < layer->children().size(); ++i)
1269 animateScrollbarsRecursive(layer->children()[i].get(), monotonicTime); 1269 animateScrollbarsRecursive(layer->children()[i], monotonicTime);
1270 } 1270 }
1271 1271
1272 } // namespace cc 1272 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698