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

Side by Side Diff: cc/CCLayerTreeHost.cpp

Issue 10916292: Adaptively throttle texture uploads (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698