OLD | NEW |
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 delta = m_maxPageScaleFactor / m_pageScaleFactor; | 76 delta = m_maxPageScaleFactor / m_pageScaleFactor; |
77 | 77 |
78 if (delta == m_pageScaleDelta) | 78 if (delta == m_pageScaleDelta) |
79 return; | 79 return; |
80 | 80 |
81 m_pageScaleDelta = delta; | 81 m_pageScaleDelta = delta; |
82 } | 82 } |
83 | 83 |
84 bool CCPinchZoomViewport::setPageScaleFactorAndLimits(float pageScaleFactor, flo
at minPageScaleFactor, float maxPageScaleFactor) | 84 bool CCPinchZoomViewport::setPageScaleFactorAndLimits(float pageScaleFactor, flo
at minPageScaleFactor, float maxPageScaleFactor) |
85 { | 85 { |
86 ASSERT(pageScaleFactor); | 86 DCHECK(pageScaleFactor); |
87 | 87 |
88 if (m_sentPageScaleDelta == 1 && pageScaleFactor == m_pageScaleFactor && min
PageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleF
actor) | 88 if (m_sentPageScaleDelta == 1 && pageScaleFactor == m_pageScaleFactor && min
PageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleF
actor) |
89 return false; | 89 return false; |
90 | 90 |
91 m_minPageScaleFactor = minPageScaleFactor; | 91 m_minPageScaleFactor = minPageScaleFactor; |
92 m_maxPageScaleFactor = maxPageScaleFactor; | 92 m_maxPageScaleFactor = maxPageScaleFactor; |
93 | 93 |
94 m_pageScaleFactor = pageScaleFactor; | 94 m_pageScaleFactor = pageScaleFactor; |
95 return true; | 95 return true; |
96 } | 96 } |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 , m_memoryAllocationLimitBytes(CCPrioritizedTextureManager::defaultMemoryAll
ocationLimit()) | 226 , m_memoryAllocationLimitBytes(CCPrioritizedTextureManager::defaultMemoryAll
ocationLimit()) |
227 , m_backgroundColor(0) | 227 , m_backgroundColor(0) |
228 , m_hasTransparentBackground(false) | 228 , m_hasTransparentBackground(false) |
229 , m_needsAnimateLayers(false) | 229 , m_needsAnimateLayers(false) |
230 , m_pinchGestureActive(false) | 230 , m_pinchGestureActive(false) |
231 , m_fpsCounter(CCFrameRateCounter::create()) | 231 , m_fpsCounter(CCFrameRateCounter::create()) |
232 , m_debugRectHistory(CCDebugRectHistory::create()) | 232 , m_debugRectHistory(CCDebugRectHistory::create()) |
233 , m_numImplThreadScrolls(0) | 233 , m_numImplThreadScrolls(0) |
234 , m_numMainThreadScrolls(0) | 234 , m_numMainThreadScrolls(0) |
235 { | 235 { |
236 ASSERT(CCProxy::isImplThread()); | 236 DCHECK(CCProxy::isImplThread()); |
237 didVisibilityChange(this, m_visible); | 237 didVisibilityChange(this, m_visible); |
238 } | 238 } |
239 | 239 |
240 CCLayerTreeHostImpl::~CCLayerTreeHostImpl() | 240 CCLayerTreeHostImpl::~CCLayerTreeHostImpl() |
241 { | 241 { |
242 ASSERT(CCProxy::isImplThread()); | 242 DCHECK(CCProxy::isImplThread()); |
243 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::~CCLayerTreeHostImpl()"); | 243 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::~CCLayerTreeHostImpl()"); |
244 | 244 |
245 if (m_rootLayerImpl) | 245 if (m_rootLayerImpl) |
246 clearRenderSurfaces(); | 246 clearRenderSurfaces(); |
247 } | 247 } |
248 | 248 |
249 void CCLayerTreeHostImpl::beginCommit() | 249 void CCLayerTreeHostImpl::beginCommit() |
250 { | 250 { |
251 } | 251 } |
252 | 252 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | 327 |
328 void CCLayerTreeHostImpl::trackDamageForAllSurfaces(CCLayerImpl* rootDrawLayer,
const CCLayerList& renderSurfaceLayerList) | 328 void CCLayerTreeHostImpl::trackDamageForAllSurfaces(CCLayerImpl* rootDrawLayer,
const CCLayerList& renderSurfaceLayerList) |
329 { | 329 { |
330 // For now, we use damage tracking to compute a global scissor. To do this,
we must | 330 // For now, we use damage tracking to compute a global scissor. To do this,
we must |
331 // compute all damage tracking before drawing anything, so that we know the
root | 331 // compute all damage tracking before drawing anything, so that we know the
root |
332 // damage rect. The root damage rect is then used to scissor each surface. | 332 // damage rect. The root damage rect is then used to scissor each surface. |
333 | 333 |
334 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0
; --surfaceIndex) { | 334 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0
; --surfaceIndex) { |
335 CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; | 335 CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; |
336 CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface(); | 336 CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface(); |
337 ASSERT(renderSurface); | 337 DCHECK(renderSurface); |
338 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface-
>layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl
yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer()
, renderSurfaceLayer->filters()); | 338 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface-
>layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl
yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer()
, renderSurfaceLayer->filters()); |
339 } | 339 } |
340 } | 340 } |
341 | 341 |
342 void CCLayerTreeHostImpl::updateRootScrollLayerImplTransform() | 342 void CCLayerTreeHostImpl::updateRootScrollLayerImplTransform() |
343 { | 343 { |
344 if (m_rootScrollLayerImpl) { | 344 if (m_rootScrollLayerImpl) { |
345 m_rootScrollLayerImpl->setImplTransform(implTransform()); | 345 m_rootScrollLayerImpl->setImplTransform(implTransform()); |
346 } | 346 } |
347 } | 347 } |
348 | 348 |
349 void CCLayerTreeHostImpl::calculateRenderSurfaceLayerList(CCLayerList& renderSur
faceLayerList) | 349 void CCLayerTreeHostImpl::calculateRenderSurfaceLayerList(CCLayerList& renderSur
faceLayerList) |
350 { | 350 { |
351 ASSERT(renderSurfaceLayerList.empty()); | 351 DCHECK(renderSurfaceLayerList.empty()); |
352 ASSERT(m_rootLayerImpl); | 352 DCHECK(m_rootLayerImpl); |
353 ASSERT(m_renderer); // For maxTextureSize. | 353 DCHECK(m_renderer); // For maxTextureSize. |
354 | 354 |
355 { | 355 { |
356 updateRootScrollLayerImplTransform(); | 356 updateRootScrollLayerImplTransform(); |
357 | 357 |
358 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::calcDrawEtc"); | 358 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::calcDrawEtc"); |
359 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de
viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities().
maxTextureSize, renderSurfaceLayerList); | 359 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de
viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities().
maxTextureSize, renderSurfaceLayerList); |
360 | 360 |
361 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList)
; | 361 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList)
; |
362 } | 362 } |
363 } | 363 } |
364 | 364 |
365 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r
enderPass) | 365 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r
enderPass) |
366 { | 366 { |
367 CCRenderPass* pass = renderPass.get(); | 367 CCRenderPass* pass = renderPass.get(); |
368 renderPasses.push_back(pass); | 368 renderPasses.push_back(pass); |
369 renderPassesById.set(pass->id(), renderPass.Pass()); | 369 renderPassesById.set(pass->id(), renderPass.Pass()); |
370 } | 370 } |
371 | 371 |
372 bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame) | 372 bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
373 { | 373 { |
374 ASSERT(frame.renderPasses.empty()); | 374 DCHECK(frame.renderPasses.empty()); |
375 | 375 |
376 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); | 376 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); |
377 | 377 |
378 TRACE_EVENT1("cc", "CCLayerTreeHostImpl::calculateRenderPasses", "renderSurf
aceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerLi
st->size())); | 378 TRACE_EVENT1("cc", "CCLayerTreeHostImpl::calculateRenderPasses", "renderSurf
aceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerLi
st->size())); |
379 | 379 |
380 // Create the render passes in dependency order. | 380 // Create the render passes in dependency order. |
381 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd
ex >= 0 ; --surfaceIndex) { | 381 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd
ex >= 0 ; --surfaceIndex) { |
382 CCLayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfac
eIndex]; | 382 CCLayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfac
eIndex]; |
383 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); | 383 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); |
384 } | 384 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 | 440 |
441 if (appendQuadsData.hadMissingTiles) { | 441 if (appendQuadsData.hadMissingTiles) { |
442 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
g() || it->drawTransformIsAnimating(); | 442 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
g() || it->drawTransformIsAnimating(); |
443 if (layerHasAnimatingTransform || CCSettings::jankInsteadOfCheckerbo
ard()) | 443 if (layerHasAnimatingTransform || CCSettings::jankInsteadOfCheckerbo
ard()) |
444 drawFrame = false; | 444 drawFrame = false; |
445 } | 445 } |
446 | 446 |
447 occlusionTracker.leaveLayer(it); | 447 occlusionTracker.leaveLayer(it); |
448 } | 448 } |
449 | 449 |
450 #if !ASSERT_DISABLED | 450 #ifndef NDEBUG |
451 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { | 451 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { |
452 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) | 452 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) |
453 ASSERT(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >=
0); | 453 DCHECK(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >= 0); |
454 ASSERT(frame.renderPassesById.contains(frame.renderPasses[i]->id())); | 454 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id())); |
455 } | 455 } |
456 #endif | 456 #endif |
457 | 457 |
458 if (!m_hasTransparentBackground) { | 458 if (!m_hasTransparentBackground) { |
459 frame.renderPasses.back()->setHasTransparentBackground(false); | 459 frame.renderPasses.back()->setHasTransparentBackground(false); |
460 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get()
, m_backgroundColor, occlusionTracker); | 460 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get()
, m_backgroundColor, occlusionTracker); |
461 } | 461 } |
462 | 462 |
463 if (drawFrame) | 463 if (drawFrame) |
464 occlusionTracker.overdrawMetrics().recordMetrics(this); | 464 occlusionTracker.overdrawMetrics().recordMetrics(this); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 // TODO(aelias): Hardcoding the first child here is weird. Think of | 512 // TODO(aelias): Hardcoding the first child here is weird. Think of |
513 // a cleaner way to get the contentBounds on the Impl side. | 513 // a cleaner way to get the contentBounds on the Impl side. |
514 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty()) | 514 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty()) |
515 return IntSize(); | 515 return IntSize(); |
516 return m_rootScrollLayerImpl->children()[0]->contentBounds(); | 516 return m_rootScrollLayerImpl->children()[0]->contentBounds(); |
517 } | 517 } |
518 | 518 |
519 static inline CCRenderPass* findRenderPassById(CCRenderPass::Id renderPassId, co
nst CCLayerTreeHostImpl::FrameData& frame) | 519 static inline CCRenderPass* findRenderPassById(CCRenderPass::Id renderPassId, co
nst CCLayerTreeHostImpl::FrameData& frame) |
520 { | 520 { |
521 CCRenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(rende
rPassId); | 521 CCRenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(rende
rPassId); |
522 ASSERT(it != frame.renderPassesById.end()); | 522 DCHECK(it != frame.renderPassesById.end()); |
523 return it->second; | 523 return it->second; |
524 } | 524 } |
525 | 525 |
526 static void removeRenderPassesRecursive(CCRenderPass::Id removeRenderPassId, CCL
ayerTreeHostImpl::FrameData& frame) | 526 static void removeRenderPassesRecursive(CCRenderPass::Id removeRenderPassId, CCL
ayerTreeHostImpl::FrameData& frame) |
527 { | 527 { |
528 CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, fram
e); | 528 CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, fram
e); |
529 CCRenderPassList& renderPasses = frame.renderPasses; | 529 CCRenderPassList& renderPasses = frame.renderPasses; |
530 CCRenderPassList::iterator toRemove = std::find(renderPasses.begin(), render
Passes.end(), removeRenderPass); | 530 CCRenderPassList::iterator toRemove = std::find(renderPasses.begin(), render
Passes.end(), removeRenderPass); |
531 | 531 |
532 // The pass was already removed by another quad - probably the original, and
we are the replica. | 532 // The pass was already removed by another quad - probably the original, and
we are the replica. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 continue; | 604 continue; |
605 | 605 |
606 // We are changing the vector in the middle of iteration. Because we | 606 // We are changing the vector in the middle of iteration. Because we |
607 // delete render passes that draw into the current pass, we are | 607 // delete render passes that draw into the current pass, we are |
608 // guaranteed that any data from the iterator to the end will not | 608 // guaranteed that any data from the iterator to the end will not |
609 // change. So, capture the iterator position from the end of the | 609 // change. So, capture the iterator position from the end of the |
610 // list, and restore it after the change. | 610 // list, and restore it after the change. |
611 int positionFromEnd = frame.renderPasses.size() - it; | 611 int positionFromEnd = frame.renderPasses.size() - it; |
612 removeRenderPassesRecursive(renderPassQuad->renderPassId(), frame); | 612 removeRenderPassesRecursive(renderPassQuad->renderPassId(), frame); |
613 it = frame.renderPasses.size() - positionFromEnd; | 613 it = frame.renderPasses.size() - positionFromEnd; |
614 ASSERT(it >= 0); | 614 DCHECK(it >= 0); |
615 } | 615 } |
616 } | 616 } |
617 } | 617 } |
618 | 618 |
619 bool CCLayerTreeHostImpl::prepareToDraw(FrameData& frame) | 619 bool CCLayerTreeHostImpl::prepareToDraw(FrameData& frame) |
620 { | 620 { |
621 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::prepareToDraw"); | 621 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::prepareToDraw"); |
622 ASSERT(canDraw()); | 622 DCHECK(canDraw()); |
623 | 623 |
624 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList; | 624 frame.renderSurfaceLayerList = &m_renderSurfaceLayerList; |
625 frame.renderPasses.clear(); | 625 frame.renderPasses.clear(); |
626 frame.renderPassesById.clear(); | 626 frame.renderPassesById.clear(); |
627 frame.renderSurfaceLayerList->clear(); | 627 frame.renderSurfaceLayerList->clear(); |
628 frame.willDrawLayers.clear(); | 628 frame.willDrawLayers.clear(); |
629 | 629 |
630 if (!calculateRenderPasses(frame)) | 630 if (!calculateRenderPasses(frame)) |
631 return false; | 631 return false; |
632 | 632 |
633 // If we return true, then we expect drawLayers() to be called before this f
unction is called again. | 633 // If we return true, then we expect drawLayers() to be called before this f
unction is called again. |
634 return true; | 634 return true; |
635 } | 635 } |
636 | 636 |
637 void CCLayerTreeHostImpl::reduceContentsTextureMemoryOnImplThread(size_t limitBy
tes) | 637 void CCLayerTreeHostImpl::reduceContentsTextureMemoryOnImplThread(size_t limitBy
tes) |
638 { | 638 { |
639 bool evictedResources = m_client->reduceContentsTextureMemoryOnImplThread(li
mitBytes); | 639 bool evictedResources = m_client->reduceContentsTextureMemoryOnImplThread(li
mitBytes); |
640 if (evictedResources) { | 640 if (evictedResources) { |
641 setContentsTexturesPurged(); | 641 setContentsTexturesPurged(); |
642 m_client->setNeedsCommitOnImplThread(); | 642 m_client->setNeedsCommitOnImplThread(); |
643 m_client->onCanDrawStateChanged(canDraw()); | 643 m_client->onCanDrawStateChanged(canDraw()); |
644 } | 644 } |
645 } | 645 } |
646 | 646 |
647 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) | 647 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) |
648 { | 648 { |
649 ASSERT(bytes); | 649 DCHECK(bytes); |
650 if (m_memoryAllocationLimitBytes == bytes) | 650 if (m_memoryAllocationLimitBytes == bytes) |
651 return; | 651 return; |
652 m_memoryAllocationLimitBytes = bytes; | 652 m_memoryAllocationLimitBytes = bytes; |
653 reduceContentsTextureMemoryOnImplThread(m_visible ? m_memoryAllocationLimitB
ytes : 0); | 653 reduceContentsTextureMemoryOnImplThread(m_visible ? m_memoryAllocationLimitB
ytes : 0); |
654 m_client->setNeedsCommitOnImplThread(); | 654 m_client->setNeedsCommitOnImplThread(); |
655 } | 655 } |
656 | 656 |
657 void CCLayerTreeHostImpl::onVSyncParametersChanged(double monotonicTimebase, dou
ble intervalInSeconds) | 657 void CCLayerTreeHostImpl::onVSyncParametersChanged(double monotonicTimebase, dou
ble intervalInSeconds) |
658 { | 658 { |
659 m_client->onVSyncParametersChanged(monotonicTimebase, intervalInSeconds); | 659 m_client->onVSyncParametersChanged(monotonicTimebase, intervalInSeconds); |
660 } | 660 } |
661 | 661 |
662 void CCLayerTreeHostImpl::drawLayers(const FrameData& frame) | 662 void CCLayerTreeHostImpl::drawLayers(const FrameData& frame) |
663 { | 663 { |
664 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::drawLayers"); | 664 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::drawLayers"); |
665 ASSERT(canDraw()); | 665 DCHECK(canDraw()); |
666 ASSERT(!frame.renderPasses.empty()); | 666 DCHECK(!frame.renderPasses.empty()); |
667 | 667 |
668 // FIXME: use the frame begin time from the overall compositor scheduler. | 668 // FIXME: use the frame begin time from the overall compositor scheduler. |
669 // This value is currently inaccessible because it is up in Chromium's | 669 // This value is currently inaccessible because it is up in Chromium's |
670 // RenderWidget. | 670 // RenderWidget. |
671 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); | 671 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); |
672 | 672 |
673 if (m_settings.showDebugRects()) | 673 if (m_settings.showDebugRects()) |
674 m_debugRectHistory->saveDebugRectsForCurrentFrame(m_rootLayerImpl.get(),
*frame.renderSurfaceLayerList, frame.occludingScreenSpaceRects, settings()); | 674 m_debugRectHistory->saveDebugRectsForCurrentFrame(m_rootLayerImpl.get(),
*frame.renderSurfaceLayerList, frame.occludingScreenSpaceRects, settings()); |
675 | 675 |
676 // Because the contents of the HUD depend on everything else in the frame, t
he contents | 676 // Because the contents of the HUD depend on everything else in the frame, t
he contents |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 return m_renderer && m_renderer->isContextLost(); | 712 return m_renderer && m_renderer->isContextLost(); |
713 } | 713 } |
714 | 714 |
715 const RendererCapabilities& CCLayerTreeHostImpl::rendererCapabilities() const | 715 const RendererCapabilities& CCLayerTreeHostImpl::rendererCapabilities() const |
716 { | 716 { |
717 return m_renderer->capabilities(); | 717 return m_renderer->capabilities(); |
718 } | 718 } |
719 | 719 |
720 bool CCLayerTreeHostImpl::swapBuffers() | 720 bool CCLayerTreeHostImpl::swapBuffers() |
721 { | 721 { |
722 ASSERT(m_renderer); | 722 DCHECK(m_renderer); |
723 | 723 |
724 m_fpsCounter->markEndOfFrame(); | 724 m_fpsCounter->markEndOfFrame(); |
725 return m_renderer->swapBuffers(); | 725 return m_renderer->swapBuffers(); |
726 } | 726 } |
727 | 727 |
728 const IntSize& CCLayerTreeHostImpl::deviceViewportSize() const | 728 const IntSize& CCLayerTreeHostImpl::deviceViewportSize() const |
729 { | 729 { |
730 return m_deviceViewportSize; | 730 return m_deviceViewportSize; |
731 } | 731 } |
732 | 732 |
733 const CCLayerTreeSettings& CCLayerTreeHostImpl::settings() const | 733 const CCLayerTreeSettings& CCLayerTreeHostImpl::settings() const |
734 { | 734 { |
735 return m_settings; | 735 return m_settings; |
736 } | 736 } |
737 | 737 |
738 void CCLayerTreeHostImpl::didLoseContext() | 738 void CCLayerTreeHostImpl::didLoseContext() |
739 { | 739 { |
740 m_client->didLoseContextOnImplThread(); | 740 m_client->didLoseContextOnImplThread(); |
741 } | 741 } |
742 | 742 |
743 void CCLayerTreeHostImpl::onSwapBuffersComplete() | 743 void CCLayerTreeHostImpl::onSwapBuffersComplete() |
744 { | 744 { |
745 m_client->onSwapBuffersCompleteOnImplThread(); | 745 m_client->onSwapBuffersCompleteOnImplThread(); |
746 } | 746 } |
747 | 747 |
748 void CCLayerTreeHostImpl::readback(void* pixels, const IntRect& rect) | 748 void CCLayerTreeHostImpl::readback(void* pixels, const IntRect& rect) |
749 { | 749 { |
750 ASSERT(m_renderer); | 750 DCHECK(m_renderer); |
751 m_renderer->getFramebufferPixels(pixels, rect); | 751 m_renderer->getFramebufferPixels(pixels, rect); |
752 } | 752 } |
753 | 753 |
754 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) | 754 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) |
755 { | 755 { |
756 if (!layer) | 756 if (!layer) |
757 return 0; | 757 return 0; |
758 | 758 |
759 if (layer->scrollable()) | 759 if (layer->scrollable()) |
760 return layer; | 760 return layer; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 // Clear all data structures that have direct references to the layer tree. | 804 // Clear all data structures that have direct references to the layer tree. |
805 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; | 805 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; |
806 m_currentlyScrollingLayerImpl = 0; | 806 m_currentlyScrollingLayerImpl = 0; |
807 m_renderSurfaceLayerList.clear(); | 807 m_renderSurfaceLayerList.clear(); |
808 | 808 |
809 return m_rootLayerImpl.Pass(); | 809 return m_rootLayerImpl.Pass(); |
810 } | 810 } |
811 | 811 |
812 void CCLayerTreeHostImpl::setVisible(bool visible) | 812 void CCLayerTreeHostImpl::setVisible(bool visible) |
813 { | 813 { |
814 ASSERT(CCProxy::isImplThread()); | 814 DCHECK(CCProxy::isImplThread()); |
815 | 815 |
816 if (m_visible == visible) | 816 if (m_visible == visible) |
817 return; | 817 return; |
818 m_visible = visible; | 818 m_visible = visible; |
819 didVisibilityChange(this, m_visible); | 819 didVisibilityChange(this, m_visible); |
820 reduceContentsTextureMemoryOnImplThread(m_visible ? m_memoryAllocationLimitB
ytes : 0); | 820 reduceContentsTextureMemoryOnImplThread(m_visible ? m_memoryAllocationLimitB
ytes : 0); |
821 | 821 |
822 if (!m_renderer) | 822 if (!m_renderer) |
823 return; | 823 return; |
824 | 824 |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1010 m_renderSurfaceLayerList.clear(); | 1010 m_renderSurfaceLayerList.clear(); |
1011 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); | 1011 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); |
1012 | 1012 |
1013 return m_renderSurfaceLayerList.size(); | 1013 return m_renderSurfaceLayerList.size(); |
1014 } | 1014 } |
1015 | 1015 |
1016 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoi
nt& viewportPoint, CCInputHandlerClient::ScrollInputType type) | 1016 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoi
nt& viewportPoint, CCInputHandlerClient::ScrollInputType type) |
1017 { | 1017 { |
1018 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::scrollBegin"); | 1018 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::scrollBegin"); |
1019 | 1019 |
1020 ASSERT(!m_currentlyScrollingLayerImpl); | 1020 DCHECK(!m_currentlyScrollingLayerImpl); |
1021 clearCurrentlyScrollingLayer(); | 1021 clearCurrentlyScrollingLayer(); |
1022 | 1022 |
1023 if (!ensureRenderSurfaceLayerList()) | 1023 if (!ensureRenderSurfaceLayerList()) |
1024 return ScrollIgnored; | 1024 return ScrollIgnored; |
1025 | 1025 |
1026 IntPoint deviceViewportPoint = viewportPoint; | 1026 IntPoint deviceViewportPoint = viewportPoint; |
1027 deviceViewportPoint.scale(m_deviceScaleFactor, m_deviceScaleFactor); | 1027 deviceViewportPoint.scale(m_deviceScaleFactor, m_deviceScaleFactor); |
1028 | 1028 |
1029 // First find out which layer was hit from the saved list of visible layers | 1029 // First find out which layer was hit from the saved list of visible layers |
1030 // in the most recent frame. | 1030 // in the most recent frame. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1064 m_numImplThreadScrolls++; | 1064 m_numImplThreadScrolls++; |
1065 return ScrollStarted; | 1065 return ScrollStarted; |
1066 } | 1066 } |
1067 return ScrollIgnored; | 1067 return ScrollIgnored; |
1068 } | 1068 } |
1069 | 1069 |
1070 static FloatSize scrollLayerWithScreenSpaceDelta(CCPinchZoomViewport* viewport,
CCLayerImpl& layerImpl, const FloatPoint& screenSpacePoint, const FloatSize& scr
eenSpaceDelta) | 1070 static FloatSize scrollLayerWithScreenSpaceDelta(CCPinchZoomViewport* viewport,
CCLayerImpl& layerImpl, const FloatPoint& screenSpacePoint, const FloatSize& scr
eenSpaceDelta) |
1071 { | 1071 { |
1072 // Layers with non-invertible screen space transforms should not have passed
the scroll hit | 1072 // Layers with non-invertible screen space transforms should not have passed
the scroll hit |
1073 // test in the first place. | 1073 // test in the first place. |
1074 ASSERT(layerImpl.screenSpaceTransform().isInvertible()); | 1074 DCHECK(layerImpl.screenSpaceTransform().isInvertible()); |
1075 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT
ransform().inverse(); | 1075 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT
ransform().inverse(); |
1076 | 1076 |
1077 // First project the scroll start and end points to local layer space to fin
d the scroll delta | 1077 // First project the scroll start and end points to local layer space to fin
d the scroll delta |
1078 // in layer coordinates. | 1078 // in layer coordinates. |
1079 bool startClipped, endClipped; | 1079 bool startClipped, endClipped; |
1080 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; | 1080 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; |
1081 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran
sform, screenSpacePoint, startClipped); | 1081 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran
sform, screenSpacePoint, startClipped); |
1082 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf
orm, screenSpaceEndPoint, endClipped); | 1082 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf
orm, screenSpaceEndPoint, endClipped); |
1083 | 1083 |
1084 // In general scroll point coordinates should not get clipped. | 1084 // In general scroll point coordinates should not get clipped. |
1085 ASSERT(!startClipped); | 1085 DCHECK(!startClipped); |
1086 ASSERT(!endClipped); | 1086 DCHECK(!endClipped); |
1087 if (startClipped || endClipped) | 1087 if (startClipped || endClipped) |
1088 return FloatSize(); | 1088 return FloatSize(); |
1089 | 1089 |
1090 // Apply the scroll delta. | 1090 // Apply the scroll delta. |
1091 FloatSize previousDelta(layerImpl.scrollDelta()); | 1091 FloatSize previousDelta(layerImpl.scrollDelta()); |
1092 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint); | 1092 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint); |
1093 | 1093 |
1094 if (viewport) | 1094 if (viewport) |
1095 viewport->applyScroll(unscrolled); | 1095 viewport->applyScroll(unscrolled); |
1096 | 1096 |
1097 // Calculate the applied scroll delta in screen space coordinates. | 1097 // Calculate the applied scroll delta in screen space coordinates. |
1098 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() -
previousDelta; | 1098 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() -
previousDelta; |
1099 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen
SpaceTransform(), actualLocalEndPoint, endClipped); | 1099 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen
SpaceTransform(), actualLocalEndPoint, endClipped); |
1100 ASSERT(!endClipped); | 1100 DCHECK(!endClipped); |
1101 if (endClipped) | 1101 if (endClipped) |
1102 return FloatSize(); | 1102 return FloatSize(); |
1103 return actualScreenSpaceEndPoint - screenSpacePoint; | 1103 return actualScreenSpaceEndPoint - screenSpacePoint; |
1104 } | 1104 } |
1105 | 1105 |
1106 static FloatSize scrollLayerWithLocalDelta(CCLayerImpl& layerImpl, const FloatSi
ze& localDelta) | 1106 static FloatSize scrollLayerWithLocalDelta(CCLayerImpl& layerImpl, const FloatSi
ze& localDelta) |
1107 { | 1107 { |
1108 FloatSize previousDelta(layerImpl.scrollDelta()); | 1108 FloatSize previousDelta(layerImpl.scrollDelta()); |
1109 layerImpl.scrollBy(localDelta); | 1109 layerImpl.scrollBy(localDelta); |
1110 return layerImpl.scrollDelta() - previousDelta; | 1110 return layerImpl.scrollDelta() - previousDelta; |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1378 setBackgroundTickingEnabled(!m_visible && m_needsAnimateLayers); | 1378 setBackgroundTickingEnabled(!m_visible && m_needsAnimateLayers); |
1379 } | 1379 } |
1380 | 1380 |
1381 base::TimeDelta CCLayerTreeHostImpl::lowFrequencyAnimationInterval() const | 1381 base::TimeDelta CCLayerTreeHostImpl::lowFrequencyAnimationInterval() const |
1382 { | 1382 { |
1383 return base::TimeDelta::FromSeconds(1); | 1383 return base::TimeDelta::FromSeconds(1); |
1384 } | 1384 } |
1385 | 1385 |
1386 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) | 1386 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) |
1387 { | 1387 { |
1388 ASSERT(current); | 1388 DCHECK(current); |
1389 current->didLoseContext(); | 1389 current->didLoseContext(); |
1390 if (current->maskLayer()) | 1390 if (current->maskLayer()) |
1391 sendDidLoseContextRecursive(current->maskLayer()); | 1391 sendDidLoseContextRecursive(current->maskLayer()); |
1392 if (current->replicaLayer()) | 1392 if (current->replicaLayer()) |
1393 sendDidLoseContextRecursive(current->replicaLayer()); | 1393 sendDidLoseContextRecursive(current->replicaLayer()); |
1394 for (size_t i = 0; i < current->children().size(); ++i) | 1394 for (size_t i = 0; i < current->children().size(); ++i) |
1395 sendDidLoseContextRecursive(current->children()[i]); | 1395 sendDidLoseContextRecursive(current->children()[i]); |
1396 } | 1396 } |
1397 | 1397 |
1398 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) | 1398 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) |
1399 { | 1399 { |
1400 ASSERT(current); | 1400 DCHECK(current); |
1401 for (size_t i = 0; i < current->children().size(); ++i) | 1401 for (size_t i = 0; i < current->children().size(); ++i) |
1402 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]); | 1402 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]); |
1403 current->clearRenderSurface(); | 1403 current->clearRenderSurface(); |
1404 } | 1404 } |
1405 | 1405 |
1406 void CCLayerTreeHostImpl::clearRenderSurfaces() | 1406 void CCLayerTreeHostImpl::clearRenderSurfaces() |
1407 { | 1407 { |
1408 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); | 1408 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); |
1409 m_renderSurfaceLayerList.clear(); | 1409 m_renderSurfaceLayerList.clear(); |
1410 } | 1410 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1454 | 1454 |
1455 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); | 1455 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); |
1456 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1456 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1457 m_client->setNeedsRedrawOnImplThread(); | 1457 m_client->setNeedsRedrawOnImplThread(); |
1458 | 1458 |
1459 for (size_t i = 0; i < layer->children().size(); ++i) | 1459 for (size_t i = 0; i < layer->children().size(); ++i) |
1460 animateScrollbarsRecursive(layer->children()[i], monotonicTime); | 1460 animateScrollbarsRecursive(layer->children()[i], monotonicTime); |
1461 } | 1461 } |
1462 | 1462 |
1463 } // namespace cc | 1463 } // namespace cc |
OLD | NEW |