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_browser_compositor_output_surface.h" | 5 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 client_->DidReceiveSwapBuffersAck(); | 58 client_->DidReceiveSwapBuffersAck(); |
59 } | 59 } |
60 | 60 |
61 void GpuBrowserCompositorOutputSurface::OnReflectorChanged() { | 61 void GpuBrowserCompositorOutputSurface::OnReflectorChanged() { |
62 if (!reflector_) { | 62 if (!reflector_) { |
63 reflector_texture_.reset(); | 63 reflector_texture_.reset(); |
64 } else { | 64 } else { |
65 reflector_texture_.reset(new ReflectorTexture(context_provider())); | 65 reflector_texture_.reset(new ReflectorTexture(context_provider())); |
66 reflector_->OnSourceTextureMailboxUpdated(reflector_texture_->mailbox()); | 66 reflector_->OnSourceTextureMailboxUpdated(reflector_texture_->mailbox()); |
67 } | 67 } |
| 68 reflector_texture_defined_ = false; |
68 } | 69 } |
69 | 70 |
70 void GpuBrowserCompositorOutputSurface::BindToClient( | 71 void GpuBrowserCompositorOutputSurface::BindToClient( |
71 cc::OutputSurfaceClient* client) { | 72 cc::OutputSurfaceClient* client) { |
72 DCHECK(client); | 73 DCHECK(client); |
73 DCHECK(!client_); | 74 DCHECK(!client_); |
74 client_ = client; | 75 client_ = client; |
75 | 76 |
76 GetCommandBufferProxy()->SetSwapBuffersCompletionCallback( | 77 GetCommandBufferProxy()->SetSwapBuffersCompletionCallback( |
77 base::Bind(&GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted, | 78 base::Bind(&GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted, |
(...skipping 23 matching lines...) Expand all Loading... |
101 context_provider()->ContextGL()->ResizeCHROMIUM( | 102 context_provider()->ContextGL()->ResizeCHROMIUM( |
102 size.width(), size.height(), device_scale_factor, has_alpha); | 103 size.width(), size.height(), device_scale_factor, has_alpha); |
103 } | 104 } |
104 | 105 |
105 void GpuBrowserCompositorOutputSurface::SwapBuffers( | 106 void GpuBrowserCompositorOutputSurface::SwapBuffers( |
106 cc::OutputSurfaceFrame frame) { | 107 cc::OutputSurfaceFrame frame) { |
107 GetCommandBufferProxy()->SetLatencyInfo(frame.latency_info); | 108 GetCommandBufferProxy()->SetLatencyInfo(frame.latency_info); |
108 | 109 |
109 gfx::Size surface_size = frame.size; | 110 gfx::Size surface_size = frame.size; |
110 if (reflector_) { | 111 if (reflector_) { |
111 if (frame.sub_buffer_rect) { | 112 if (frame.sub_buffer_rect && reflector_texture_defined_) { |
112 reflector_texture_->CopyTextureSubImage(*frame.sub_buffer_rect); | 113 reflector_texture_->CopyTextureSubImage(*frame.sub_buffer_rect); |
113 reflector_->OnSourcePostSubBuffer(*frame.sub_buffer_rect, surface_size); | 114 reflector_->OnSourcePostSubBuffer(*frame.sub_buffer_rect, surface_size); |
114 } else { | 115 } else { |
115 reflector_texture_->CopyTextureFullImage(surface_size); | 116 reflector_texture_->CopyTextureFullImage(surface_size); |
116 reflector_->OnSourceSwapBuffers(surface_size); | 117 reflector_->OnSourceSwapBuffers(surface_size); |
| 118 reflector_texture_defined_ = true; |
117 } | 119 } |
118 } | 120 } |
119 | 121 |
120 set_draw_rectangle_for_frame_ = false; | 122 set_draw_rectangle_for_frame_ = false; |
121 | 123 |
122 if (frame.sub_buffer_rect) { | 124 if (frame.sub_buffer_rect) { |
123 DCHECK(frame.content_bounds.empty()); | 125 DCHECK(frame.content_bounds.empty()); |
124 context_provider_->ContextSupport()->PartialSwapBuffers( | 126 context_provider_->ContextSupport()->PartialSwapBuffers( |
125 *frame.sub_buffer_rect); | 127 *frame.sub_buffer_rect); |
126 } else if (!frame.content_bounds.empty()) { | 128 } else if (!frame.content_bounds.empty()) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() { | 171 GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() { |
170 ui::ContextProviderCommandBuffer* provider_command_buffer = | 172 ui::ContextProviderCommandBuffer* provider_command_buffer = |
171 static_cast<ui::ContextProviderCommandBuffer*>(context_provider_.get()); | 173 static_cast<ui::ContextProviderCommandBuffer*>(context_provider_.get()); |
172 gpu::CommandBufferProxyImpl* command_buffer_proxy = | 174 gpu::CommandBufferProxyImpl* command_buffer_proxy = |
173 provider_command_buffer->GetCommandBufferProxy(); | 175 provider_command_buffer->GetCommandBufferProxy(); |
174 DCHECK(command_buffer_proxy); | 176 DCHECK(command_buffer_proxy); |
175 return command_buffer_proxy; | 177 return command_buffer_proxy; |
176 } | 178 } |
177 | 179 |
178 } // namespace content | 180 } // namespace content |
OLD | NEW |