Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h" | 5 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h" |
| 6 | 6 |
| 7 #include "cc/output/compositor_frame.h" | 7 #include "cc/output/compositor_frame.h" |
| 8 #include "content/browser/compositor/buffer_queue.h" | 8 #include "content/browser/compositor/buffer_queue.h" |
| 9 #include "content/browser/compositor/reflector_impl.h" | 9 #include "content/browser/compositor/reflector_impl.h" |
| 10 #include "content/browser/gpu/gpu_surface_tracker.h" | 10 #include "content/browser/gpu/gpu_surface_tracker.h" |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager, | 23 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager, |
| 24 scoped_ptr<cc::OverlayCandidateValidator> overlay_candidate_validator, | 24 scoped_ptr<cc::OverlayCandidateValidator> overlay_candidate_validator, |
| 25 unsigned internalformat, | 25 unsigned internalformat, |
| 26 bool use_own_gl_helper) | 26 bool use_own_gl_helper) |
| 27 : GpuBrowserCompositorOutputSurface(context, | 27 : GpuBrowserCompositorOutputSurface(context, |
| 28 surface_id, | 28 surface_id, |
| 29 output_surface_map, | 29 output_surface_map, |
| 30 vsync_manager, | 30 vsync_manager, |
| 31 overlay_candidate_validator.Pass()), | 31 overlay_candidate_validator.Pass()), |
| 32 internalformat_(internalformat), | 32 internalformat_(internalformat), |
| 33 use_own_gl_helper_(use_own_gl_helper) { | 33 use_own_gl_helper_(use_own_gl_helper), |
| 34 page_flip_completion_callback_( | |
| 35 base::Bind(&GpuSurfacelessBrowserCompositorOutputSurface:: | |
| 36 OnPageFlipCompleted, base::Unretained(this))) { | |
| 34 capabilities_.uses_default_gl_framebuffer = false; | 37 capabilities_.uses_default_gl_framebuffer = false; |
| 35 capabilities_.flipped_output_surface = true; | 38 capabilities_.flipped_output_surface = true; |
| 36 } | 39 } |
| 37 | 40 |
| 38 GpuSurfacelessBrowserCompositorOutputSurface:: | 41 GpuSurfacelessBrowserCompositorOutputSurface:: |
| 39 ~GpuSurfacelessBrowserCompositorOutputSurface() { | 42 ~GpuSurfacelessBrowserCompositorOutputSurface() { |
|
alexst (slow to review)
2014/12/10 23:19:25
Should the callback be reset here?
| |
| 40 } | 43 } |
| 41 | 44 |
| 42 void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers( | 45 void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers( |
| 43 cc::CompositorFrame* frame) { | 46 cc::CompositorFrame* frame) { |
| 44 DCHECK(output_surface_); | 47 DCHECK(output_surface_); |
| 45 | 48 |
| 46 GLuint texture = output_surface_->current_texture_id(); | 49 GLuint texture = output_surface_->current_texture_id(); |
| 47 output_surface_->SwapBuffers(frame->gl_frame_data->sub_buffer_rect); | 50 output_surface_->SwapBuffers(frame->gl_frame_data->sub_buffer_rect); |
| 48 const gfx::Size& size = frame->gl_frame_data->size; | 51 const gfx::Size& size = frame->gl_frame_data->size; |
| 49 context_provider_->ContextGL()->ScheduleOverlayPlaneCHROMIUM( | 52 context_provider_->ContextGL()->ScheduleOverlayPlaneCHROMIUM( |
| 50 0, | 53 0, |
| 51 GL_OVERLAY_TRANSFORM_NONE_CHROMIUM, | 54 GL_OVERLAY_TRANSFORM_NONE_CHROMIUM, |
| 52 texture, | 55 texture, |
| 53 0, | 56 0, |
| 54 0, | 57 0, |
| 55 size.width(), | 58 size.width(), |
| 56 size.height(), | 59 size.height(), |
| 57 0, | 60 0, |
| 58 0, | 61 0, |
| 59 1.0f, | 62 1.0f, |
| 60 1.0f); | 63 1.0f); |
| 61 GpuBrowserCompositorOutputSurface::SwapBuffers(frame); | 64 GpuBrowserCompositorOutputSurface::SwapBuffers(frame); |
| 62 } | 65 } |
| 63 | 66 |
| 64 void GpuSurfacelessBrowserCompositorOutputSurface::OnSwapBuffersComplete() { | 67 void GpuSurfacelessBrowserCompositorOutputSurface::OnSwapBuffersComplete() { |
| 65 DCHECK(output_surface_); | 68 DCHECK(output_surface_); |
| 66 output_surface_->PageFlipComplete(); | |
| 67 GpuBrowserCompositorOutputSurface::OnSwapBuffersComplete(); | 69 GpuBrowserCompositorOutputSurface::OnSwapBuffersComplete(); |
| 68 } | 70 } |
| 69 | 71 |
| 70 void GpuSurfacelessBrowserCompositorOutputSurface::BindFramebuffer() { | 72 void GpuSurfacelessBrowserCompositorOutputSurface::BindFramebuffer() { |
| 71 DCHECK(output_surface_); | 73 DCHECK(output_surface_); |
| 72 output_surface_->BindFramebuffer(); | 74 output_surface_->BindFramebuffer(); |
| 73 } | 75 } |
| 74 | 76 |
| 75 void GpuSurfacelessBrowserCompositorOutputSurface::Reshape( | 77 void GpuSurfacelessBrowserCompositorOutputSurface::Reshape( |
| 76 const gfx::Size& size, | 78 const gfx::Size& size, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 90 context_provider_->ContextSupport())); | 92 context_provider_->ContextSupport())); |
| 91 helper = gl_helper_.get(); | 93 helper = gl_helper_.get(); |
| 92 } else { | 94 } else { |
| 93 helper = ImageTransportFactory::GetInstance()->GetGLHelper(); | 95 helper = ImageTransportFactory::GetInstance()->GetGLHelper(); |
| 94 } | 96 } |
| 95 if (!helper) | 97 if (!helper) |
| 96 return false; | 98 return false; |
| 97 | 99 |
| 98 output_surface_.reset( | 100 output_surface_.reset( |
| 99 new BufferQueue(context_provider_, internalformat_, helper)); | 101 new BufferQueue(context_provider_, internalformat_, helper)); |
| 102 | |
| 103 GetCommandBufferProxy()->SetPageFlipCompletionCallback( | |
| 104 page_flip_completion_callback_.callback()); | |
|
alexst (slow to review)
2014/12/10 23:19:25
Why not base::Bind(&BufferQueue::PageFlipComplete,
kalyank
2014/12/11 12:55:58
Done.
| |
| 105 | |
| 100 return output_surface_->Initialize(); | 106 return output_surface_->Initialize(); |
| 101 } | 107 } |
| 102 | 108 |
| 109 void GpuSurfacelessBrowserCompositorOutputSurface::OnPageFlipCompleted() { | |
| 110 output_surface_->PageFlipComplete(); | |
| 111 } | |
| 112 | |
| 103 } // namespace content | 113 } // namespace content |
| OLD | NEW |