Index: cc/surfaces/deferred_gpu_command_service.cc |
diff --git a/cc/surfaces/deferred_gpu_command_service.cc b/cc/surfaces/deferred_gpu_command_service.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4915096cbe81db394173ba85990496b114e77d91 |
--- /dev/null |
+++ b/cc/surfaces/deferred_gpu_command_service.cc |
@@ -0,0 +1,78 @@ |
+// Copyright 2016 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 "cc/surfaces/deferred_gpu_command_service.h" |
+ |
+#include "base/lazy_instance.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+ |
+namespace cc { |
+ |
+DeferredGpuCommandService::DeferredGpuCommandService( |
+ gpu::SyncPointManager* sync_point_manager, |
+ gpu::gles2::MailboxManager* mailbox_manager, |
+ scoped_refptr<gl::GLShareGroup> share_group) |
+ : task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ sync_point_manager_(sync_point_manager), |
+ share_group_(share_group) { |
+ mailbox_manager_ = mailbox_manager; |
+} |
+ |
+void DeferredGpuCommandService::ScheduleTask(const base::Closure& task) { |
+ task_runner_->PostTask(FROM_HERE, task); |
+} |
+ |
+void DeferredGpuCommandService::ScheduleDelayedWork(const base::Closure& task) { |
+ task_runner_->PostDelayedTask(FROM_HERE, task, |
+ base::TimeDelta::FromMilliseconds(2)); |
+} |
+bool DeferredGpuCommandService::UseVirtualizedGLContexts() { |
+ return true; |
+} |
+ |
+scoped_refptr<gpu::gles2::ShaderTranslatorCache> |
+DeferredGpuCommandService::shader_translator_cache() { |
+ if (!shader_translator_cache_) { |
+ shader_translator_cache_ = make_scoped_refptr( |
+ new gpu::gles2::ShaderTranslatorCache(gpu_preferences())); |
+ } |
+ return shader_translator_cache_; |
+} |
+ |
+scoped_refptr<gpu::gles2::FramebufferCompletenessCache> |
+DeferredGpuCommandService::framebuffer_completeness_cache() { |
+ if (!framebuffer_completeness_cache_.get()) { |
+ framebuffer_completeness_cache_ = |
+ make_scoped_refptr(new gpu::gles2::FramebufferCompletenessCache); |
+ } |
+ return framebuffer_completeness_cache_; |
+} |
+ |
+gpu::SyncPointManager* DeferredGpuCommandService::sync_point_manager() { |
+ return sync_point_manager_; |
+} |
+ |
+void DeferredGpuCommandService::AddRef() const { |
+ base::RefCountedThreadSafe<DeferredGpuCommandService>::AddRef(); |
+} |
+ |
+void DeferredGpuCommandService::Release() const { |
+ base::RefCountedThreadSafe<DeferredGpuCommandService>::Release(); |
+} |
+ |
+const scoped_refptr<gl::GLShareGroup>& |
+DeferredGpuCommandService::GetShareGroup() const { |
+ return share_group_; |
+} |
+ |
+bool DeferredGpuCommandService::BlockThreadOnWaitSyncToken() const { |
+ return false; |
+} |
+ |
+DeferredGpuCommandService::~DeferredGpuCommandService() { |
+ base::AutoLock lock(tasks_lock_); |
+ DCHECK(tasks_.empty()); |
+} |
+ |
+} // namespace cc |