| Index: ui/gl/gl_fence_apple.cc
|
| diff --git a/ui/gl/gl_fence_apple.cc b/ui/gl/gl_fence_apple.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9df0cad7e13f9de4ceeef311f127ed1ecd5d9650
|
| --- /dev/null
|
| +++ b/ui/gl/gl_fence_apple.cc
|
| @@ -0,0 +1,47 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/gl/gl_fence_apple.h"
|
| +
|
| +#include "ui/gl/gl_bindings.h"
|
| +#include "ui/gl/gl_context.h"
|
| +
|
| +namespace gfx {
|
| +
|
| +GLFenceAPPLE::GLFenceAPPLE(bool flush) {
|
| + glGenFencesAPPLE(1, &fence_);
|
| + glSetFenceAPPLE(fence_);
|
| + DCHECK(glIsFenceAPPLE(fence_));
|
| + if (flush) {
|
| + glFlush();
|
| + } else {
|
| + flush_event_ = GLContext::GetCurrent()->SignalFlush();
|
| + }
|
| +}
|
| +
|
| +bool GLFenceAPPLE::HasCompleted() {
|
| + DCHECK(glIsFenceAPPLE(fence_));
|
| + return !!glTestFenceAPPLE(fence_);
|
| +}
|
| +
|
| +void GLFenceAPPLE::ClientWait() {
|
| + DCHECK(glIsFenceAPPLE(fence_));
|
| + if (!flush_event_.get() || flush_event_->IsSignaled()) {
|
| + glFinishFenceAPPLE(fence_);
|
| + } else {
|
| + LOG(ERROR) << "Trying to wait for uncommitted fence. Skipping...";
|
| + }
|
| +}
|
| +
|
| +void GLFenceAPPLE::ServerWait() {
|
| + DCHECK(glIsFenceAPPLE(fence_));
|
| + ClientWait();
|
| +}
|
| +
|
| +GLFenceAPPLE::~GLFenceAPPLE() {
|
| + DCHECK(glIsFenceAPPLE(fence_));
|
| + glDeleteFencesAPPLE(1, &fence_);
|
| +}
|
| +
|
| +} // namespace gfx
|
|
|