| 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 |