| 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 "content/common/gpu/gpu_messages.h" | 7 #include "content/common/gpu/gpu_messages.h" |
| 8 #include "content/common/gpu/image_transport_surface_calayer_mac.h" | 8 #include "content/common/gpu/image_transport_surface_calayer_mac.h" |
| 9 #include "content/common/gpu/image_transport_surface_iosurface_mac.h" | 9 #include "content/common/gpu/image_transport_surface_iosurface_mac.h" |
| 10 #include "ui/base/cocoa/remote_layer_api.h" | 10 #include "ui/base/cocoa/remote_layer_api.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 | 94 |
| 95 unsigned int ImageTransportSurfaceFBO::GetBackingFrameBufferObject() { | 95 unsigned int ImageTransportSurfaceFBO::GetBackingFrameBufferObject() { |
| 96 return fbo_id_; | 96 return fbo_id_; |
| 97 } | 97 } |
| 98 | 98 |
| 99 bool ImageTransportSurfaceFBO::SetBackbufferAllocation(bool allocation) { | 99 bool ImageTransportSurfaceFBO::SetBackbufferAllocation(bool allocation) { |
| 100 if (backbuffer_suggested_allocation_ == allocation) | 100 if (backbuffer_suggested_allocation_ == allocation) |
| 101 return true; | 101 return true; |
| 102 backbuffer_suggested_allocation_ = allocation; | 102 backbuffer_suggested_allocation_ = allocation; |
| 103 AdjustBufferAllocation(); | 103 AdjustBufferAllocation(); |
| 104 if (!allocation) |
| 105 storage_provider_->DiscardBackbuffer(); |
| 104 return true; | 106 return true; |
| 105 } | 107 } |
| 106 | 108 |
| 107 void ImageTransportSurfaceFBO::SetFrontbufferAllocation(bool allocation) { | 109 void ImageTransportSurfaceFBO::SetFrontbufferAllocation(bool allocation) { |
| 108 if (frontbuffer_suggested_allocation_ == allocation) | 110 if (frontbuffer_suggested_allocation_ == allocation) |
| 109 return; | 111 return; |
| 110 frontbuffer_suggested_allocation_ = allocation; | 112 frontbuffer_suggested_allocation_ = allocation; |
| 111 AdjustBufferAllocation(); | 113 AdjustBufferAllocation(); |
| 112 } | 114 } |
| 113 | 115 |
| 114 void ImageTransportSurfaceFBO::AdjustBufferAllocation() { | 116 void ImageTransportSurfaceFBO::AdjustBufferAllocation() { |
| 115 // On mac, the frontbuffer and backbuffer are the same buffer. The buffer is | 117 // On mac, the frontbuffer and backbuffer are the same buffer. The buffer is |
| 116 // free'd when both the browser and gpu processes have Unref'd the IOSurface. | 118 // free'd when both the browser and gpu processes have Unref'd the IOSurface. |
| 117 if (!backbuffer_suggested_allocation_ && | 119 if (!backbuffer_suggested_allocation_ && |
| 118 !frontbuffer_suggested_allocation_ && | 120 !frontbuffer_suggested_allocation_ && |
| 119 has_complete_framebuffer_) { | 121 has_complete_framebuffer_) { |
| 120 DestroyFramebuffer(); | 122 DestroyFramebuffer(); |
| 121 helper_->Suspend(); | 123 helper_->Suspend(); |
| 122 } else if (backbuffer_suggested_allocation_ && !has_complete_framebuffer_) { | 124 } else if (backbuffer_suggested_allocation_ && !has_complete_framebuffer_) { |
| 123 CreateFramebuffer(); | 125 CreateFramebuffer(); |
| 124 } | 126 } |
| 125 } | 127 } |
| 126 | 128 |
| 127 bool ImageTransportSurfaceFBO::SwapBuffers() { | 129 bool ImageTransportSurfaceFBO::SwapBuffers() { |
| 128 DCHECK(backbuffer_suggested_allocation_); | 130 DCHECK(backbuffer_suggested_allocation_); |
| 129 if (!frontbuffer_suggested_allocation_) | 131 if (!frontbuffer_suggested_allocation_) |
| 130 return true; | 132 return true; |
| 131 glFlush(); | 133 glFlush(); |
| 132 | 134 |
| 135 DCHECK(!is_swap_buffers_pending_); |
| 136 is_swap_buffers_pending_ = true; |
| 137 |
| 133 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; | 138 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; |
| 134 params.surface_handle = storage_provider_->GetSurfaceHandle(); | 139 params.surface_handle = storage_provider_->SwapBuffersAndGetSurfaceHandle(); |
| 135 params.size = GetSize(); | 140 params.size = GetSize(); |
| 136 params.scale_factor = scale_factor_; | 141 params.scale_factor = scale_factor_; |
| 137 params.latency_info.swap(latency_info_); | 142 params.latency_info.swap(latency_info_); |
| 138 helper_->SendAcceleratedSurfaceBuffersSwapped(params); | 143 helper_->SendAcceleratedSurfaceBuffersSwapped(params); |
| 139 | |
| 140 DCHECK(!is_swap_buffers_pending_); | |
| 141 is_swap_buffers_pending_ = true; | |
| 142 | |
| 143 storage_provider_->WillSwapBuffers(); | |
| 144 return true; | 144 return true; |
| 145 } | 145 } |
| 146 | 146 |
| 147 bool ImageTransportSurfaceFBO::PostSubBuffer( | 147 bool ImageTransportSurfaceFBO::PostSubBuffer( |
| 148 int x, int y, int width, int height) { | 148 int x, int y, int width, int height) { |
| 149 // Mac does not support sub-buffer swaps. | 149 // Mac does not support sub-buffer swaps. |
| 150 NOTREACHED(); | 150 NOTREACHED(); |
| 151 return false; | 151 return false; |
| 152 } | 152 } |
| 153 | 153 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 return; | 325 return; |
| 326 } | 326 } |
| 327 | 327 |
| 328 has_complete_framebuffer_ = true; | 328 has_complete_framebuffer_ = true; |
| 329 | 329 |
| 330 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, previous_texture_id); | 330 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, previous_texture_id); |
| 331 // The FBO remains bound for this GL context. | 331 // The FBO remains bound for this GL context. |
| 332 } | 332 } |
| 333 | 333 |
| 334 } // namespace content | 334 } // namespace content |
| OLD | NEW |