Add a function to report perf results in JSON format.

Add support to report perf results in the JSON format specified in [1].

[1] https://github.com/catapult-project/catapult/blob/master/dashboard/docs/data-format.md


Bug: webrtc:8566
Change-Id: I25f829a4b012b3e2a3d56d61582a674f780148d0
Reviewed-on: https://webrtc-review.googlesource.com/26031
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20950}
This commit is contained in:
Edward Lemur
2017-11-30 11:43:42 +01:00
committed by Commit Bot
parent 30e5b26026
commit 936dfb1cb2
4 changed files with 212 additions and 47 deletions

View File

@ -14,30 +14,97 @@
#include "test/gtest.h"
namespace {
const char* kJsonExpected = R"({
"format_version":"1.0",
"charts":{
"foobar":{
"baz_v":{
"type":"scalar",
"value":7,
"units":"widgets"
},
"baz_me":{
"type":"list_of_scalars",
"values":[1],
"std":2,
"units":"lemurs"
},
"baz_vl":{
"type":"list_of_scalars",
"values":[1,2,3],
"units":"units"
}
},
"measurementmodifier":{
"trace":{
"type":"scalar",
"value":42,
"units":"units"
}
}
}
})";
std::string RemoveSpaces(std::string s) {
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
s.erase(std::remove(s.begin(), s.end(), '\n'), s.end());
return s;
}
} // namespace
namespace webrtc {
namespace test {
class PerfTest : public ::testing::Test {
protected:
void TearDown() override {
ClearPerfResults();
}
};
#if defined(WEBRTC_IOS)
#define MAYBE_AppendResult DISABLED_AppendResult
#define MAYBE_TestPrintResult DISABLED_TestPrintResult
#else
#define MAYBE_AppendResult AppendResult
#define MAYBE_TestPrintResult TestPrintResult
#endif
TEST(PerfTest, MAYBE_AppendResult) {
TEST_F(PerfTest, MAYBE_TestPrintResult) {
testing::internal::CaptureStdout();
std::string expected = "RESULT measurementmodifier: trace= 42 units\n";
std::string expected;
expected += "RESULT measurementmodifier: trace= 42 units\n";
PrintResult("measurement", "modifier", "trace", 42, "units", false);
expected += "*RESULT foobar: baz= 7 widgets\n";
PrintResult("foo", "bar", "baz", 7, "widgets", true);
expected += "*RESULT foobar: baz_v= 7 widgets\n";
PrintResult("foo", "bar", "baz_v", 7, "widgets", true);
expected += "RESULT foobar: baz= {1,2} lemurs\n";
PrintResultMeanAndError("foo", "bar", "baz", 1, 2, "lemurs", false);
expected += "RESULT foobar: baz_me= {1,2} lemurs\n";
PrintResultMeanAndError("foo", "bar", "baz_me", 1, 2, "lemurs", false);
expected += "RESULT foobar: baz= [1,2,3] units\n";
PrintResultList("foo", "bar", "baz", {1, 2, 3}, "units", false);
const double kListOfScalars[] = {1, 2, 3};
expected += "RESULT foobar: baz_vl= [1,2,3] units\n";
PrintResultList("foo", "bar", "baz_vl", kListOfScalars, "units", false);
std::string output = testing::internal::GetCapturedStdout();
EXPECT_EQ(expected, output);
EXPECT_EQ(expected, testing::internal::GetCapturedStdout());
}
TEST_F(PerfTest, TestGetPerfResultsJSON) {
PrintResult("measurement", "modifier", "trace", 42, "units", false);
PrintResult("foo", "bar", "baz_v", 7, "widgets", true);
PrintResultMeanAndError("foo", "bar", "baz_me", 1, 2, "lemurs", false);
const double kListOfScalars[] = {1, 2, 3};
PrintResultList("foo", "bar", "baz_vl", kListOfScalars, "units", false);
EXPECT_EQ(RemoveSpaces(kJsonExpected), GetPerfResultsJSON());
}
TEST_F(PerfTest, TestClearPerfResults) {
PrintResult("measurement", "modifier", "trace", 42, "units", false);
ClearPerfResults();
EXPECT_EQ(R"({"format_version":"1.0","charts":{}})", GetPerfResultsJSON());
}
} // namespace test