Index: gpu/command_buffer/service/sync_point_manager.cc |
diff --git a/gpu/command_buffer/service/sync_point_manager.cc b/gpu/command_buffer/service/sync_point_manager.cc |
index cd8c49088b4e79405f3abe814db9b7da70525a9b..e4af781ad72e9d23b89ab3ddca2759b359568ab5 100644 |
--- a/gpu/command_buffer/service/sync_point_manager.cc |
+++ b/gpu/command_buffer/service/sync_point_manager.cc |
@@ -8,16 +8,31 @@ |
#include "base/logging.h" |
#include "base/rand_util.h" |
+#include "base/sequence_checker.h" |
namespace gpu { |
static const int kMaxSyncBase = INT_MAX; |
-SyncPointManager::SyncPointManager() |
+// static |
+SyncPointManager* SyncPointManager::Create() { |
+ return new SyncPointManager(true); |
+} |
+ |
+// static |
+SyncPointManager* SyncPointManager::CreateMultiThread() { |
+ return new SyncPointManager(false); |
+} |
+ |
+SyncPointManager::SyncPointManager(bool enable_thread_checker) |
: next_sync_point_(base::RandInt(1, kMaxSyncBase)) { |
// To reduce the risk that a sync point created in a previous GPU process |
// will be in flight in the next GPU process, randomize the starting sync |
// point number. http://crbug.com/373452 |
+ |
+ if (enable_thread_checker) { |
+ sequence_checker_.reset(new base::SequenceChecker); |
+ } |
} |
SyncPointManager::~SyncPointManager() { |
@@ -41,7 +56,7 @@ uint32 SyncPointManager::GenerateSyncPoint() { |
} |
void SyncPointManager::RetireSyncPoint(uint32 sync_point) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ CheckSequencedThread(); |
ClosureList list; |
{ |
base::AutoLock lock(lock_); |
@@ -60,7 +75,7 @@ void SyncPointManager::RetireSyncPoint(uint32 sync_point) { |
void SyncPointManager::AddSyncPointCallback(uint32 sync_point, |
const base::Closure& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ CheckSequencedThread(); |
{ |
base::AutoLock lock(lock_); |
SyncPointMap::iterator it = sync_point_map_.find(sync_point); |
@@ -73,7 +88,7 @@ void SyncPointManager::AddSyncPointCallback(uint32 sync_point, |
} |
bool SyncPointManager::IsSyncPointRetired(uint32 sync_point) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ CheckSequencedThread(); |
{ |
base::AutoLock lock(lock_); |
SyncPointMap::iterator it = sync_point_map_.find(sync_point); |
@@ -81,4 +96,9 @@ bool SyncPointManager::IsSyncPointRetired(uint32 sync_point) { |
} |
} |
+void SyncPointManager::CheckSequencedThread() { |
+ DCHECK(!sequence_checker_ || |
+ sequence_checker_->CalledOnValidSequencedThread()); |
+} |
+ |
} // namespace gpu |