Index: webrtc/api/statstypes.h |
diff --git a/webrtc/api/statstypes.h b/webrtc/api/statstypes.h |
index 1a55145ab4cbe1753774492b5e7895c90b395aab..788c2c403f1d014804abd771bc221d1a8ce59dad 100644 |
--- a/webrtc/api/statstypes.h |
+++ b/webrtc/api/statstypes.h |
@@ -22,7 +22,6 @@ |
#include "webrtc/base/basictypes.h" |
#include "webrtc/base/common.h" |
#include "webrtc/base/constructormagic.h" |
-#include "webrtc/base/linked_ptr.h" |
#include "webrtc/base/refcount.h" |
#include "webrtc/base/scoped_ref_ptr.h" |
#include "webrtc/base/stringencode.h" |
@@ -264,6 +263,22 @@ class StatsReport { |
~Value(); |
+ // Support ref counting. Note that for performance reasons, we |
+ // don't use thread safe operations. Therefore, all operations |
+ // affecting the ref count (in practice, creation and copying of |
+ // the Values mapping) must occur on webrtc's signalling thread. |
+ int AddRef() const { |
+ RTC_DCHECK_RUN_ON(&thread_checker_); |
+ return ++ref_count_; |
+ } |
+ int Release() const { |
+ RTC_DCHECK_RUN_ON(&thread_checker_); |
+ int count = --ref_count_; |
+ if (!count) |
+ delete this; |
+ return count; |
+ } |
+ |
// TODO(tommi): This compares name as well as value... |
// I think we should only need to compare the value part and |
// move the name part into a hash map. |
@@ -304,6 +319,9 @@ class StatsReport { |
const StatsValueName name; |
private: |
+ rtc::ThreadChecker thread_checker_; |
tommi
2017/01/18 12:48:20
just fyi, SequenceChecker is also an option and pe
nisse-webrtc
2017/01/18 12:56:21
Seems a bit tricky to convert this code to use a T
|
+ mutable int ref_count_ ACCESS_ON(thread_checker_) = 0; |
+ |
const Type type_; |
// TODO(tommi): Use C++ 11 union and make value_ const. |
union InternalType { |
@@ -316,13 +334,10 @@ class StatsReport { |
Id* id_; |
} value_; |
- private: |
RTC_DISALLOW_COPY_AND_ASSIGN(Value); |
}; |
- // TODO(tommi): Consider using a similar approach to how we store Ids using |
- // scoped_refptr for values. |
- typedef rtc::linked_ptr<Value> ValuePtr; |
+ typedef rtc::scoped_refptr<Value> ValuePtr; |
typedef std::map<StatsValueName, ValuePtr> Values; |
// Ownership of |id| is passed to |this|. |