Title: [120759] trunk/Source/WebCore
Revision
120759
Author
[email protected]
Date
2012-06-19 15:18:48 -0700 (Tue, 19 Jun 2012)

Log Message

[chromium] Add an allocation step for CCRenderer before drawing a frame
https://bugs.webkit.org/show_bug.cgi?id=88924

Reviewed by Adrienne Walker.

This step will be used to decide which RenderPass textures can be kept
alive and do not need to be drawn again.

* platform/graphics/chromium/LayerRendererChromium.cpp:
(WebCore):
(WebCore::LayerRendererChromium::decideRenderPassAllocationsForFrame):
(WebCore::LayerRendererChromium::beginDrawingFrame):
* platform/graphics/chromium/LayerRendererChromium.h:
(LayerRendererChromium):
* platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
(WebCore::CCLayerTreeHostImpl::drawLayers):
* platform/graphics/chromium/cc/CCRenderer.h:
(CCRenderer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (120758 => 120759)


--- trunk/Source/WebCore/ChangeLog	2012-06-19 22:01:11 UTC (rev 120758)
+++ trunk/Source/WebCore/ChangeLog	2012-06-19 22:18:48 UTC (rev 120759)
@@ -1,3 +1,24 @@
+2012-06-19  Dana Jansens  <[email protected]>
+
+        [chromium] Add an allocation step for CCRenderer before drawing a frame
+        https://bugs.webkit.org/show_bug.cgi?id=88924
+
+        Reviewed by Adrienne Walker.
+
+        This step will be used to decide which RenderPass textures can be kept
+        alive and do not need to be drawn again.
+
+        * platform/graphics/chromium/LayerRendererChromium.cpp:
+        (WebCore):
+        (WebCore::LayerRendererChromium::decideRenderPassAllocationsForFrame):
+        (WebCore::LayerRendererChromium::beginDrawingFrame):
+        * platform/graphics/chromium/LayerRendererChromium.h:
+        (LayerRendererChromium):
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
+        (WebCore::CCLayerTreeHostImpl::drawLayers):
+        * platform/graphics/chromium/cc/CCRenderer.h:
+        (CCRenderer):
+
 2012-06-19  Alexandru Chiculita  <[email protected]>
 
         [CSS Shaders] Create a shared object between FECustomFilter objects to store the shared resources

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (120758 => 120759)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-06-19 22:01:11 UTC (rev 120758)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-06-19 22:18:48 UTC (rev 120759)
@@ -429,6 +429,17 @@
     GLC(m_context, m_context->enable(GraphicsContext3D::SCISSOR_TEST));
 }
 
+
+void LayerRendererChromium::decideRenderPassAllocationsForFrame(const CCRenderPassList& renderPassesInDrawOrder)
+{
+    // FIXME: Get this memory limit from GPU Memory Manager
+    size_t contentsMemoryUseBytes = m_contentsTextureAllocator->currentMemoryUseBytes();
+    size_t maxLimitBytes = TextureManager::highLimitBytes(viewportSize());
+    size_t memoryLimitBytes = maxLimitBytes - contentsMemoryUseBytes > 0u ? maxLimitBytes - contentsMemoryUseBytes : 0u;
+
+    m_implTextureManager->setMaxMemoryLimitBytes(memoryLimitBytes);
+}
+
 void LayerRendererChromium::beginDrawingFrame(const CCRenderPass* rootRenderPass)
 {
     // FIXME: Remove this once framebuffer is automatically recreated on first use
@@ -437,11 +448,6 @@
     m_defaultRenderPass = rootRenderPass;
     ASSERT(m_defaultRenderPass);
 
-    size_t contentsMemoryUseBytes = m_contentsTextureAllocator->currentMemoryUseBytes();
-    size_t maxLimit = TextureManager::highLimitBytes(viewportSize());
-    size_t newLimit = (maxLimit > contentsMemoryUseBytes) ? maxLimit - contentsMemoryUseBytes : 0;
-    m_implTextureManager->setMaxMemoryLimitBytes(newLimit);
-
     if (viewportSize().isEmpty())
         return;
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h (120758 => 120759)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2012-06-19 22:01:11 UTC (rev 120758)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2012-06-19 22:18:48 UTC (rev 120759)
@@ -76,6 +76,7 @@
 
     const FloatQuad& sharedGeometryQuad() const { return m_sharedGeometryQuad; }
 
+    virtual void decideRenderPassAllocationsForFrame(const CCRenderPassList&) OVERRIDE;
     virtual void beginDrawingFrame(const CCRenderPass* defaultRenderPass) OVERRIDE;
     virtual void drawRenderPass(const CCRenderPass*, const FloatRect& framebufferDamageRect) OVERRIDE;
     virtual void finishDrawingFrame() OVERRIDE;

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (120758 => 120759)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-06-19 22:01:11 UTC (rev 120758)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-06-19 22:18:48 UTC (rev 120759)
@@ -336,6 +336,7 @@
     if (drawFrame)
         occlusionTracker.overdrawMetrics().recordMetrics(this);
 
+    m_layerRenderer->decideRenderPassAllocationsForFrame(frame.renderPasses);
     removePassesWithCachedTextures(frame.renderPasses, frame.skippedPasses);
 
     return drawFrame;

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderer.h (120758 => 120759)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderer.h	2012-06-19 22:01:11 UTC (rev 120758)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderer.h	2012-06-19 22:18:48 UTC (rev 120759)
@@ -29,12 +29,12 @@
 #include "FloatQuad.h"
 #include "IntRect.h"
 #include "cc/CCLayerTreeHost.h"
+#include "cc/CCRenderPass.h"
 #include <wtf/Noncopyable.h>
 #include <wtf/PassRefPtr.h>
 
 namespace WebCore {
 
-class CCRenderPass;
 class TextureAllocator;
 class TextureCopier;
 class TextureManager;
@@ -68,6 +68,7 @@
     const WebKit::WebTransformationMatrix& projectionMatrix() const { return m_projectionMatrix; }
     const WebKit::WebTransformationMatrix& windowMatrix() const { return m_windowMatrix; }
 
+    virtual void decideRenderPassAllocationsForFrame(const CCRenderPassList&) = 0;
     virtual void beginDrawingFrame(const CCRenderPass* defaultRenderPass) = 0;
     virtual void drawRenderPass(const CCRenderPass*, const FloatRect& rootScissorRectInCurrentPass) = 0;
     virtual void finishDrawingFrame() = 0;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to