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

Unified Diff: cc/output/gl_renderer.h

Issue 2162193002: Add logic to GLRenderer to support RenderPassDrawQuad copying. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up. Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: cc/output/gl_renderer.h
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 30c227367f04c417ca458243429848b411ac9214..51161a14b025254c9c98681bf7a62c08f4c8c64d 100644
--- a/cc/output/gl_renderer.h
+++ b/cc/output/gl_renderer.h
@@ -20,6 +20,7 @@
#include "cc/quads/solid_color_draw_quad.h"
#include "cc/quads/tile_draw_quad.h"
#include "cc/quads/yuv_video_draw_quad.h"
+#include "cc/resources/scoped_resource.h"
#include "ui/gfx/geometry/quad_f.h"
class SkBitmap;
@@ -148,6 +149,11 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
private:
friend class GLRendererShaderPixelTest;
friend class GLRendererShaderTest;
+ FRIEND_TEST_ALL_PREFIXES(GLRendererRenderPassDrawQuadCopierTest, Reuse);
+ FRIEND_TEST_ALL_PREFIXES(GLRendererRenderPassDrawQuadCopierTest,
+ ReleaseResources);
+ FRIEND_TEST_ALL_PREFIXES(GLRendererRenderPassDrawQuadCopierTest,
+ MaxCacheSize);
static void ToGLMatrix(float* gl_matrix, const gfx::Transform& transform);
@@ -263,6 +269,16 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
void ScheduleCALayers(DrawingFrame* frame);
void ScheduleOverlays(DrawingFrame* frame);
+ void OverlayResourceNoLongerInUse(GLuint texture);
+ ResourceId CreateOrReuseIOSurface(const gfx::Size& size);
+ void DeleteIOSurfacesOverCacheLimit();
+
+ // RenderPassDrawQuadCopier
+ bool CopyRenderPassDrawQuadToIOSurface(const RenderPassDrawQuad* quad,
+ ResourceId* resource_id) override;
+ void ReleaseIOSurfaces(const std::vector<ResourceId>& resources) override;
+ void UpdateCopyCountForFrame(size_t count) override;
+
using OverlayResourceLock =
std::unique_ptr<ResourceProvider::ScopedReadLockGL>;
using OverlayResourceLockList = std::vector<OverlayResourceLock>;
@@ -521,6 +537,11 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
bool use_blend_equation_advanced_;
bool use_blend_equation_advanced_coherent_;
+ // Keep an LRU buffer of GMB resources to encourage reuse.
ccameron 2016/07/20 05:32:19 Can we use/augment the existing cc::ResourcePool::
erikchen 2016/07/20 21:48:01 Done.
+ std::vector<std::unique_ptr<ScopedResource>> in_use_iosurfaces_;
+ std::vector<std::unique_ptr<ScopedResource>> free_iosurfaces_;
+ size_t iosurface_limit_ = 0;
+
BoundGeometry bound_geometry_;
DISALLOW_COPY_AND_ASSIGN(GLRenderer);
};

Powered by Google App Engine
This is Rietveld 408576698