Index: ppapi/shared_impl/var_tracker.cc |
diff --git a/ppapi/shared_impl/var_tracker.cc b/ppapi/shared_impl/var_tracker.cc |
index 434121ecbfa64b29b627e2d92f69acb17d99437e..951577cacaab8dd2895a2b322d508e044dc41a77 100644 |
--- a/ppapi/shared_impl/var_tracker.cc |
+++ b/ppapi/shared_impl/var_tracker.cc |
@@ -29,22 +29,29 @@ VarTracker::VarInfo::VarInfo(Var* v, int input_ref_count) |
track_with_no_reference_count(0) { |
} |
-VarTracker::VarTracker() : last_var_id_(0) { |
+VarTracker::VarTracker(ThreadMode thread_mode) : last_var_id_(0) { |
+ if (thread_mode == SINGLE_THREADED) |
+ thread_checker_.reset(new base::ThreadChecker); |
} |
VarTracker::~VarTracker() { |
} |
-int32 VarTracker::AddVar(Var* var) { |
- DCHECK(CalledOnValidThread()); |
+void VarTracker::CheckThreadingPreconditions() const { |
+ DCHECK(!thread_checker_ || thread_checker_->CalledOnValidThread()); |
+#ifndef NDEBUG |
ProxyLock::AssertAcquired(); |
+#endif |
+} |
+ |
+int32 VarTracker::AddVar(Var* var) { |
+ CheckThreadingPreconditions(); |
return AddVarInternal(var, ADD_VAR_TAKE_ONE_REFERENCE); |
} |
Var* VarTracker::GetVar(int32 var_id) const { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
VarMap::const_iterator result = live_vars_.find(var_id); |
if (result == live_vars_.end()) |
@@ -53,8 +60,7 @@ Var* VarTracker::GetVar(int32 var_id) const { |
} |
Var* VarTracker::GetVar(const PP_Var& var) const { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
if (!IsVarTypeRefcounted(var.type)) |
return NULL; |
@@ -62,8 +68,7 @@ Var* VarTracker::GetVar(const PP_Var& var) const { |
} |
bool VarTracker::AddRefVar(int32 var_id) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
DLOG_IF(ERROR, !CheckIdType(var_id, PP_ID_TYPE_VAR)) |
<< var_id << " is not a PP_Var ID."; |
@@ -88,8 +93,7 @@ bool VarTracker::AddRefVar(int32 var_id) { |
} |
bool VarTracker::AddRefVar(const PP_Var& var) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
if (!IsVarTypeRefcounted(var.type)) |
return true; |
@@ -97,8 +101,7 @@ bool VarTracker::AddRefVar(const PP_Var& var) { |
} |
bool VarTracker::ReleaseVar(int32 var_id) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
DLOG_IF(ERROR, !CheckIdType(var_id, PP_ID_TYPE_VAR)) |
<< var_id << " is not a PP_Var ID."; |
@@ -129,8 +132,7 @@ bool VarTracker::ReleaseVar(int32 var_id) { |
} |
bool VarTracker::ReleaseVar(const PP_Var& var) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
if (!IsVarTypeRefcounted(var.type)) |
return false; |
@@ -154,8 +156,7 @@ VarTracker::VarMap::iterator VarTracker::GetLiveVar(int32 id) { |
} |
int VarTracker::GetRefCountForObject(const PP_Var& plugin_object) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
VarMap::iterator found = GetLiveVar(plugin_object); |
if (found == live_vars_.end()) |
@@ -165,8 +166,7 @@ int VarTracker::GetRefCountForObject(const PP_Var& plugin_object) { |
int VarTracker::GetTrackedWithNoReferenceCountForObject( |
const PP_Var& plugin_object) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
VarMap::iterator found = GetLiveVar(plugin_object); |
if (found == live_vars_.end()) |
@@ -188,8 +188,7 @@ bool VarTracker::IsVarTypeRefcounted(PP_VarType type) const { |
} |
PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
scoped_refptr<ArrayBufferVar> array_buffer(CreateArrayBuffer(size_in_bytes)); |
if (!array_buffer) |
@@ -199,8 +198,7 @@ PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes) { |
PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes, |
const void* data) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
ArrayBufferVar* array_buffer = MakeArrayBufferVar(size_in_bytes, data); |
return array_buffer ? array_buffer->GetPPVar() : PP_MakeNull(); |
@@ -208,8 +206,7 @@ PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes, |
ArrayBufferVar* VarTracker::MakeArrayBufferVar(uint32 size_in_bytes, |
const void* data) { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
ArrayBufferVar* array_buffer(CreateArrayBuffer(size_in_bytes)); |
if (!array_buffer) |
@@ -220,7 +217,7 @@ ArrayBufferVar* VarTracker::MakeArrayBufferVar(uint32 size_in_bytes, |
PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes, |
base::SharedMemoryHandle handle) { |
- DCHECK(CalledOnValidThread()); |
+ CheckThreadingPreconditions(); |
scoped_refptr<ArrayBufferVar> array_buffer( |
CreateShmArrayBuffer(size_in_bytes, handle)); |
@@ -230,8 +227,7 @@ PP_Var VarTracker::MakeArrayBufferPPVar(uint32 size_in_bytes, |
} |
std::vector<PP_Var> VarTracker::GetLiveVars() { |
- DCHECK(CalledOnValidThread()); |
- ProxyLock::AssertAcquired(); |
+ CheckThreadingPreconditions(); |
std::vector<PP_Var> var_vector; |
var_vector.reserve(live_vars_.size()); |