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

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: 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
« no previous file with comments | « cc/CCLayerTreeHostCommonTest.cpp ('k') | cc/CCLayerTreeHostImplTest.cpp » ('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 "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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 if (removeIndex == notFound) 401 if (removeIndex == notFound)
402 return; 402 return;
403 403
404 const CCRenderPass* removedPass = frame.renderPasses[removeIndex]; 404 const CCRenderPass* removedPass = frame.renderPasses[removeIndex];
405 frame.renderPasses.remove(removeIndex); 405 frame.renderPasses.remove(removeIndex);
406 406
407 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 407 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
408 const CCQuadList& quadList = removedPass->quadList(); 408 const CCQuadList& quadList = removedPass->quadList();
409 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin(); 409 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin();
410 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 410 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
411 CCDrawQuad* currentQuad = (*quadListIterator).get(); 411 CCDrawQuad* currentQuad = (*quadListIterator);
412 if (currentQuad->material() != CCDrawQuad::RenderPass) 412 if (currentQuad->material() != CCDrawQuad::RenderPass)
413 continue; 413 continue;
414 414
415 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId(); 415 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId();
416 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); 416 removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
417 } 417 }
418 } 418 }
419 419
420 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const 420 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const
421 { 421 {
422 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId()); 422 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId());
423 } 423 }
424 424
425 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const 425 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const
426 { 426 {
427 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me); 427 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me);
428 size_t passIndex = frame.renderPasses.find(renderPass); 428 size_t passIndex = frame.renderPasses.find(renderPass);
429 429
430 bool renderPassAlreadyRemoved = passIndex == notFound; 430 bool renderPassAlreadyRemoved = passIndex == notFound;
431 if (renderPassAlreadyRemoved) 431 if (renderPassAlreadyRemoved)
432 return false; 432 return false;
433 433
434 // If any quad or RenderPass draws into this RenderPass, then keep it. 434 // If any quad or RenderPass draws into this RenderPass, then keep it.
435 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList(); 435 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList();
436 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 436 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
437 CCDrawQuad* currentQuad = quadListIterator->get(); 437 CCDrawQuad* currentQuad = *quadListIterator;
438 438
439 if (currentQuad->material() != CCDrawQuad::RenderPass) 439 if (currentQuad->material() != CCDrawQuad::RenderPass)
440 return false; 440 return false;
441 441
442 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame); 442 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame);
443 if (frame.renderPasses.contains(contributingPass)) 443 if (frame.renderPasses.contains(contributingPass))
444 return false; 444 return false;
445 } 445 }
446 return true; 446 return true;
447 } 447 }
448 448
449 // Defined for linking tests. 449 // Defined for linking tests.
450 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&); 450 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&);
451 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 451 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
452 452
453 // static 453 // static
454 template<typename RenderPassCuller> 454 template<typename RenderPassCuller>
455 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& frame) 455 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& frame)
456 { 456 {
457 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { 457 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) {
458 const CCRenderPass* currentPass = frame.renderPasses[it]; 458 const CCRenderPass* currentPass = frame.renderPasses[it];
459 const CCQuadList& quadList = currentPass->quadList(); 459 const CCQuadList& quadList = currentPass->quadList();
460 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF rontBegin(); 460 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF rontBegin();
461 461
462 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) { 462 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) {
463 CCDrawQuad* currentQuad = quadListIterator->get(); 463 CCDrawQuad* currentQuad = *quadListIterator;
464 464
465 if (currentQuad->material() != CCDrawQuad::RenderPass) 465 if (currentQuad->material() != CCDrawQuad::RenderPass)
466 continue; 466 continue;
467 467
468 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ uad*>(currentQuad); 468 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ uad*>(currentQuad);
469 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) 469 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame))
470 continue; 470 continue;
471 471
472 // We are changing the vector in the middle of iteration. Because we 472 // We are changing the vector in the middle of iteration. Because we
473 // delete render passes that draw into the current pass, we are 473 // delete render passes that draw into the current pass, we are
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 605
606 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) 606 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer)
607 { 607 {
608 if (!layer) 608 if (!layer)
609 return 0; 609 return 0;
610 610
611 if (layer->scrollable()) 611 if (layer->scrollable())
612 return layer; 612 return layer;
613 613
614 for (size_t i = 0; i < layer->children().size(); ++i) { 614 for (size_t i = 0; i < layer->children().size(); ++i) {
615 CCLayerImpl* found = findRootScrollLayer(layer->children()[i].get()); 615 CCLayerImpl* found = findRootScrollLayer(layer->children()[i]);
616 if (found) 616 if (found)
617 return found; 617 return found;
618 } 618 }
619 619
620 return 0; 620 return 0;
621 } 621 }
622 622
623 // Content layers can be either directly scrollable or contained in an outer 623 // Content layers can be either directly scrollable or contained in an outer
624 // scrolling layer which applies the scroll transform. Given a content layer, 624 // scrolling layer which applies the scroll transform. Given a content layer,
625 // this function returns the associated scroll layer if any. 625 // this function returns the associated scroll layer if any.
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 return; 750 return;
751 751
752 if (layerImpl->scrollable()) { 752 if (layerImpl->scrollable()) {
753 // We need to convert impl-side scroll deltas to pageScale space. 753 // We need to convert impl-side scroll deltas to pageScale space.
754 FloatSize scrollDelta = layerImpl->scrollDelta(); 754 FloatSize scrollDelta = layerImpl->scrollDelta();
755 scrollDelta.scale(pageScaleChange); 755 scrollDelta.scale(pageScaleChange);
756 layerImpl->setScrollDelta(scrollDelta); 756 layerImpl->setScrollDelta(scrollDelta);
757 } 757 }
758 758
759 for (size_t i = 0; i < layerImpl->children().size(); ++i) 759 for (size_t i = 0; i < layerImpl->children().size(); ++i)
760 adjustScrollsForPageScaleChange(layerImpl->children()[i].get(), pageScal eChange); 760 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e);
761 } 761 }
762 762
763 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) 763 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
764 { 764 {
765 if (deviceScaleFactor == m_deviceScaleFactor) 765 if (deviceScaleFactor == m_deviceScaleFactor)
766 return; 766 return;
767 m_deviceScaleFactor = deviceScaleFactor; 767 m_deviceScaleFactor = deviceScaleFactor;
768 768
769 updateMaxScrollPosition(); 769 updateMaxScrollPosition();
770 } 770 }
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 if (!layerImpl->scrollDelta().isZero()) { 1121 if (!layerImpl->scrollDelta().isZero()) {
1122 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta()); 1122 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta());
1123 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; 1123 CCLayerTreeHostCommon::ScrollUpdateInfo scroll;
1124 scroll.layerId = layerImpl->id(); 1124 scroll.layerId = layerImpl->id();
1125 scroll.scrollDelta = scrollDelta; 1125 scroll.scrollDelta = scrollDelta;
1126 scrollInfo->scrolls.append(scroll); 1126 scrollInfo->scrolls.append(scroll);
1127 layerImpl->setSentScrollDelta(scrollDelta); 1127 layerImpl->setSentScrollDelta(scrollDelta);
1128 } 1128 }
1129 1129
1130 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1130 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1131 collectScrollDeltas(scrollInfo, layerImpl->children()[i].get()); 1131 collectScrollDeltas(scrollInfo, layerImpl->children()[i]);
1132 } 1132 }
1133 1133
1134 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() 1134 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas()
1135 { 1135 {
1136 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ; 1136 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ;
1137 1137
1138 if (m_pinchGestureActive || m_pageScaleAnimation) { 1138 if (m_pinchGestureActive || m_pageScaleAnimation) {
1139 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1; 1139 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1;
1140 if (m_pinchGestureActive) 1140 if (m_pinchGestureActive)
1141 computePinchZoomDeltas(scrollInfo.get()); 1141 computePinchZoomDeltas(scrollInfo.get());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 1206
1207 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) 1207 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current)
1208 { 1208 {
1209 ASSERT(current); 1209 ASSERT(current);
1210 current->didLoseContext(); 1210 current->didLoseContext();
1211 if (current->maskLayer()) 1211 if (current->maskLayer())
1212 sendDidLoseContextRecursive(current->maskLayer()); 1212 sendDidLoseContextRecursive(current->maskLayer());
1213 if (current->replicaLayer()) 1213 if (current->replicaLayer())
1214 sendDidLoseContextRecursive(current->replicaLayer()); 1214 sendDidLoseContextRecursive(current->replicaLayer());
1215 for (size_t i = 0; i < current->children().size(); ++i) 1215 for (size_t i = 0; i < current->children().size(); ++i)
1216 sendDidLoseContextRecursive(current->children()[i].get()); 1216 sendDidLoseContextRecursive(current->children()[i]);
1217 } 1217 }
1218 1218
1219 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) 1219 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current)
1220 { 1220 {
1221 ASSERT(current); 1221 ASSERT(current);
1222 for (size_t i = 0; i < current->children().size(); ++i) 1222 for (size_t i = 0; i < current->children().size(); ++i)
1223 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i].get()); 1223 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]);
1224 current->clearRenderSurface(); 1224 current->clearRenderSurface();
1225 } 1225 }
1226 1226
1227 void CCLayerTreeHostImpl::clearRenderSurfaces() 1227 void CCLayerTreeHostImpl::clearRenderSurfaces()
1228 { 1228 {
1229 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); 1229 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get());
1230 m_renderSurfaceLayerList.clear(); 1230 m_renderSurfaceLayerList.clear();
1231 } 1231 }
1232 1232
1233 std::string CCLayerTreeHostImpl::layerTreeAsText() const 1233 std::string CCLayerTreeHostImpl::layerTreeAsText() const
1234 { 1234 {
1235 std::string str; 1235 std::string str;
1236 if (m_rootLayerImpl) { 1236 if (m_rootLayerImpl) {
1237 str = m_rootLayerImpl->layerTreeAsText(); 1237 str = m_rootLayerImpl->layerTreeAsText();
1238 str += "RenderSurfaces:\n"; 1238 str += "RenderSurfaces:\n";
1239 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get()); 1239 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get());
1240 } 1240 }
1241 return str; 1241 return str;
1242 } 1242 }
1243 1243
1244 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const CCLayerImpl* layer) const 1244 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const CCLayerImpl* layer) const
1245 { 1245 {
1246 if (layer->renderSurface()) 1246 if (layer->renderSurface())
1247 layer->renderSurface()->dumpSurface(str, indent); 1247 layer->renderSurface()->dumpSurface(str, indent);
1248 1248
1249 for (size_t i = 0; i < layer->children().size(); ++i) 1249 for (size_t i = 0; i < layer->children().size(); ++i)
1250 dumpRenderSurfaces(str, indent, layer->children()[i].get()); 1250 dumpRenderSurfaces(str, indent, layer->children()[i]);
1251 } 1251 }
1252 1252
1253 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const 1253 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const
1254 { 1254 {
1255 return fpsCounter()->currentFrameNumber(); 1255 return fpsCounter()->currentFrameNumber();
1256 } 1256 }
1257 1257
1258 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const 1258 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const
1259 { 1259 {
1260 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber(); 1260 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber();
1261 stats.droppedFrameCount = fpsCounter()->droppedFrameCount(); 1261 stats.droppedFrameCount = fpsCounter()->droppedFrameCount();
1262 } 1262 }
1263 1263
1264 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime) 1264 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime)
1265 { 1265 {
1266 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime); 1266 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime);
1267 } 1267 }
1268 1268
1269 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double monotonicTime) 1269 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double monotonicTime)
1270 { 1270 {
1271 if (!layer) 1271 if (!layer)
1272 return; 1272 return;
1273 1273
1274 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController(); 1274 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController();
1275 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1275 if (scrollbarController && scrollbarController->animate(monotonicTime))
1276 m_client->setNeedsRedrawOnImplThread(); 1276 m_client->setNeedsRedrawOnImplThread();
1277 1277
1278 for (size_t i = 0; i < layer->children().size(); ++i) 1278 for (size_t i = 0; i < layer->children().size(); ++i)
1279 animateScrollbarsRecursive(layer->children()[i].get(), monotonicTime); 1279 animateScrollbarsRecursive(layer->children()[i], monotonicTime);
1280 } 1280 }
1281 1281
1282 } // namespace cc 1282 } // namespace cc
OLDNEW
« no previous file with comments | « cc/CCLayerTreeHostCommonTest.cpp ('k') | cc/CCLayerTreeHostImplTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698