diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2018-10-27 04:58:39 +0200 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2018-10-27 17:16:58 +0200 |
| commit | d98c0da41b2101d753ea230b890d925ae1fd8291 (patch) | |
| tree | f20d2bece3fa1eebe7224a871eb1f2da95dc30e2 /Source/Core/Common/Analytics.cpp | |
| parent | 64e04eb38c934418fcb78226ec4fe820b06bde33 (diff) | |
Common/Analytics: add basic support for vector serialization
Only supports u32 for now since that's the only thing we need.
Diffstat (limited to 'Source/Core/Common/Analytics.cpp')
| -rw-r--r-- | Source/Core/Common/Analytics.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Source/Core/Common/Analytics.cpp b/Source/Core/Common/Analytics.cpp index ab25cecabd..4441e9a7df 100644 --- a/Source/Core/Common/Analytics.cpp +++ b/Source/Core/Common/Analytics.cpp @@ -5,6 +5,7 @@ #include <cmath> #include <cstdio> #include <string> +#include <type_traits> #include "Common/Analytics.h" #include "Common/CommonTypes.h" @@ -17,7 +18,7 @@ namespace { // Format version number, used as the first byte of every report sent. // Increment for any change to the wire format. -constexpr u8 WIRE_FORMAT_VERSION = 0; +constexpr u8 WIRE_FORMAT_VERSION = 1; // Identifiers for the value types supported by the analytics reporting wire // format. @@ -28,8 +29,17 @@ enum class TypeId : u8 UINT = 2, SINT = 3, FLOAT = 4, + + // Flags which can be combined with other types. + ARRAY = 0x80, }; +TypeId operator|(TypeId l, TypeId r) +{ + using ut = std::underlying_type_t<TypeId>; + return static_cast<TypeId>(static_cast<ut>(l) | static_cast<ut>(r)); +} + void AppendBool(std::string* out, bool v) { out->push_back(v ? '\xFF' : '\x00'); @@ -112,6 +122,15 @@ void AnalyticsReportBuilder::AppendSerializedValue(std::string* report, float v) AppendBytes(report, reinterpret_cast<u8*>(&v), sizeof(v), false); } +void AnalyticsReportBuilder::AppendSerializedValueVector(std::string* report, + const std::vector<u32>& v) +{ + AppendType(report, TypeId::UINT | TypeId::ARRAY); + AppendVarInt(report, v.size()); + for (u32 x : v) + AppendVarInt(report, x); +} + AnalyticsReporter::AnalyticsReporter() { m_reporter_thread = std::thread(&AnalyticsReporter::ThreadProc, this); |
