diff options
Diffstat (limited to 'chromium/chrome/browser/media/webrtc/test_stats_dictionary.cc')
-rw-r--r-- | chromium/chrome/browser/media/webrtc/test_stats_dictionary.cc | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/chromium/chrome/browser/media/webrtc/test_stats_dictionary.cc b/chromium/chrome/browser/media/webrtc/test_stats_dictionary.cc new file mode 100644 index 00000000000..a02c385a068 --- /dev/null +++ b/chromium/chrome/browser/media/webrtc/test_stats_dictionary.cc @@ -0,0 +1,216 @@ +// 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/test_stats_dictionary.h" + +#include "base/json/json_writer.h" +#include "base/logging.h" + +namespace content { + +TestStatsReportDictionary::TestStatsReportDictionary( + std::unique_ptr<base::DictionaryValue> report) + : report_(std::move(report)) { + CHECK(report_); +} + +TestStatsReportDictionary::~TestStatsReportDictionary() { +} + +void TestStatsReportDictionary::ForEach( + std::function<void(const TestStatsDictionary&)> iteration) { + for (base::DictionaryValue::Iterator it(*report_); !it.IsAtEnd(); + it.Advance()) { + const base::DictionaryValue* it_value; + CHECK(it.value().GetAsDictionary(&it_value)); + iteration(TestStatsDictionary(this, it_value)); + } +} + +std::vector<TestStatsDictionary> TestStatsReportDictionary::Filter( + std::function<bool(const TestStatsDictionary&)> filter) { + std::vector<TestStatsDictionary> result; + ForEach([&result, &filter](const TestStatsDictionary& stats) { + if (filter(stats)) + result.push_back(stats); + }); + return result; +} + +std::unique_ptr<TestStatsDictionary> TestStatsReportDictionary::Get( + const std::string& id) { + const base::DictionaryValue* dictionary; + if (!report_->GetDictionary(id, &dictionary)) + return nullptr; + return std::unique_ptr<TestStatsDictionary>( + new TestStatsDictionary(this, dictionary)); +} + +std::vector<TestStatsDictionary> TestStatsReportDictionary::GetAll() { + return Filter([](const TestStatsDictionary&) { return true; }); +} + +std::vector<TestStatsDictionary> TestStatsReportDictionary::GetByType( + const std::string& type) { + return Filter([&type](const TestStatsDictionary& stats) { + return stats.GetString("type") == type; + }); +} + +TestStatsDictionary::TestStatsDictionary( + TestStatsReportDictionary* report, const base::DictionaryValue* stats) + : report_(report), stats_(stats) { + CHECK(report_); + CHECK(stats_); +} + +TestStatsDictionary::TestStatsDictionary( + const TestStatsDictionary& other) = default; + +TestStatsDictionary::~TestStatsDictionary() { +} + +bool TestStatsDictionary::IsBoolean(const std::string& key) const { + bool value; + return GetBoolean(key, &value); +} + +bool TestStatsDictionary::GetBoolean(const std::string& key) const { + bool value; + CHECK(GetBoolean(key, &value)); + return value; +} + +bool TestStatsDictionary::IsNumber(const std::string& key) const { + double value; + return GetNumber(key, &value); +} + +double TestStatsDictionary::GetNumber(const std::string& key) const { + double value; + CHECK(GetNumber(key, &value)); + return value; +} + +bool TestStatsDictionary::IsString(const std::string& key) const { + std::string value; + return GetString(key, &value); +} + +std::string TestStatsDictionary::GetString(const std::string& key) const { + std::string value; + CHECK(GetString(key, &value)); + return value; +} + +bool TestStatsDictionary::IsSequenceBoolean(const std::string& key) const { + std::vector<bool> value; + return GetSequenceBoolean(key, &value); +} + +std::vector<bool> TestStatsDictionary::GetSequenceBoolean( + const std::string& key) const { + std::vector<bool> value; + CHECK(GetSequenceBoolean(key, &value)); + return value; +} + +bool TestStatsDictionary::IsSequenceNumber(const std::string& key) const { + std::vector<double> value; + return GetSequenceNumber(key, &value); +} + +std::vector<double> TestStatsDictionary::GetSequenceNumber( + const std::string& key) const { + std::vector<double> value; + CHECK(GetSequenceNumber(key, &value)); + return value; +} + +bool TestStatsDictionary::IsSequenceString(const std::string& key) const { + std::vector<std::string> value; + return GetSequenceString(key, &value); +} + +std::vector<std::string> TestStatsDictionary::GetSequenceString( + const std::string& key) const { + std::vector<std::string> value; + CHECK(GetSequenceString(key, &value)); + return value; +} + +bool TestStatsDictionary::GetBoolean( + const std::string& key, bool* out) const { + return stats_->GetBoolean(key, out); +} + +bool TestStatsDictionary::GetNumber( + const std::string& key, double* out) const { + return stats_->GetDouble(key, out); +} + +bool TestStatsDictionary::GetString( + const std::string& key, std::string* out) const { + return stats_->GetString(key, out); +} + +bool TestStatsDictionary::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 TestStatsDictionary::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 TestStatsDictionary::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; +} + +std::string TestStatsDictionary::ToString() const { + std::string str; + CHECK(base::JSONWriter::WriteWithOptions( + *stats_, base::JSONWriter::OPTIONS_PRETTY_PRINT, &str)); + return str; +} + +} // namespace content |