| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // TODO: the following should be replaced by a per surface flush as it gets | 255 // TODO: the following should be replaced by a per surface flush as it gets |
| 256 // implemented in GL drivers. | 256 // implemented in GL drivers. |
| 257 if (has_implicit_external_sync_) { | 257 if (has_implicit_external_sync_) { |
| 258 EGLSyncKHR fence = InsertFence(); | 258 EGLSyncKHR fence = InsertFence(); |
| 259 if (!fence) | 259 if (!fence) |
| 260 return SwapResult::SWAP_FAILED; | 260 return SwapResult::SWAP_FAILED; |
| 261 | 261 |
| 262 EGLDisplay display = GetDisplay(); | 262 EGLDisplay display = GetDisplay(); |
| 263 WaitForFence(display, fence); | 263 WaitForFence(display, fence); |
| 264 eglDestroySyncKHR(display, fence); | 264 eglDestroySyncKHR(display, fence); |
| 265 } else if (ozone_surface_->IsUniversalDisplayLinkDevice()) { | |
| 266 glFinish(); | |
| 267 } | 265 } |
| 268 | 266 |
| 269 unsubmitted_frames_.back()->ScheduleOverlayPlanes(widget_); | 267 unsubmitted_frames_.back()->ScheduleOverlayPlanes(widget_); |
| 270 unsubmitted_frames_.back()->overlays.clear(); | 268 unsubmitted_frames_.back()->overlays.clear(); |
| 271 | 269 |
| 270 if (ozone_surface_->IsUniversalDisplayLinkDevice()) |
| 271 glFinish(); |
| 272 |
| 272 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK | 273 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK |
| 273 : gfx::SwapResult::SWAP_FAILED; | 274 : gfx::SwapResult::SWAP_FAILED; |
| 274 } | 275 } |
| 275 | 276 |
| 276 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(int z_order, | 277 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(int z_order, |
| 277 OverlayTransform transform, | 278 OverlayTransform transform, |
| 278 GLImage* image, | 279 GLImage* image, |
| 279 const Rect& bounds_rect, | 280 const Rect& bounds_rect, |
| 280 const RectF& crop_rect) { | 281 const RectF& crop_rect) { |
| 281 unsubmitted_frames_.back()->overlays.push_back( | 282 unsubmitted_frames_.back()->overlays.push_back( |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 | 341 |
| 341 base::Closure fence_retired_callback = | 342 base::Closure fence_retired_callback = |
| 342 base::Bind(&GLSurfaceOzoneSurfaceless::FenceRetired, | 343 base::Bind(&GLSurfaceOzoneSurfaceless::FenceRetired, |
| 343 weak_factory_.GetWeakPtr(), fence, frame); | 344 weak_factory_.GetWeakPtr(), fence, frame); |
| 344 | 345 |
| 345 base::WorkerPool::PostTaskAndReply(FROM_HERE, fence_wait_task, | 346 base::WorkerPool::PostTaskAndReply(FROM_HERE, fence_wait_task, |
| 346 fence_retired_callback, false); | 347 fence_retired_callback, false); |
| 347 return; // Defer frame submission until fence signals. | 348 return; // Defer frame submission until fence signals. |
| 348 } | 349 } |
| 349 | 350 |
| 350 if (ozone_surface_->IsUniversalDisplayLinkDevice()) | |
| 351 glFinish(); | |
| 352 | |
| 353 frame->ready = true; | 351 frame->ready = true; |
| 354 SubmitFrame(); | 352 SubmitFrame(); |
| 355 } | 353 } |
| 356 | 354 |
| 357 void GLSurfaceOzoneSurfaceless::PostSubBufferAsync( | 355 void GLSurfaceOzoneSurfaceless::PostSubBufferAsync( |
| 358 int x, | 356 int x, |
| 359 int y, | 357 int y, |
| 360 int width, | 358 int width, |
| 361 int height, | 359 int height, |
| 362 const SwapCompletionCallback& callback) { | 360 const SwapCompletionCallback& callback) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 376 unsubmitted_frames_.weak_erase(unsubmitted_frames_.begin()); | 374 unsubmitted_frames_.weak_erase(unsubmitted_frames_.begin()); |
| 377 swap_buffers_pending_ = true; | 375 swap_buffers_pending_ = true; |
| 378 | 376 |
| 379 if (!frame->ScheduleOverlayPlanes(widget_)) { | 377 if (!frame->ScheduleOverlayPlanes(widget_)) { |
| 380 // |callback| is a wrapper for SwapCompleted(). Call it to properly | 378 // |callback| is a wrapper for SwapCompleted(). Call it to properly |
| 381 // propagate the failed state. | 379 // propagate the failed state. |
| 382 frame->callback.Run(gfx::SwapResult::SWAP_FAILED); | 380 frame->callback.Run(gfx::SwapResult::SWAP_FAILED); |
| 383 return; | 381 return; |
| 384 } | 382 } |
| 385 | 383 |
| 384 if (ozone_surface_->IsUniversalDisplayLinkDevice()) |
| 385 glFinish(); |
| 386 |
| 386 ozone_surface_->OnSwapBuffersAsync(frame->callback); | 387 ozone_surface_->OnSwapBuffersAsync(frame->callback); |
| 387 } | 388 } |
| 388 } | 389 } |
| 389 | 390 |
| 390 EGLSyncKHR GLSurfaceOzoneSurfaceless::InsertFence() { | 391 EGLSyncKHR GLSurfaceOzoneSurfaceless::InsertFence() { |
| 391 const EGLint attrib_list[] = {EGL_SYNC_CONDITION_KHR, | 392 const EGLint attrib_list[] = {EGL_SYNC_CONDITION_KHR, |
| 392 EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM, | 393 EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM, |
| 393 EGL_NONE}; | 394 EGL_NONE}; |
| 394 return eglCreateSyncKHR(GetDisplay(), EGL_SYNC_FENCE_KHR, attrib_list); | 395 return eglCreateSyncKHR(GetDisplay(), EGL_SYNC_FENCE_KHR, attrib_list); |
| 395 } | 396 } |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 } | 717 } |
| 717 } | 718 } |
| 718 | 719 |
| 719 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { | 720 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { |
| 720 return ui::OzonePlatform::GetInstance() | 721 return ui::OzonePlatform::GetInstance() |
| 721 ->GetSurfaceFactoryOzone() | 722 ->GetSurfaceFactoryOzone() |
| 722 ->GetNativeDisplay(); | 723 ->GetNativeDisplay(); |
| 723 } | 724 } |
| 724 | 725 |
| 725 } // namespace gfx | 726 } // namespace gfx |
| OLD | NEW |