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

Unified Diff: chrome/browser/media/webrtc/rtc_stats_dictionary.cc

Issue 2534633002: Preparation CL for WebRTC performance test using promise-based getStats (Closed)
Patch Set: Created 4 years 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: chrome/browser/media/webrtc/rtc_stats_dictionary.cc
diff --git a/chrome/browser/media/webrtc/rtc_stats_dictionary.cc b/chrome/browser/media/webrtc/rtc_stats_dictionary.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7281445e0871f4f0e86795db4525df008cee3801
--- /dev/null
+++ b/chrome/browser/media/webrtc/rtc_stats_dictionary.cc
@@ -0,0 +1,189 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/media/webrtc/rtc_stats_dictionary.h"
+
+namespace content {
+
+RTCStatsReportDictionary::RTCStatsReportDictionary(
+ std::unique_ptr<base::DictionaryValue> report)
+ : report_(std::move(report)) {
+ DCHECK(report_);
+}
+
+RTCStatsReportDictionary::~RTCStatsReportDictionary() {
+}
+
+std::unique_ptr<RTCStatsDictionary> RTCStatsReportDictionary::Get(
+ const std::string id) {
+ const base::DictionaryValue* dictionary;
+ if (!report_->GetDictionary(id, &dictionary))
+ return nullptr;
+ return std::unique_ptr<RTCStatsDictionary>(
+ new RTCStatsDictionary(this, dictionary));
+}
+
+std::vector<RTCStatsDictionary> RTCStatsReportDictionary::Filter(
+ bool(*filter)(const RTCStatsDictionary& dictionary)) {
+ std::vector<RTCStatsDictionary> result;
+ for (base::DictionaryValue::Iterator it(*report_); !it.IsAtEnd();
+ it.Advance()) {
+ const base::DictionaryValue* it_value;
+ DCHECK(it.value().GetAsDictionary(&it_value));
+ RTCStatsDictionary stats(this, it_value);
+ if (filter(stats))
+ result.push_back(stats);
+ }
+ return result;
+}
+
+RTCStatsDictionary::RTCStatsDictionary(
+ RTCStatsReportDictionary* report, const base::DictionaryValue* stats)
+ : report_(report), stats_(stats) {
+ DCHECK(report_);
+ DCHECK(stats_);
+}
+
+RTCStatsDictionary::RTCStatsDictionary(
+ const RTCStatsDictionary& other) = default;
+
+RTCStatsDictionary::~RTCStatsDictionary() {
+}
+
+bool RTCStatsDictionary::IsBoolean(const std::string& key) const {
+ bool value;
+ return GetBoolean(key, &value);
+}
+
+bool RTCStatsDictionary::GetBoolean(const std::string& key) const {
+ bool value;
+ DCHECK(GetBoolean(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::IsNumber(const std::string& key) const {
+ double value;
+ return GetNumber(key, &value);
+}
+
+double RTCStatsDictionary::GetNumber(const std::string& key) const {
+ double value;
+ DCHECK(GetNumber(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::IsString(const std::string& key) const {
+ std::string value;
+ return GetString(key, &value);
+}
+
+std::string RTCStatsDictionary::GetString(const std::string& key) const {
+ std::string value;
+ DCHECK(GetString(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::IsSequenceBoolean(const std::string& key) const {
+ std::vector<bool> value;
+ return GetSequenceBoolean(key, &value);
+}
+
+std::vector<bool> RTCStatsDictionary::GetSequenceBoolean(
+ const std::string& key) const {
+ std::vector<bool> value;
+ DCHECK(GetSequenceBoolean(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::IsSequenceNumber(const std::string& key) const {
+ std::vector<double> value;
+ return GetSequenceNumber(key, &value);
+}
+
+std::vector<double> RTCStatsDictionary::GetSequenceNumber(
+ const std::string& key) const {
+ std::vector<double> value;
+ DCHECK(GetSequenceNumber(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::IsSequenceString(const std::string& key) const {
+ std::vector<std::string> value;
+ return GetSequenceString(key, &value);
+}
+
+std::vector<std::string> RTCStatsDictionary::GetSequenceString(
+ const std::string& key) const {
+ std::vector<std::string> value;
+ DCHECK(GetSequenceString(key, &value));
+ return value;
+}
+
+bool RTCStatsDictionary::GetBoolean(
+ const std::string& key, bool* out) const {
+ return stats_->GetBoolean(key, out);
+}
+
+bool RTCStatsDictionary::GetNumber(
+ const std::string& key, double* out) const {
+ return stats_->GetDouble(key, out);
+}
+
+bool RTCStatsDictionary::GetString(
+ const std::string& key, std::string* out) const {
+ return stats_->GetString(key, out);
+}
+
+bool RTCStatsDictionary::GetSequenceBoolean(
+ const std::string& key,
+ std::vector<bool>* out) const {
+ const base::ListValue* list;
+ if (!stats_->GetList(key, &list))
+ return false;
+ std::vector<bool> sequence;
+ bool element;
+ for (size_t i = 0; i < list->GetSize(); ++i) {
+ if (!list->GetBoolean(i, &element))
+ return false;
+ sequence.push_back(element);
+ }
+ *out = std::move(sequence);
+ return true;
+}
+
+bool RTCStatsDictionary::GetSequenceNumber(
+ const std::string& key,
+ std::vector<double>* out) const {
+ const base::ListValue* list;
+ if (!stats_->GetList(key, &list))
+ return false;
+ std::vector<double> sequence;
+ double element;
+ for (size_t i = 0; i < list->GetSize(); ++i) {
+ if (!list->GetDouble(i, &element))
+ return false;
+ sequence.push_back(element);
+ }
+ *out = std::move(sequence);
+ return true;
+}
+
+bool RTCStatsDictionary::GetSequenceString(
+ const std::string& key,
+ std::vector<std::string>* out) const {
+ const base::ListValue* list;
+ if (!stats_->GetList(key, &list))
+ return false;
+ std::vector<std::string> sequence;
+ std::string element;
+ for (size_t i = 0; i < list->GetSize(); ++i) {
+ if (!list->GetString(i, &element))
+ return false;
+ sequence.push_back(element);
+ }
+ *out = std::move(sequence);
+ return true;
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698