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

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: Flush only on hide 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 virtual gfx::Size GetSize() OVERRIDE; 49 virtual gfx::Size GetSize() OVERRIDE;
50 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 50 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
51 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; 51 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
52 52
53 protected: 53 protected:
54 // ImageTransportSurface implementation 54 // ImageTransportSurface implementation
55 virtual void OnNewSurfaceACK( 55 virtual void OnNewSurfaceACK(
56 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 56 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
57 virtual void OnBuffersSwappedACK() OVERRIDE; 57 virtual void OnBuffersSwappedACK() OVERRIDE;
58 virtual void OnResize(gfx::Size size) OVERRIDE; 58 virtual void OnResize(gfx::Size size) OVERRIDE;
59 virtual void OnSurfaceVisible(bool visible) OVERRIDE;
59 60
60 private: 61 private:
61 virtual ~EGLImageTransportSurface() OVERRIDE; 62 virtual ~EGLImageTransportSurface() OVERRIDE;
62 void ReleaseSurface(scoped_refptr<AcceleratedSurface>* surface); 63 void ReleaseSurface(scoped_refptr<AcceleratedSurface>* surface);
63 64
64 uint32 fbo_id_; 65 uint32 fbo_id_;
65 66
66 scoped_refptr<AcceleratedSurface> back_surface_; 67 scoped_refptr<AcceleratedSurface> back_surface_;
67 scoped_refptr<AcceleratedSurface> front_surface_; 68 scoped_refptr<AcceleratedSurface> front_surface_;
68 69
(...skipping 18 matching lines...) Expand all
87 virtual bool SwapBuffers() OVERRIDE; 88 virtual bool SwapBuffers() OVERRIDE;
88 virtual gfx::Size GetSize() OVERRIDE; 89 virtual gfx::Size GetSize() OVERRIDE;
89 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 90 virtual void OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
90 91
91 protected: 92 protected:
92 // ImageTransportSurface implementation: 93 // ImageTransportSurface implementation:
93 virtual void OnNewSurfaceACK( 94 virtual void OnNewSurfaceACK(
94 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 95 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
95 virtual void OnBuffersSwappedACK() OVERRIDE; 96 virtual void OnBuffersSwappedACK() OVERRIDE;
96 virtual void OnResize(gfx::Size size) OVERRIDE; 97 virtual void OnResize(gfx::Size size) OVERRIDE;
98 virtual void OnSurfaceVisible(bool visible) OVERRIDE;
97 99
98 private: 100 private:
99 virtual ~GLXImageTransportSurface(); 101 virtual ~GLXImageTransportSurface();
100 102
101 // Tell the browser to release the surface. 103 // Tell the browser to release the surface.
102 void ReleaseSurface(); 104 void ReleaseSurface();
103 105
104 XID dummy_parent_; 106 XID dummy_parent_;
105 gfx::Size size_; 107 gfx::Size size_;
106 108
(...skipping 26 matching lines...) Expand all
133 virtual bool SwapBuffers() OVERRIDE; 135 virtual bool SwapBuffers() OVERRIDE;
134 virtual gfx::Size GetSize() OVERRIDE; 136 virtual gfx::Size GetSize() OVERRIDE;
135 virtual void* GetHandle() OVERRIDE; 137 virtual void* GetHandle() OVERRIDE;
136 138
137 protected: 139 protected:
138 // ImageTransportSurface implementation: 140 // ImageTransportSurface implementation:
139 virtual void OnNewSurfaceACK( 141 virtual void OnNewSurfaceACK(
140 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 142 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
141 virtual void OnBuffersSwappedACK() OVERRIDE; 143 virtual void OnBuffersSwappedACK() OVERRIDE;
142 virtual void OnResize(gfx::Size size) OVERRIDE; 144 virtual void OnResize(gfx::Size size) OVERRIDE;
145 virtual void OnSurfaceVisible(bool visible) OVERRIDE;
143 146
144 private: 147 private:
145 virtual ~OSMesaImageTransportSurface(); 148 virtual ~OSMesaImageTransportSurface();
146 149
147 // Tell the browser to release the surface. 150 // Tell the browser to release the surface.
148 void ReleaseSurface(); 151 void ReleaseSurface();
149 152
150 scoped_ptr<TransportDIB> shared_mem_; 153 scoped_ptr<TransportDIB> shared_mem_;
151 uint32 shared_id_; 154 uint32 shared_id_;
152 gfx::Size size_; 155 gfx::Size size_;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 242
240 GpuHostMsg_AcceleratedSurfaceNew_Params params; 243 GpuHostMsg_AcceleratedSurfaceNew_Params params;
241 params.width = size.width(); 244 params.width = size.width();
242 params.height = size.height(); 245 params.height = size.height();
243 params.surface_id = back_surface_->pixmap(); 246 params.surface_id = back_surface_->pixmap();
244 helper_->SendAcceleratedSurfaceNew(params); 247 helper_->SendAcceleratedSurfaceNew(params);
245 248
246 helper_->SetScheduled(false); 249 helper_->SetScheduled(false);
247 } 250 }
248 251
252 void EGLImageTransportSurface::OnSurfaceVisible(bool visible) {
253 if (!visible && back_surface_.get() && front_surface_.get()) {
254 ReleaseSurface(&back_surface_);
255 } else if (visible && !back_surface_.get() && front_surface_.get()) {
256 // Leverage the OnResize hook because it does exactly what we want
257 OnResize(front_surface_->size());
258 }
259 }
260
249 bool EGLImageTransportSurface::SwapBuffers() { 261 bool EGLImageTransportSurface::SwapBuffers() {
250 front_surface_.swap(back_surface_); 262 front_surface_.swap(back_surface_);
251 DCHECK_NE(front_surface_.get(), static_cast<AcceleratedSurface*>(NULL)); 263 DCHECK_NE(front_surface_.get(), static_cast<AcceleratedSurface*>(NULL));
252 glFlush(); 264 glFlush();
253 265
254 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 266 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
255 params.surface_id = front_surface_->pixmap(); 267 params.surface_id = front_surface_->pixmap();
256 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 268 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
257 269
258 gfx::Size expected_size = front_surface_->size(); 270 gfx::Size expected_size = front_surface_->size();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 394
383 GpuHostMsg_AcceleratedSurfaceNew_Params params; 395 GpuHostMsg_AcceleratedSurfaceNew_Params params;
384 params.width = size_.width(); 396 params.width = size_.width();
385 params.height = size_.height(); 397 params.height = size_.height();
386 params.surface_id = window_; 398 params.surface_id = window_;
387 helper_->SendAcceleratedSurfaceNew(params); 399 helper_->SendAcceleratedSurfaceNew(params);
388 400
389 helper_->SetScheduled(false); 401 helper_->SetScheduled(false);
390 } 402 }
391 403
404 void GLXImageTransportSurface::OnSurfaceVisible(bool visible) {
405 NOTREACHED();
jonathan.backer 2011/10/07 15:48:37 Probably will be reached? You'll need to add this
406 }
407
392 bool GLXImageTransportSurface::SwapBuffers() { 408 bool GLXImageTransportSurface::SwapBuffers() {
393 gfx::NativeViewGLSurfaceGLX::SwapBuffers(); 409 gfx::NativeViewGLSurfaceGLX::SwapBuffers();
394 glFlush(); 410 glFlush();
395 411
396 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 412 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
397 params.surface_id = window_; 413 params.surface_id = window_;
398 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 414 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
399 415
400 helper_->SetScheduled(false); 416 helper_->SetScheduled(false);
401 return true; 417 return true;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 502
487 GpuHostMsg_AcceleratedSurfaceNew_Params params; 503 GpuHostMsg_AcceleratedSurfaceNew_Params params;
488 params.width = size_.width(); 504 params.width = size_.width();
489 params.height = size_.height(); 505 params.height = size_.height();
490 params.surface_id = 0; // id comes from the browser with the shared mem 506 params.surface_id = 0; // id comes from the browser with the shared mem
491 helper_->SendAcceleratedSurfaceNew(params); 507 helper_->SendAcceleratedSurfaceNew(params);
492 508
493 helper_->SetScheduled(false); 509 helper_->SetScheduled(false);
494 } 510 }
495 511
512 void OSMesaImageTransportSurface::OnSurfaceVisible(bool visible) {
513 NOTREACHED();
514 }
515
496 void OSMesaImageTransportSurface::OnNewSurfaceACK( 516 void OSMesaImageTransportSurface::OnNewSurfaceACK(
497 uint64 surface_id, TransportDIB::Handle surface_handle) { 517 uint64 surface_id, TransportDIB::Handle surface_handle) {
498 shared_id_ = surface_id; 518 shared_id_ = surface_id;
499 shared_mem_.reset(TransportDIB::Map(surface_handle)); 519 shared_mem_.reset(TransportDIB::Map(surface_handle));
500 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL)); 520 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
501 521
502 // When we get the shared memory buffer back we can use that for OSMesa to 522 // When we get the shared memory buffer back we can use that for OSMesa to
503 // write in, so we give it to OSMesa. 523 // write in, so we give it to OSMesa.
504 helper_->MakeCurrent(); 524 helper_->MakeCurrent();
505 525
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 NOTREACHED(); 588 NOTREACHED();
569 return NULL; 589 return NULL;
570 } 590 }
571 if (surface->Initialize()) 591 if (surface->Initialize())
572 return surface; 592 return surface;
573 else 593 else
574 return NULL; 594 return NULL;
575 } 595 }
576 596
577 #endif // defined(USE_GPU) 597 #endif // defined(USE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698