Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 849103002: Share SyncPointManager implementation in in-process cmd buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DCHECKs Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,
« no previous file with comments | « no previous file | gpu/command_buffer/service/sync_point_manager.h » ('j') | gpu/command_buffer/service/sync_point_manager.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698