Index: content/common/gpu/image_transport_surface_linux.cc |
diff --git a/content/common/gpu/image_transport_surface_linux.cc b/content/common/gpu/image_transport_surface_linux.cc |
index 28d560bc53b24b883311980bb3d47b2cddd0f88a..fca12556f159e4aec0881f54de88ef45f58a70ae 100644 |
--- a/content/common/gpu/image_transport_surface_linux.cc |
+++ b/content/common/gpu/image_transport_surface_linux.cc |
@@ -89,7 +89,7 @@ class EGLImageTransportSurface |
virtual gfx::Size GetSize() OVERRIDE; |
virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; |
virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; |
- virtual void SetVisible(bool visible) OVERRIDE; |
+ virtual void SetResourceUsage(ResourceUsage resourceUsage) OVERRIDE; |
protected: |
// ImageTransportSurface implementation |
@@ -136,7 +136,7 @@ class GLXImageTransportSurface |
virtual std::string GetExtensions(); |
virtual gfx::Size GetSize() OVERRIDE; |
virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; |
- virtual void SetVisible(bool visible) OVERRIDE; |
+ virtual void SetResourceUsage(ResourceUsage resourceUsage) OVERRIDE; |
protected: |
// ImageTransportSurface implementation: |
@@ -318,12 +318,21 @@ unsigned int EGLImageTransportSurface::GetBackingFrameBufferObject() { |
return fbo_id_; |
} |
-void EGLImageTransportSurface::SetVisible(bool visible) { |
- if (!visible && back_surface_.get() && front_surface_.get()) { |
- ReleaseSurface(&back_surface_); |
- } else if (visible && !back_surface_.get() && front_surface_.get()) { |
- // Leverage the OnResize hook because it does exactly what we want |
- OnResize(front_surface_->size()); |
+void EGLImageTransportSurface::SetResourceUsage(ResourceUsage resourceUsage) { |
+ switch (resourceUsage) { |
+ case RESOURCE_USAGE_FULL: |
+ if (!back_surface_.get() && front_surface_.get()) { |
+ // Leverage the OnResize hook because it does exactly what we want |
+ OnResize(front_surface_->size()); |
+ } |
+ break; |
+ case RESOURCE_USAGE_LESS: |
+ if (back_surface_.get() && front_surface_.get()) |
+ ReleaseSurface(&back_surface_); |
+ break; |
+ case RESOURCE_USAGE_NONE: |
+ // TODO(mmocny): drop all the buffers |
+ break; |
} |
} |
@@ -514,13 +523,19 @@ void GLXImageTransportSurface::ReleaseSurface() { |
bound_ = false; |
} |
-void GLXImageTransportSurface::SetVisible(bool visible) { |
+void GLXImageTransportSurface::SetResourceUsage(ResourceUsage resourceUsage) { |
Display* dpy = static_cast<Display*>(GetDisplay()); |
- if (!visible) { |
- XResizeWindow(dpy, window_, 1, 1); |
- } else { |
- XResizeWindow(dpy, window_, size_.width(), size_.height()); |
- needs_resize_ = true; |
+ switch (resourceUsage) { |
+ case RESOURCE_USAGE_FULL: |
+ XResizeWindow(dpy, window_, size_.width(), size_.height()); |
+ needs_resize_ = true; |
+ break; |
+ case RESOURCE_USAGE_LESS: |
+ XResizeWindow(dpy, window_, 1, 1); |
+ break; |
+ case RESOURCE_USAGE_NONE: |
+ // TODO(mmocny): drop all the buffers |
+ break; |
} |
glXWaitX(); |
} |