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

Side by Side Diff: content/common/gpu/image_transport_surface_linux.cc

Issue 7890046: Command to mark surface inactive, so gpu process can release resources. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: first cut of IPC version Created 9 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "content/common/gpu/image_transport_surface.h" 7 #include "content/common/gpu/image_transport_surface.h"
8 8
9 // This conflicts with the defines in Xlib.h and must come first. 9 // This conflicts with the defines in Xlib.h and must come first.
10 #include "content/common/gpu/gpu_messages.h" 10 #include "content/common/gpu/gpu_messages.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 virtual gfx::Size GetSize() OVERRIDE; 69 virtual gfx::Size GetSize() OVERRIDE;
70 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 70 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
71 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; 71 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
72 72
73 protected: 73 protected:
74 // ImageTransportSurface implementation 74 // ImageTransportSurface implementation
75 virtual void OnNewSurfaceACK( 75 virtual void OnNewSurfaceACK(
76 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 76 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
77 virtual void OnBuffersSwappedACK() OVERRIDE; 77 virtual void OnBuffersSwappedACK() OVERRIDE;
78 virtual void OnResize(gfx::Size size) OVERRIDE; 78 virtual void OnResize(gfx::Size size) OVERRIDE;
79 virtual void OnSetSurfaceVisible(bool visible) OVERRIDE;
79 80
80 private: 81 private:
81 virtual ~EGLImageTransportSurface() OVERRIDE; 82 virtual ~EGLImageTransportSurface() OVERRIDE;
82 void ReleaseSurface(scoped_refptr<EGLAcceleratedSurface>* surface); 83 void ReleaseSurface(scoped_refptr<EGLAcceleratedSurface>* surface);
83 84
84 uint32 fbo_id_; 85 uint32 fbo_id_;
85 86
86 scoped_refptr<EGLAcceleratedSurface> back_surface_; 87 scoped_refptr<EGLAcceleratedSurface> back_surface_;
87 scoped_refptr<EGLAcceleratedSurface> front_surface_; 88 scoped_refptr<EGLAcceleratedSurface> front_surface_;
88 89
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 302
302 GpuHostMsg_AcceleratedSurfaceNew_Params params; 303 GpuHostMsg_AcceleratedSurfaceNew_Params params;
303 params.width = size.width(); 304 params.width = size.width();
304 params.height = size.height(); 305 params.height = size.height();
305 params.surface_id = back_surface_->pixmap(); 306 params.surface_id = back_surface_->pixmap();
306 helper_->SendAcceleratedSurfaceNew(params); 307 helper_->SendAcceleratedSurfaceNew(params);
307 308
308 helper_->SetScheduled(false); 309 helper_->SetScheduled(false);
309 } 310 }
310 311
312 void EGLImageTransportSurface::OnSetSurfaceVisible(bool visible) {
313 if (!visible && back_surface_.get() && front_surface_.get()) {
314 ReleaseSurface(&back_surface_);
315 } else if (visible && !back_surface_.get() && front_surface_.get()) {
316 // Leverage the OnResize hook because it does exactly what we want
317 OnResize(front_surface_->size());
318 }
319 }
320
311 bool EGLImageTransportSurface::SwapBuffers() { 321 bool EGLImageTransportSurface::SwapBuffers() {
312 front_surface_.swap(back_surface_); 322 front_surface_.swap(back_surface_);
313 DCHECK_NE(front_surface_.get(), static_cast<EGLAcceleratedSurface*>(NULL)); 323 DCHECK_NE(front_surface_.get(), static_cast<EGLAcceleratedSurface*>(NULL));
314 glFlush(); 324 glFlush();
315 325
316 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 326 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
317 params.surface_id = front_surface_->pixmap(); 327 params.surface_id = front_surface_->pixmap();
318 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 328 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
319 329
320 gfx::Size expected_size = front_surface_->size(); 330 gfx::Size expected_size = front_surface_->size();
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 NOTREACHED(); 629 NOTREACHED();
620 return NULL; 630 return NULL;
621 } 631 }
622 if (surface->Initialize()) 632 if (surface->Initialize())
623 return surface; 633 return surface;
624 else 634 else
625 return NULL; 635 return NULL;
626 } 636 }
627 637
628 #endif // defined(USE_GPU) 638 #endif // defined(USE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698