webrtc_m130/stats/rtc_stats.cc
Mirko Bonadei 4d706a9fd1 Revert "Reland "[Stats] Attribute::ToString(), to replace member ValueToString/ToJson.""
This reverts commit 55cdc29b9d7259d17ccc281855dd21adc51ca957.

Reason for revert: Breaks downstream project.

Original change's description:
> Reland "[Stats] Attribute::ToString(), to replace member ValueToString/ToJson."
>
> This is a reland of commit 54be7084e0861a0179a5fccd0b27edf7d7994bbb
>
> Original change's description:
> > [Stats] Attribute::ToString(), to replace member ValueToString/ToJson.
> >
> > Delete RTCStatsMember<T>::ValueToString() and ValueToJson() in favor of
> > Attribute::ToString().
> >
> > The difference between "ToString" and "ToJson" is that the "ToJson"
> > version converts 64-bit integers and doubles to floating points with no
> > more than ~15 digits of precision as to not exceed JSON's precision
> > limitations. So only in edge cases of really large numbers or numbers
> > with a silly number of digits will the two methods produce different
> > results. Also JSON puts '\"' around map key names, e.g. "{\"foo\":123}"
> > as opposed to "{foo:123}".
> >
> > Going forward we see no reason to maintain two different string
> > converted paths that are this similar, so we only implement one
> > Attribute::ToString() method which does what "ToJson" did.
> >
> > In the next CL we can delete RTCStatsMember<T>.
> >
> > Bug: webrtc:15164
> > Change-Id: Iaa8cf3bf14b40dc44664f75989832469603131c5
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/334640
> > Commit-Queue: Henrik Boström <hbos@webrtc.org>
> > Reviewed-by: Evan Shrubsole <eshr@google.com>
> > Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> > Cr-Commit-Position: refs/heads/main@{#41544}
>
> Bug: webrtc:15164
> Change-Id: If34509ebf3d7c0291442ae11596e7c2d3978fb64
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335240
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#41566}

Bug: webrtc:15164
Change-Id: I5819811237a6dbd85a8c738ca0180039fc705909
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335280
Reviewed-by: Christoffer Dewerin <jansson@google.com>
Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Jeremy Leconte <jleconte@google.com>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41567}
2024-01-19 08:03:48 +00:00

80 lines
2.1 KiB
C++

/*
* Copyright 2016 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "api/stats/rtc_stats.h"
#include <cstdio>
#include "rtc_base/strings/string_builder.h"
namespace webrtc {
RTCStats::RTCStats(const RTCStats& other)
: RTCStats(other.id_, other.timestamp_) {}
RTCStats::~RTCStats() {}
bool RTCStats::operator==(const RTCStats& other) const {
if (type() != other.type() || id() != other.id())
return false;
std::vector<Attribute> attributes = Attributes();
std::vector<Attribute> other_attributes = other.Attributes();
RTC_DCHECK_EQ(attributes.size(), other_attributes.size());
for (size_t i = 0; i < attributes.size(); ++i) {
if (attributes[i] != other_attributes[i]) {
return false;
}
}
return true;
}
bool RTCStats::operator!=(const RTCStats& other) const {
return !(*this == other);
}
std::string RTCStats::ToJson() const {
rtc::StringBuilder sb;
sb << "{\"type\":\"" << type()
<< "\","
"\"id\":\""
<< id_
<< "\","
"\"timestamp\":"
<< timestamp_.us();
for (const Attribute& attribute : Attributes()) {
if (attribute.has_value()) {
sb << ",\"" << attribute.name() << "\":";
if (attribute.holds_alternative<std::string>()) {
sb << "\"";
}
sb << absl::visit([](const auto* attr) { return attr->ValueToJson(); },
attribute.as_variant());
if (attribute.holds_alternative<std::string>()) {
sb << "\"";
}
}
}
sb << "}";
return sb.Release();
}
std::vector<Attribute> RTCStats::Attributes() const {
return AttributesImpl(0);
}
std::vector<Attribute> RTCStats::AttributesImpl(
size_t additional_capacity) const {
std::vector<Attribute> attributes;
attributes.reserve(additional_capacity);
return attributes;
}
} // namespace webrtc