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 "CCLayerTreeHost.h" | 7 #include "CCLayerTreeHost.h" |
8 | 8 |
9 #include "CCFontAtlas.h" | 9 #include "CCFontAtlas.h" |
10 #include "CCGraphicsContext.h" | 10 #include "CCGraphicsContext.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 , m_numFailedRecreateAttempts(0) | 61 , m_numFailedRecreateAttempts(0) |
62 , m_settings(settings) | 62 , m_settings(settings) |
63 , m_deviceScaleFactor(1) | 63 , m_deviceScaleFactor(1) |
64 , m_visible(true) | 64 , m_visible(true) |
65 , m_pageScaleFactor(1) | 65 , m_pageScaleFactor(1) |
66 , m_minPageScaleFactor(1) | 66 , m_minPageScaleFactor(1) |
67 , m_maxPageScaleFactor(1) | 67 , m_maxPageScaleFactor(1) |
68 , m_triggerIdleUpdates(true) | 68 , m_triggerIdleUpdates(true) |
69 , m_backgroundColor(SK_ColorWHITE) | 69 , m_backgroundColor(SK_ColorWHITE) |
70 , m_hasTransparentBackground(false) | 70 , m_hasTransparentBackground(false) |
71 , m_maxPartialTextureUpdates(0) | |
71 , m_partialTextureUpdateRequests(0) | 72 , m_partialTextureUpdateRequests(0) |
72 { | 73 { |
73 ASSERT(CCProxy::isMainThread()); | 74 ASSERT(CCProxy::isMainThread()); |
74 numLayerTreeInstances++; | 75 numLayerTreeInstances++; |
75 } | 76 } |
76 | 77 |
77 bool CCLayerTreeHost::initialize() | 78 bool CCLayerTreeHost::initialize() |
78 { | 79 { |
79 TRACE_EVENT0("cc", "CCLayerTreeHost::initialize"); | 80 TRACE_EVENT0("cc", "CCLayerTreeHost::initialize"); |
80 | 81 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 TRACE_EVENT0("cc", "CCLayerTreeHost::initializeRenderer"); | 113 TRACE_EVENT0("cc", "CCLayerTreeHost::initializeRenderer"); |
113 if (!m_proxy->initializeRenderer()) { | 114 if (!m_proxy->initializeRenderer()) { |
114 // Uh oh, better tell the client that we can't do anything with this con text. | 115 // Uh oh, better tell the client that we can't do anything with this con text. |
115 m_client->didRecreateOutputSurface(false); | 116 m_client->didRecreateOutputSurface(false); |
116 return; | 117 return; |
117 } | 118 } |
118 | 119 |
119 // Update m_settings based on capabilities that we got back from the rendere r. | 120 // Update m_settings based on capabilities that we got back from the rendere r. |
120 m_settings.acceleratePainting = m_proxy->rendererCapabilities().usingAcceler atedPainting; | 121 m_settings.acceleratePainting = m_proxy->rendererCapabilities().usingAcceler atedPainting; |
121 | 122 |
122 // Update m_settings based on partial update capability. | |
123 m_settings.maxPartialTextureUpdates = min(m_settings.maxPartialTextureUpdate s, m_proxy->maxPartialTextureUpdates()); | |
124 | |
125 m_contentsTextureManager = CCPrioritizedTextureManager::create(0, m_proxy->r endererCapabilities().maxTextureSize, CCRenderer::ContentPool); | 123 m_contentsTextureManager = CCPrioritizedTextureManager::create(0, m_proxy->r endererCapabilities().maxTextureSize, CCRenderer::ContentPool); |
126 m_surfaceMemoryPlaceholder = m_contentsTextureManager->createTexture(IntSize (), GraphicsContext3D::RGBA); | 124 m_surfaceMemoryPlaceholder = m_contentsTextureManager->createTexture(IntSize (), GraphicsContext3D::RGBA); |
127 | 125 |
128 m_rendererInitialized = true; | 126 m_rendererInitialized = true; |
129 | 127 |
130 m_settings.defaultTileSize = IntSize(min(m_settings.defaultTileSize.width(), m_proxy->rendererCapabilities().maxTextureSize), | 128 m_settings.defaultTileSize = IntSize(min(m_settings.defaultTileSize.width(), m_proxy->rendererCapabilities().maxTextureSize), |
131 min(m_settings.defaultTileSize.height() , m_proxy->rendererCapabilities().maxTextureSize)); | 129 min(m_settings.defaultTileSize.height() , m_proxy->rendererCapabilities().maxTextureSize)); |
132 m_settings.maxUntiledLayerSize = IntSize(min(m_settings.maxUntiledLayerSize. width(), m_proxy->rendererCapabilities().maxTextureSize), | 130 m_settings.maxUntiledLayerSize = IntSize(min(m_settings.maxUntiledLayerSize. width(), m_proxy->rendererCapabilities().maxTextureSize), |
133 min(m_settings.maxUntiledLayerSize. height(), m_proxy->rendererCapabilities().maxTextureSize)); | 131 min(m_settings.maxUntiledLayerSize. height(), m_proxy->rendererCapabilities().maxTextureSize)); |
134 } | 132 } |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
444 if (!m_rendererInitialized) | 442 if (!m_rendererInitialized) |
445 return false; | 443 return false; |
446 } | 444 } |
447 if (m_contextLost) { | 445 if (m_contextLost) { |
448 if (recreateContext() != RecreateSucceeded) | 446 if (recreateContext() != RecreateSucceeded) |
449 return false; | 447 return false; |
450 } | 448 } |
451 return true; | 449 return true; |
452 } | 450 } |
453 | 451 |
454 void CCLayerTreeHost::updateLayers(CCTextureUpdateQueue& queue, size_t memoryAll ocationLimitBytes) | 452 void CCLayerTreeHost::updateLayers(CCTextureUpdateQueue& queue, size_t memoryAll ocationLimitBytes, size_t *maxTextureUpdates) |
455 { | 453 { |
456 ASSERT(m_rendererInitialized); | 454 ASSERT(m_rendererInitialized); |
457 ASSERT(memoryAllocationLimitBytes); | 455 ASSERT(memoryAllocationLimitBytes); |
458 | 456 |
459 if (!rootLayer()) | 457 if (!rootLayer()) |
460 return; | 458 return; |
461 | 459 |
462 if (layoutViewportSize().isEmpty()) | 460 if (layoutViewportSize().isEmpty()) |
463 return; | 461 return; |
464 | 462 |
465 m_contentsTextureManager->setMaxMemoryLimitBytes(memoryAllocationLimitBytes) ; | 463 m_contentsTextureManager->setMaxMemoryLimitBytes(memoryAllocationLimitBytes) ; |
466 | 464 |
467 updateLayers(rootLayer(), queue); | 465 updateLayers(rootLayer(), queue, maxTextureUpdates); |
468 } | 466 } |
469 | 467 |
470 static void setScale(LayerChromium* layer, float deviceScaleFactor, float pageSc aleFactor) | 468 static void setScale(LayerChromium* layer, float deviceScaleFactor, float pageSc aleFactor) |
471 { | 469 { |
472 if (layer->boundsContainPageScale()) | 470 if (layer->boundsContainPageScale()) |
473 layer->setContentsScale(deviceScaleFactor); | 471 layer->setContentsScale(deviceScaleFactor); |
474 else | 472 else |
475 layer->setContentsScale(deviceScaleFactor * pageScaleFactor); | 473 layer->setContentsScale(deviceScaleFactor * pageScaleFactor); |
476 } | 474 } |
477 | 475 |
478 static void updateLayerScale(LayerChromium* layer, float deviceScaleFactor, floa t pageScaleFactor) | 476 static void updateLayerScale(LayerChromium* layer, float deviceScaleFactor, floa t pageScaleFactor) |
479 { | 477 { |
480 setScale(layer, deviceScaleFactor, pageScaleFactor); | 478 setScale(layer, deviceScaleFactor, pageScaleFactor); |
481 | 479 |
482 LayerChromium* maskLayer = layer->maskLayer(); | 480 LayerChromium* maskLayer = layer->maskLayer(); |
483 if (maskLayer) | 481 if (maskLayer) |
484 setScale(maskLayer, deviceScaleFactor, pageScaleFactor); | 482 setScale(maskLayer, deviceScaleFactor, pageScaleFactor); |
485 | 483 |
486 LayerChromium* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLaye r()->maskLayer() : 0; | 484 LayerChromium* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLaye r()->maskLayer() : 0; |
487 if (replicaMaskLayer) | 485 if (replicaMaskLayer) |
488 setScale(replicaMaskLayer, deviceScaleFactor, pageScaleFactor); | 486 setScale(replicaMaskLayer, deviceScaleFactor, pageScaleFactor); |
489 | 487 |
490 const Vector<RefPtr<LayerChromium> >& children = layer->children(); | 488 const Vector<RefPtr<LayerChromium> >& children = layer->children(); |
491 for (unsigned int i = 0; i < children.size(); ++i) | 489 for (unsigned int i = 0; i < children.size(); ++i) |
492 updateLayerScale(children[i].get(), deviceScaleFactor, pageScaleFactor); | 490 updateLayerScale(children[i].get(), deviceScaleFactor, pageScaleFactor); |
493 } | 491 } |
494 | 492 |
495 void CCLayerTreeHost::updateLayers(LayerChromium* rootLayer, CCTextureUpdateQueu e& queue) | 493 void CCLayerTreeHost::updateLayers(LayerChromium* rootLayer, CCTextureUpdateQueu e& queue, size_t *maxTextureUpdates) |
496 { | 494 { |
497 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers"); | 495 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers"); |
498 | 496 |
499 updateLayerScale(rootLayer, m_deviceScaleFactor, m_pageScaleFactor); | 497 updateLayerScale(rootLayer, m_deviceScaleFactor, m_pageScaleFactor); |
500 | 498 |
501 LayerList updateList; | 499 LayerList updateList; |
502 | 500 |
503 { | 501 { |
504 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers::calcDrawEtc"); | 502 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers::calcDrawEtc"); |
505 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewport Size(), m_deviceScaleFactor, rendererCapabilities().maxTextureSize, updateList); | 503 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewport Size(), m_deviceScaleFactor, rendererCapabilities().maxTextureSize, updateList); |
506 CCLayerTreeHostCommon::calculateVisibleRects(updateList); | 504 CCLayerTreeHostCommon::calculateVisibleRects(updateList); |
507 } | 505 } |
508 | 506 |
509 // Reset partial texture update requests. | 507 // Reset partial texture update requests. |
510 m_partialTextureUpdateRequests = 0; | 508 m_partialTextureUpdateRequests = 0; |
509 m_maxPartialTextureUpdates = std::min(m_settings.maxPartialTextureUpdates, * maxTextureUpdates); | |
510 *maxTextureUpdates = m_maxPartialTextureUpdates; // We need to communicate t hat we've clamped. | |
brianderson
2012/09/13 20:09:26
Actually, I shouldn't communicate that we've clamp
| |
511 | 511 |
512 bool needMoreUpdates = paintLayerContents(updateList, queue); | 512 bool needMoreUpdates = paintLayerContents(updateList, queue); |
513 if (m_triggerIdleUpdates && needMoreUpdates) | 513 if (m_triggerIdleUpdates && needMoreUpdates) |
514 setNeedsCommit(); | 514 setNeedsCommit(); |
515 | 515 |
516 for (size_t i = 0; i < updateList.size(); ++i) | 516 for (size_t i = 0; i < updateList.size(); ++i) |
517 updateList[i]->clearRenderSurface(); | 517 updateList[i]->clearRenderSurface(); |
518 } | 518 } |
519 | 519 |
520 void CCLayerTreeHost::setPrioritiesForSurfaces(size_t surfaceMemoryBytes) | 520 void CCLayerTreeHost::setPrioritiesForSurfaces(size_t surfaceMemoryBytes) |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
709 m_proxy->forceSerializeOnSwapBuffers(); | 709 m_proxy->forceSerializeOnSwapBuffers(); |
710 } | 710 } |
711 | 711 |
712 bool CCLayerTreeHost::bufferedUpdates() | 712 bool CCLayerTreeHost::bufferedUpdates() |
713 { | 713 { |
714 return m_settings.maxPartialTextureUpdates != numeric_limits<size_t>::max(); | 714 return m_settings.maxPartialTextureUpdates != numeric_limits<size_t>::max(); |
715 } | 715 } |
716 | 716 |
717 bool CCLayerTreeHost::requestPartialTextureUpdate() | 717 bool CCLayerTreeHost::requestPartialTextureUpdate() |
718 { | 718 { |
719 if (m_partialTextureUpdateRequests >= m_settings.maxPartialTextureUpdates) | 719 if (m_partialTextureUpdateRequests >= m_maxPartialTextureUpdates) |
720 return false; | 720 return false; |
721 | 721 |
722 m_partialTextureUpdateRequests++; | 722 m_partialTextureUpdateRequests++; |
723 return true; | 723 return true; |
724 } | 724 } |
725 | 725 |
726 void CCLayerTreeHost::deleteTextureAfterCommit(PassOwnPtr<CCPrioritizedTexture> texture) | 726 void CCLayerTreeHost::deleteTextureAfterCommit(PassOwnPtr<CCPrioritizedTexture> texture) |
727 { | 727 { |
728 m_deleteTextureAfterCommitList.append(texture); | 728 m_deleteTextureAfterCommitList.append(texture); |
729 } | 729 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
779 else | 779 else |
780 layer->notifyAnimationFinished(wallClockTime); | 780 layer->notifyAnimationFinished(wallClockTime); |
781 } | 781 } |
782 } | 782 } |
783 | 783 |
784 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn dex) | 784 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn dex) |
785 setAnimationEventsRecursive(events, layer->children()[childIndex].get(), wallClockTime); | 785 setAnimationEventsRecursive(events, layer->children()[childIndex].get(), wallClockTime); |
786 } | 786 } |
787 | 787 |
788 } // namespace WebCore | 788 } // namespace WebCore |
OLD | NEW |