| 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 "ui/gl/gl_surface.h" | 5 #include "ui/gl/gl_surface.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/threading/worker_pool.h" | 14 #include "base/threading/worker_pool.h" |
| 15 #include "ui/gfx/native_widget_types.h" | 15 #include "ui/gfx/native_widget_types.h" |
| 16 #include "ui/gl/gl_context.h" | 16 #include "ui/gl/gl_context.h" |
| 17 #include "ui/gl/gl_image.h" | 17 #include "ui/gl/gl_image.h" |
| 18 #include "ui/gl/gl_image_ozone_native_pixmap.h" | 18 #include "ui/gl/gl_image_ozone_native_pixmap.h" |
| 19 #include "ui/gl/gl_implementation.h" | 19 #include "ui/gl/gl_implementation.h" |
| 20 #include "ui/gl/gl_surface_egl.h" | 20 #include "ui/gl/gl_surface_egl.h" |
| 21 #include "ui/gl/gl_surface_osmesa.h" | 21 #include "ui/gl/gl_surface_osmesa.h" |
| 22 #include "ui/gl/gl_surface_overlay.h" |
| 22 #include "ui/gl/gl_surface_stub.h" | 23 #include "ui/gl/gl_surface_stub.h" |
| 23 #include "ui/gl/scoped_binders.h" | 24 #include "ui/gl/scoped_binders.h" |
| 24 #include "ui/gl/scoped_make_current.h" | 25 #include "ui/gl/scoped_make_current.h" |
| 25 #include "ui/ozone/public/native_pixmap.h" | 26 #include "ui/ozone/public/native_pixmap.h" |
| 26 #include "ui/ozone/public/ozone_platform.h" | 27 #include "ui/ozone/public/ozone_platform.h" |
| 27 #include "ui/ozone/public/surface_factory_ozone.h" | 28 #include "ui/ozone/public/surface_factory_ozone.h" |
| 28 #include "ui/ozone/public/surface_ozone_egl.h" | 29 #include "ui/ozone/public/surface_ozone_egl.h" |
| 29 | 30 |
| 30 using gl::GLImage; | 31 using gl::GLImage; |
| 31 | 32 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 bool SupportsPostSubBuffer() override; | 158 bool SupportsPostSubBuffer() override; |
| 158 gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override; | 159 gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override; |
| 159 void SwapBuffersAsync(const SwapCompletionCallback& callback) override; | 160 void SwapBuffersAsync(const SwapCompletionCallback& callback) override; |
| 160 void PostSubBufferAsync(int x, | 161 void PostSubBufferAsync(int x, |
| 161 int y, | 162 int y, |
| 162 int width, | 163 int width, |
| 163 int height, | 164 int height, |
| 164 const SwapCompletionCallback& callback) override; | 165 const SwapCompletionCallback& callback) override; |
| 165 | 166 |
| 166 protected: | 167 protected: |
| 167 struct Overlay { | |
| 168 Overlay(int z_order, | |
| 169 OverlayTransform transform, | |
| 170 GLImage* image, | |
| 171 const Rect& bounds_rect, | |
| 172 const RectF& crop_rect); | |
| 173 | |
| 174 bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget) const; | |
| 175 | |
| 176 int z_order; | |
| 177 OverlayTransform transform; | |
| 178 scoped_refptr<GLImage> image; | |
| 179 Rect bounds_rect; | |
| 180 RectF crop_rect; | |
| 181 }; | |
| 182 | |
| 183 struct PendingFrame { | 168 struct PendingFrame { |
| 184 PendingFrame(); | 169 PendingFrame(); |
| 185 | 170 |
| 186 bool ScheduleOverlayPlanes(gfx::AcceleratedWidget widget); | 171 bool ScheduleOverlayPlanes(gfx::AcceleratedWidget widget); |
| 187 | 172 |
| 188 bool ready; | 173 bool ready; |
| 189 std::vector<Overlay> overlays; | 174 std::vector<GLSurfaceOverlay> overlays; |
| 190 SwapCompletionCallback callback; | 175 SwapCompletionCallback callback; |
| 191 }; | 176 }; |
| 192 | 177 |
| 193 ~GLSurfaceOzoneSurfaceless() override; | 178 ~GLSurfaceOzoneSurfaceless() override; |
| 194 | 179 |
| 195 void SubmitFrame(); | 180 void SubmitFrame(); |
| 196 | 181 |
| 197 EGLSyncKHR InsertFence(); | 182 EGLSyncKHR InsertFence(); |
| 198 void FenceRetired(EGLSyncKHR fence, PendingFrame* frame); | 183 void FenceRetired(EGLSyncKHR fence, PendingFrame* frame); |
| 199 | 184 |
| 200 void SwapCompleted(const SwapCompletionCallback& callback, | 185 void SwapCompleted(const SwapCompletionCallback& callback, |
| 201 gfx::SwapResult result); | 186 gfx::SwapResult result); |
| 202 | 187 |
| 203 // The native surface. Deleting this is allowed to free the EGLNativeWindow. | 188 // The native surface. Deleting this is allowed to free the EGLNativeWindow. |
| 204 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_; | 189 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_; |
| 205 AcceleratedWidget widget_; | 190 AcceleratedWidget widget_; |
| 206 scoped_ptr<VSyncProvider> vsync_provider_; | 191 scoped_ptr<VSyncProvider> vsync_provider_; |
| 207 ScopedVector<PendingFrame> unsubmitted_frames_; | 192 ScopedVector<PendingFrame> unsubmitted_frames_; |
| 208 bool has_implicit_external_sync_; | 193 bool has_implicit_external_sync_; |
| 209 bool last_swap_buffers_result_; | 194 bool last_swap_buffers_result_; |
| 210 bool swap_buffers_pending_; | 195 bool swap_buffers_pending_; |
| 211 | 196 |
| 212 base::WeakPtrFactory<GLSurfaceOzoneSurfaceless> weak_factory_; | 197 base::WeakPtrFactory<GLSurfaceOzoneSurfaceless> weak_factory_; |
| 213 | 198 |
| 214 DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfaceless); | 199 DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfaceless); |
| 215 }; | 200 }; |
| 216 | 201 |
| 217 GLSurfaceOzoneSurfaceless::Overlay::Overlay(int z_order, | |
| 218 OverlayTransform transform, | |
| 219 GLImage* image, | |
| 220 const Rect& bounds_rect, | |
| 221 const RectF& crop_rect) | |
| 222 : z_order(z_order), | |
| 223 transform(transform), | |
| 224 image(image), | |
| 225 bounds_rect(bounds_rect), | |
| 226 crop_rect(crop_rect) {} | |
| 227 | |
| 228 bool GLSurfaceOzoneSurfaceless::Overlay::ScheduleOverlayPlane( | |
| 229 gfx::AcceleratedWidget widget) const { | |
| 230 return image->ScheduleOverlayPlane(widget, z_order, transform, bounds_rect, | |
| 231 crop_rect); | |
| 232 } | |
| 233 | |
| 234 GLSurfaceOzoneSurfaceless::PendingFrame::PendingFrame() : ready(false) {} | 202 GLSurfaceOzoneSurfaceless::PendingFrame::PendingFrame() : ready(false) {} |
| 235 | 203 |
| 236 bool GLSurfaceOzoneSurfaceless::PendingFrame::ScheduleOverlayPlanes( | 204 bool GLSurfaceOzoneSurfaceless::PendingFrame::ScheduleOverlayPlanes( |
| 237 gfx::AcceleratedWidget widget) { | 205 gfx::AcceleratedWidget widget) { |
| 238 for (const auto& overlay : overlays) | 206 for (const auto& overlay : overlays) |
| 239 if (!overlay.ScheduleOverlayPlane(widget)) | 207 if (!overlay.ScheduleOverlayPlane(widget)) |
| 240 return false; | 208 return false; |
| 241 return true; | 209 return true; |
| 242 } | 210 } |
| 243 | 211 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK | 262 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK |
| 295 : gfx::SwapResult::SWAP_FAILED; | 263 : gfx::SwapResult::SWAP_FAILED; |
| 296 } | 264 } |
| 297 | 265 |
| 298 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(int z_order, | 266 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(int z_order, |
| 299 OverlayTransform transform, | 267 OverlayTransform transform, |
| 300 GLImage* image, | 268 GLImage* image, |
| 301 const Rect& bounds_rect, | 269 const Rect& bounds_rect, |
| 302 const RectF& crop_rect) { | 270 const RectF& crop_rect) { |
| 303 unsubmitted_frames_.back()->overlays.push_back( | 271 unsubmitted_frames_.back()->overlays.push_back( |
| 304 Overlay(z_order, transform, image, bounds_rect, crop_rect)); | 272 GLSurfaceOverlay(z_order, transform, image, bounds_rect, crop_rect)); |
| 305 return true; | 273 return true; |
| 306 } | 274 } |
| 307 | 275 |
| 308 bool GLSurfaceOzoneSurfaceless::IsOffscreen() { | 276 bool GLSurfaceOzoneSurfaceless::IsOffscreen() { |
| 309 return false; | 277 return false; |
| 310 } | 278 } |
| 311 | 279 |
| 312 VSyncProvider* GLSurfaceOzoneSurfaceless::GetVSyncProvider() { | 280 VSyncProvider* GLSurfaceOzoneSurfaceless::GetVSyncProvider() { |
| 313 return vsync_provider_.get(); | 281 return vsync_provider_.get(); |
| 314 } | 282 } |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 } | 701 } |
| 734 } | 702 } |
| 735 | 703 |
| 736 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { | 704 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { |
| 737 return ui::OzonePlatform::GetInstance() | 705 return ui::OzonePlatform::GetInstance() |
| 738 ->GetSurfaceFactoryOzone() | 706 ->GetSurfaceFactoryOzone() |
| 739 ->GetNativeDisplay(); | 707 ->GetNativeDisplay(); |
| 740 } | 708 } |
| 741 | 709 |
| 742 } // namespace gfx | 710 } // namespace gfx |
| OLD | NEW |