| Index: gpu/command_buffer/service/in_process_command_buffer.cc
|
| diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| index c3123457f64ff1c42bbffcef368c49d86ba3f149..8ae3591f53156d5e5aeb3a7ae3761492163208a6 100644
|
| --- a/gpu/command_buffer/service/in_process_command_buffer.cc
|
| +++ b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| @@ -31,6 +31,7 @@
|
| #include "gpu/command_buffer/service/mailbox_manager_sync.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| #include "gpu/command_buffer/service/query_manager.h"
|
| +#include "gpu/command_buffer/service/sync_point_manager.h"
|
| #include "gpu/command_buffer/service/transfer_buffer_manager.h"
|
| #include "gpu/command_buffer/service/valuebuffer_manager.h"
|
| #include "ui/gfx/geometry/size.h"
|
| @@ -129,60 +130,7 @@ class ScopedEvent {
|
| base::WaitableEvent* event_;
|
| };
|
|
|
| -class SyncPointManager {
|
| - public:
|
| - SyncPointManager();
|
| - ~SyncPointManager();
|
| -
|
| - uint32 GenerateSyncPoint();
|
| - void RetireSyncPoint(uint32 sync_point);
|
| -
|
| - bool IsSyncPointPassed(uint32 sync_point);
|
| - void WaitSyncPoint(uint32 sync_point);
|
| -
|
| -private:
|
| - // This lock protects access to pending_sync_points_ and next_sync_point_ and
|
| - // is used with the ConditionVariable to signal when a sync point is retired.
|
| - base::Lock lock_;
|
| - std::set<uint32> pending_sync_points_;
|
| - uint32 next_sync_point_;
|
| - base::ConditionVariable cond_var_;
|
| -};
|
| -
|
| -SyncPointManager::SyncPointManager() : next_sync_point_(1), cond_var_(&lock_) {}
|
| -
|
| -SyncPointManager::~SyncPointManager() {
|
| - DCHECK_EQ(pending_sync_points_.size(), 0U);
|
| -}
|
| -
|
| -uint32 SyncPointManager::GenerateSyncPoint() {
|
| - base::AutoLock lock(lock_);
|
| - uint32 sync_point = next_sync_point_++;
|
| - DCHECK_EQ(pending_sync_points_.count(sync_point), 0U);
|
| - pending_sync_points_.insert(sync_point);
|
| - return sync_point;
|
| -}
|
| -
|
| -void SyncPointManager::RetireSyncPoint(uint32 sync_point) {
|
| - base::AutoLock lock(lock_);
|
| - DCHECK(pending_sync_points_.count(sync_point));
|
| - pending_sync_points_.erase(sync_point);
|
| - cond_var_.Broadcast();
|
| -}
|
| -
|
| -bool SyncPointManager::IsSyncPointPassed(uint32 sync_point) {
|
| - base::AutoLock lock(lock_);
|
| - return pending_sync_points_.count(sync_point) == 0;
|
| -}
|
| -
|
| -void SyncPointManager::WaitSyncPoint(uint32 sync_point) {
|
| - base::AutoLock lock(lock_);
|
| - while (pending_sync_points_.count(sync_point)) {
|
| - cond_var_.Wait();
|
| - }
|
| -}
|
| -
|
| -base::LazyInstance<SyncPointManager> g_sync_point_manager =
|
| +base::LazyInstance<ThreadedSyncPointManager> g_sync_point_manager =
|
| LAZY_INSTANCE_INITIALIZER;
|
|
|
| base::SharedMemoryHandle ShareToGpuThread(
|
| @@ -842,15 +790,7 @@ bool InProcessCommandBuffer::WaitSyncPointOnGpuThread(unsigned sync_point) {
|
| void InProcessCommandBuffer::SignalSyncPointOnGpuThread(
|
| unsigned sync_point,
|
| const base::Closure& callback) {
|
| - if (g_sync_point_manager.Get().IsSyncPointPassed(sync_point)) {
|
| - callback.Run();
|
| - } else {
|
| - service_->ScheduleIdleWork(
|
| - base::Bind(&InProcessCommandBuffer::SignalSyncPointOnGpuThread,
|
| - gpu_thread_weak_ptr_,
|
| - sync_point,
|
| - callback));
|
| - }
|
| + g_sync_point_manager.Get().AddSyncPointCallback(sync_point, callback);
|
| }
|
|
|
| void InProcessCommandBuffer::SignalQuery(unsigned query_id,
|
|
|