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 "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "CCAppendQuadsData.h" | 10 #include "CCAppendQuadsData.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 #if CC_DCHECK_ENABLED() |
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 |
(...skipping 10 matching lines...) Expand all Loading... |
643 m_client->setNeedsCommitOnImplThread(); | 643 m_client->setNeedsCommitOnImplThread(); |
644 m_client->onCanDrawStateChanged(canDraw()); | 644 m_client->onCanDrawStateChanged(canDraw()); |
645 } | 645 } |
646 | 646 |
647 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) | 647 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) |
648 { | 648 { |
649 if (m_memoryAllocationLimitBytes == bytes) | 649 if (m_memoryAllocationLimitBytes == bytes) |
650 return; | 650 return; |
651 m_memoryAllocationLimitBytes = bytes; | 651 m_memoryAllocationLimitBytes = bytes; |
652 | 652 |
653 ASSERT(bytes); | 653 DCHECK(bytes > 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 | 820 |
821 if (!m_renderer) | 821 if (!m_renderer) |
822 return; | 822 return; |
823 | 823 |
824 m_renderer->setVisible(visible); | 824 m_renderer->setVisible(visible); |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 m_renderSurfaceLayerList.clear(); | 1009 m_renderSurfaceLayerList.clear(); |
1010 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); | 1010 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); |
1011 | 1011 |
1012 return m_renderSurfaceLayerList.size(); | 1012 return m_renderSurfaceLayerList.size(); |
1013 } | 1013 } |
1014 | 1014 |
1015 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoi
nt& viewportPoint, CCInputHandlerClient::ScrollInputType type) | 1015 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoi
nt& viewportPoint, CCInputHandlerClient::ScrollInputType type) |
1016 { | 1016 { |
1017 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::scrollBegin"); | 1017 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::scrollBegin"); |
1018 | 1018 |
1019 ASSERT(!m_currentlyScrollingLayerImpl); | 1019 DCHECK(!m_currentlyScrollingLayerImpl); |
1020 clearCurrentlyScrollingLayer(); | 1020 clearCurrentlyScrollingLayer(); |
1021 | 1021 |
1022 if (!ensureRenderSurfaceLayerList()) | 1022 if (!ensureRenderSurfaceLayerList()) |
1023 return ScrollIgnored; | 1023 return ScrollIgnored; |
1024 | 1024 |
1025 IntPoint deviceViewportPoint = viewportPoint; | 1025 IntPoint deviceViewportPoint = viewportPoint; |
1026 deviceViewportPoint.scale(m_deviceScaleFactor, m_deviceScaleFactor); | 1026 deviceViewportPoint.scale(m_deviceScaleFactor, m_deviceScaleFactor); |
1027 | 1027 |
1028 // First find out which layer was hit from the saved list of visible layers | 1028 // First find out which layer was hit from the saved list of visible layers |
1029 // in the most recent frame. | 1029 // in the most recent frame. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 m_numImplThreadScrolls++; | 1063 m_numImplThreadScrolls++; |
1064 return ScrollStarted; | 1064 return ScrollStarted; |
1065 } | 1065 } |
1066 return ScrollIgnored; | 1066 return ScrollIgnored; |
1067 } | 1067 } |
1068 | 1068 |
1069 static FloatSize scrollLayerWithScreenSpaceDelta(CCPinchZoomViewport* viewport,
CCLayerImpl& layerImpl, const FloatPoint& screenSpacePoint, const FloatSize& scr
eenSpaceDelta) | 1069 static FloatSize scrollLayerWithScreenSpaceDelta(CCPinchZoomViewport* viewport,
CCLayerImpl& layerImpl, const FloatPoint& screenSpacePoint, const FloatSize& scr
eenSpaceDelta) |
1070 { | 1070 { |
1071 // Layers with non-invertible screen space transforms should not have passed
the scroll hit | 1071 // Layers with non-invertible screen space transforms should not have passed
the scroll hit |
1072 // test in the first place. | 1072 // test in the first place. |
1073 ASSERT(layerImpl.screenSpaceTransform().isInvertible()); | 1073 DCHECK(layerImpl.screenSpaceTransform().isInvertible()); |
1074 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT
ransform().inverse(); | 1074 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT
ransform().inverse(); |
1075 | 1075 |
1076 // First project the scroll start and end points to local layer space to fin
d the scroll delta | 1076 // First project the scroll start and end points to local layer space to fin
d the scroll delta |
1077 // in layer coordinates. | 1077 // in layer coordinates. |
1078 bool startClipped, endClipped; | 1078 bool startClipped, endClipped; |
1079 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; | 1079 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; |
1080 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran
sform, screenSpacePoint, startClipped); | 1080 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran
sform, screenSpacePoint, startClipped); |
1081 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf
orm, screenSpaceEndPoint, endClipped); | 1081 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf
orm, screenSpaceEndPoint, endClipped); |
1082 | 1082 |
1083 // In general scroll point coordinates should not get clipped. | 1083 // In general scroll point coordinates should not get clipped. |
1084 ASSERT(!startClipped); | 1084 DCHECK(!startClipped); |
1085 ASSERT(!endClipped); | 1085 DCHECK(!endClipped); |
1086 if (startClipped || endClipped) | 1086 if (startClipped || endClipped) |
1087 return FloatSize(); | 1087 return FloatSize(); |
1088 | 1088 |
1089 // Apply the scroll delta. | 1089 // Apply the scroll delta. |
1090 FloatSize previousDelta(layerImpl.scrollDelta()); | 1090 FloatSize previousDelta(layerImpl.scrollDelta()); |
1091 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint); | 1091 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint); |
1092 | 1092 |
1093 if (viewport) | 1093 if (viewport) |
1094 viewport->applyScroll(unscrolled); | 1094 viewport->applyScroll(unscrolled); |
1095 | 1095 |
1096 // Calculate the applied scroll delta in screen space coordinates. | 1096 // Calculate the applied scroll delta in screen space coordinates. |
1097 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() -
previousDelta; | 1097 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() -
previousDelta; |
1098 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen
SpaceTransform(), actualLocalEndPoint, endClipped); | 1098 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen
SpaceTransform(), actualLocalEndPoint, endClipped); |
1099 ASSERT(!endClipped); | 1099 DCHECK(!endClipped); |
1100 if (endClipped) | 1100 if (endClipped) |
1101 return FloatSize(); | 1101 return FloatSize(); |
1102 return actualScreenSpaceEndPoint - screenSpacePoint; | 1102 return actualScreenSpaceEndPoint - screenSpacePoint; |
1103 } | 1103 } |
1104 | 1104 |
1105 static FloatSize scrollLayerWithLocalDelta(CCLayerImpl& layerImpl, const FloatSi
ze& localDelta) | 1105 static FloatSize scrollLayerWithLocalDelta(CCLayerImpl& layerImpl, const FloatSi
ze& localDelta) |
1106 { | 1106 { |
1107 FloatSize previousDelta(layerImpl.scrollDelta()); | 1107 FloatSize previousDelta(layerImpl.scrollDelta()); |
1108 layerImpl.scrollBy(localDelta); | 1108 layerImpl.scrollBy(localDelta); |
1109 return layerImpl.scrollDelta() - previousDelta; | 1109 return layerImpl.scrollDelta() - previousDelta; |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1377 setBackgroundTickingEnabled(!m_visible && m_needsAnimateLayers); | 1377 setBackgroundTickingEnabled(!m_visible && m_needsAnimateLayers); |
1378 } | 1378 } |
1379 | 1379 |
1380 base::TimeDelta CCLayerTreeHostImpl::lowFrequencyAnimationInterval() const | 1380 base::TimeDelta CCLayerTreeHostImpl::lowFrequencyAnimationInterval() const |
1381 { | 1381 { |
1382 return base::TimeDelta::FromSeconds(1); | 1382 return base::TimeDelta::FromSeconds(1); |
1383 } | 1383 } |
1384 | 1384 |
1385 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) | 1385 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) |
1386 { | 1386 { |
1387 ASSERT(current); | 1387 DCHECK(current); |
1388 current->didLoseContext(); | 1388 current->didLoseContext(); |
1389 if (current->maskLayer()) | 1389 if (current->maskLayer()) |
1390 sendDidLoseContextRecursive(current->maskLayer()); | 1390 sendDidLoseContextRecursive(current->maskLayer()); |
1391 if (current->replicaLayer()) | 1391 if (current->replicaLayer()) |
1392 sendDidLoseContextRecursive(current->replicaLayer()); | 1392 sendDidLoseContextRecursive(current->replicaLayer()); |
1393 for (size_t i = 0; i < current->children().size(); ++i) | 1393 for (size_t i = 0; i < current->children().size(); ++i) |
1394 sendDidLoseContextRecursive(current->children()[i]); | 1394 sendDidLoseContextRecursive(current->children()[i]); |
1395 } | 1395 } |
1396 | 1396 |
1397 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) | 1397 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) |
1398 { | 1398 { |
1399 ASSERT(current); | 1399 DCHECK(current); |
1400 for (size_t i = 0; i < current->children().size(); ++i) | 1400 for (size_t i = 0; i < current->children().size(); ++i) |
1401 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]); | 1401 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]); |
1402 current->clearRenderSurface(); | 1402 current->clearRenderSurface(); |
1403 } | 1403 } |
1404 | 1404 |
1405 void CCLayerTreeHostImpl::clearRenderSurfaces() | 1405 void CCLayerTreeHostImpl::clearRenderSurfaces() |
1406 { | 1406 { |
1407 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); | 1407 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); |
1408 m_renderSurfaceLayerList.clear(); | 1408 m_renderSurfaceLayerList.clear(); |
1409 } | 1409 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1453 | 1453 |
1454 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); | 1454 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); |
1455 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1455 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1456 m_client->setNeedsRedrawOnImplThread(); | 1456 m_client->setNeedsRedrawOnImplThread(); |
1457 | 1457 |
1458 for (size_t i = 0; i < layer->children().size(); ++i) | 1458 for (size_t i = 0; i < layer->children().size(); ++i) |
1459 animateScrollbarsRecursive(layer->children()[i], monotonicTime); | 1459 animateScrollbarsRecursive(layer->children()[i], monotonicTime); |
1460 } | 1460 } |
1461 | 1461 |
1462 } // namespace cc | 1462 } // namespace cc |
OLD | NEW |