aboutsummaryrefslogtreecommitdiff
path: root/talk/app/webrtc
diff options
context:
space:
mode:
authorjbauch <jbauch@webrtc.org>2015-08-07 09:48:18 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-07 16:48:22 +0000
commit25c96d02cdd2460b378ab89e4b90b17a81bf0d4a (patch)
treea106fc299def5b3053c844b850423ca0a5d3e0c7 /talk/app/webrtc
parent2328a94ec7ee545a26e8220c5ae157e1b3b5144f (diff)
downloadwebrtc-25c96d02cdd2460b378ab89e4b90b17a81bf0d4a.tar.gz
Add thread checker to StatsCollection.
This CL makes sure the methods are always called on the correct thread. Review URL: https://codereview.webrtc.org/1235263003 Cr-Commit-Position: refs/heads/master@{#9688}
Diffstat (limited to 'talk/app/webrtc')
-rw-r--r--talk/app/webrtc/statstypes.cc8
-rw-r--r--talk/app/webrtc/statstypes.h3
2 files changed, 10 insertions, 1 deletions
diff --git a/talk/app/webrtc/statstypes.cc b/talk/app/webrtc/statstypes.cc
index a902210478..a23b959033 100644
--- a/talk/app/webrtc/statstypes.cc
+++ b/talk/app/webrtc/statstypes.cc
@@ -720,23 +720,28 @@ StatsCollection::StatsCollection() {
}
StatsCollection::~StatsCollection() {
+ DCHECK(thread_checker_.CalledOnValidThread());
for (auto* r : list_)
delete r;
}
StatsCollection::const_iterator StatsCollection::begin() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
return list_.begin();
}
StatsCollection::const_iterator StatsCollection::end() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
return list_.end();
}
size_t StatsCollection::size() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
return list_.size();
}
StatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(Find(id) == nullptr);
StatsReport* report = new StatsReport(id);
list_.push_back(report);
@@ -744,11 +749,13 @@ StatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) {
}
StatsReport* StatsCollection::FindOrAddNew(const StatsReport::Id& id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
StatsReport* ret = Find(id);
return ret ? ret : InsertNew(id);
}
StatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(id.get());
Container::iterator it = std::find_if(list_.begin(), list_.end(),
[&id](const StatsReport* r)->bool { return r->id()->Equals(id); });
@@ -764,6 +771,7 @@ StatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) {
// Looks for a report with the given |id|. If one is not found, NULL
// will be returned.
StatsReport* StatsCollection::Find(const StatsReport::Id& id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
Container::iterator it = std::find_if(list_.begin(), list_.end(),
[&id](const StatsReport* r)->bool { return r->id()->Equals(id); });
return it == list_.end() ? nullptr : *it;
diff --git a/talk/app/webrtc/statstypes.h b/talk/app/webrtc/statstypes.h
index c58f39058b..156e784acf 100644
--- a/talk/app/webrtc/statstypes.h
+++ b/talk/app/webrtc/statstypes.h
@@ -43,6 +43,7 @@
#include "webrtc/base/linked_ptr.h"
#include "webrtc/base/scoped_ref_ptr.h"
#include "webrtc/base/stringencode.h"
+#include "webrtc/base/thread_checker.h"
namespace webrtc {
@@ -383,7 +384,6 @@ typedef std::vector<const StatsReport*> StatsReports;
// A map from the report id to the report.
// This class wraps an STL container and provides a limited set of
// functionality in order to keep things simple.
-// TODO(tommi): Use a thread checker here (currently not in libjingle).
class StatsCollection {
public:
StatsCollection();
@@ -409,6 +409,7 @@ class StatsCollection {
private:
Container list_;
+ rtc::ThreadChecker thread_checker_;
};
} // namespace webrtc