| 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/common/gpu/image_transport_surface_fbo_mac.h" | 5 #include "content/common/gpu/image_transport_surface_fbo_mac.h" |
| 6 | 6 |
| 7 #include "base/trace_event/trace_event.h" |
| 7 #include "content/common/gpu/gpu_messages.h" | 8 #include "content/common/gpu/gpu_messages.h" |
| 8 #include "content/common/gpu/image_transport_surface_calayer_mac.h" | 9 #include "content/common/gpu/image_transport_surface_calayer_mac.h" |
| 9 #include "content/common/gpu/image_transport_surface_iosurface_mac.h" | 10 #include "content/common/gpu/image_transport_surface_iosurface_mac.h" |
| 10 #include "ui/base/cocoa/remote_layer_api.h" | 11 #include "ui/base/cocoa/remote_layer_api.h" |
| 11 #include "ui/gfx/native_widget_types.h" | 12 #include "ui/gfx/native_widget_types.h" |
| 12 #include "ui/gl/gl_context.h" | 13 #include "ui/gl/gl_context.h" |
| 13 #include "ui/gl/gl_implementation.h" | 14 #include "ui/gl/gl_implementation.h" |
| 14 #include "ui/gl/gl_surface_osmesa.h" | 15 #include "ui/gl/gl_surface_osmesa.h" |
| 15 | 16 |
| 16 namespace content { | 17 namespace content { |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 if (!backbuffer_suggested_allocation_ && | 163 if (!backbuffer_suggested_allocation_ && |
| 163 !frontbuffer_suggested_allocation_ && | 164 !frontbuffer_suggested_allocation_ && |
| 164 has_complete_framebuffer_) { | 165 has_complete_framebuffer_) { |
| 165 DestroyFramebuffer(); | 166 DestroyFramebuffer(); |
| 166 } else if (backbuffer_suggested_allocation_ && !has_complete_framebuffer_) { | 167 } else if (backbuffer_suggested_allocation_ && !has_complete_framebuffer_) { |
| 167 AllocateOrResizeFramebuffer(pixel_size_, scale_factor_); | 168 AllocateOrResizeFramebuffer(pixel_size_, scale_factor_); |
| 168 } | 169 } |
| 169 } | 170 } |
| 170 | 171 |
| 171 bool ImageTransportSurfaceFBO::SwapBuffers() { | 172 bool ImageTransportSurfaceFBO::SwapBuffers() { |
| 173 TRACE_EVENT0("gpu", "ImageTransportSurfaceFBO::SwapBuffers"); |
| 172 return SwapBuffersInternal(); | 174 return SwapBuffersInternal(); |
| 173 } | 175 } |
| 174 | 176 |
| 175 bool ImageTransportSurfaceFBO::SwapBuffersInternal() { | 177 bool ImageTransportSurfaceFBO::SwapBuffersInternal() { |
| 176 DCHECK(backbuffer_suggested_allocation_); | 178 DCHECK(backbuffer_suggested_allocation_); |
| 177 if (!frontbuffer_suggested_allocation_) | 179 if (!frontbuffer_suggested_allocation_) |
| 178 return true; | 180 return true; |
| 179 glFlush(); | 181 glFlush(); |
| 180 | 182 |
| 181 // It is the responsibility of the storage provider to send the swap IPC. | 183 // It is the responsibility of the storage provider to send the swap IPC. |
| 182 is_swap_buffers_send_pending_ = true; | 184 is_swap_buffers_send_pending_ = true; |
| 183 storage_provider_->SwapBuffers(); | 185 storage_provider_->SwapBuffers(); |
| 184 | 186 |
| 185 // The call to swapBuffers could potentially result in an immediate draw. | 187 // The call to swapBuffers could potentially result in an immediate draw. |
| 186 // Ensure that any changes made to the context's state are restored. | 188 // Ensure that any changes made to the context's state are restored. |
| 187 context_->RestoreStateIfDirtiedExternally(); | 189 context_->RestoreStateIfDirtiedExternally(); |
| 188 return true; | 190 return true; |
| 189 } | 191 } |
| 190 | 192 |
| 191 void ImageTransportSurfaceFBO::SendSwapBuffers(uint64 surface_handle, | 193 void ImageTransportSurfaceFBO::SendSwapBuffers(uint64 surface_handle, |
| 192 const gfx::Size pixel_size, | 194 const gfx::Size pixel_size, |
| 193 float scale_factor) { | 195 float scale_factor) { |
| 196 TRACE_EVENT0("gpu", "ImageTransportSurfaceFBO::SendSwapBuffers"); |
| 194 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; | 197 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; |
| 195 params.surface_handle = surface_handle; | 198 params.surface_handle = surface_handle; |
| 196 params.size = pixel_size; | 199 params.size = pixel_size; |
| 197 params.scale_factor = scale_factor; | 200 params.scale_factor = scale_factor; |
| 198 params.latency_info.swap(latency_info_); | 201 params.latency_info.swap(latency_info_); |
| 199 helper_->SendAcceleratedSurfaceBuffersSwapped(params); | 202 helper_->SendAcceleratedSurfaceBuffersSwapped(params); |
| 200 is_swap_buffers_send_pending_ = false; | 203 is_swap_buffers_send_pending_ = false; |
| 201 } | 204 } |
| 202 | 205 |
| 203 void ImageTransportSurfaceFBO::SetRendererID(int renderer_id) { | 206 void ImageTransportSurfaceFBO::SetRendererID(int renderer_id) { |
| 204 if (renderer_id) | 207 if (renderer_id) |
| 205 context_->share_group()->SetRendererID(renderer_id); | 208 context_->share_group()->SetRendererID(renderer_id); |
| 206 } | 209 } |
| 207 | 210 |
| 208 bool ImageTransportSurfaceFBO::PostSubBuffer( | 211 bool ImageTransportSurfaceFBO::PostSubBuffer( |
| 209 int x, int y, int width, int height) { | 212 int x, int y, int width, int height) { |
| 213 TRACE_EVENT0("gpu", "ImageTransportSurfaceFBO::PostSubBuffer"); |
| 210 return SwapBuffersInternal(); | 214 return SwapBuffersInternal(); |
| 211 } | 215 } |
| 212 | 216 |
| 213 bool ImageTransportSurfaceFBO::SupportsPostSubBuffer() { | 217 bool ImageTransportSurfaceFBO::SupportsPostSubBuffer() { |
| 214 return true; | 218 return true; |
| 215 } | 219 } |
| 216 | 220 |
| 217 gfx::Size ImageTransportSurfaceFBO::GetSize() { | 221 gfx::Size ImageTransportSurfaceFBO::GetSize() { |
| 218 return pixel_size_; | 222 return pixel_size_; |
| 219 } | 223 } |
| 220 | 224 |
| 221 void* ImageTransportSurfaceFBO::GetHandle() { | 225 void* ImageTransportSurfaceFBO::GetHandle() { |
| 222 return NULL; | 226 return NULL; |
| 223 } | 227 } |
| 224 | 228 |
| 225 void* ImageTransportSurfaceFBO::GetDisplay() { | 229 void* ImageTransportSurfaceFBO::GetDisplay() { |
| 226 return NULL; | 230 return NULL; |
| 227 } | 231 } |
| 228 | 232 |
| 229 void ImageTransportSurfaceFBO::OnBufferPresented( | 233 void ImageTransportSurfaceFBO::OnBufferPresented( |
| 230 const AcceleratedSurfaceMsg_BufferPresented_Params& params) { | 234 const AcceleratedSurfaceMsg_BufferPresented_Params& params) { |
| 235 TRACE_EVENT0("gpu", "ImageTransportSurfaceFBO::OnBufferPresented"); |
| 231 SetRendererID(params.renderer_id); | 236 SetRendererID(params.renderer_id); |
| 232 storage_provider_->SwapBuffersAckedByBrowser(params.disable_throttling); | 237 storage_provider_->SwapBuffersAckedByBrowser(params.disable_throttling); |
| 233 } | 238 } |
| 234 | 239 |
| 235 void ImageTransportSurfaceFBO::OnResize(gfx::Size pixel_size, | 240 void ImageTransportSurfaceFBO::OnResize(gfx::Size pixel_size, |
| 236 float scale_factor) { | 241 float scale_factor) { |
| 237 TRACE_EVENT2("gpu", "ImageTransportSurfaceFBO::OnResize", | 242 TRACE_EVENT2("gpu", "ImageTransportSurfaceFBO::OnResize", |
| 238 "old_size", pixel_size_.ToString(), | 243 "old_size", pixel_size_.ToString(), |
| 239 "new_size", pixel_size.ToString()); | 244 "new_size", pixel_size.ToString()); |
| 240 // Caching |context_| from OnMakeCurrent. It should still be current. | 245 // Caching |context_| from OnMakeCurrent. It should still be current. |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 } | 407 } |
| 403 | 408 |
| 404 has_complete_framebuffer_ = true; | 409 has_complete_framebuffer_ = true; |
| 405 storage_provider_->FrameSizeChanged(pixel_size_, scale_factor_); | 410 storage_provider_->FrameSizeChanged(pixel_size_, scale_factor_); |
| 406 | 411 |
| 407 glBindTexture(texture_target, previous_texture_id); | 412 glBindTexture(texture_target, previous_texture_id); |
| 408 // The FBO remains bound for this GL context. | 413 // The FBO remains bound for this GL context. |
| 409 } | 414 } |
| 410 | 415 |
| 411 } // namespace content | 416 } // namespace content |
| OLD | NEW |