andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 11 | #include "test/testsupport/perf_test.h" |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 12 | |
Yves Gerey | 3e70781 | 2018-11-28 16:47:49 +0100 | [diff] [blame] | 13 | #include <algorithm> |
Oleh Prypin | d136b28 | 2018-10-03 13:53:44 +0200 | [diff] [blame] | 14 | #include <limits> |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 15 | #include <string> |
| 16 | |
Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 17 | #include "test/gtest.h" |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 18 | |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 19 | namespace { |
| 20 | |
| 21 | const char* kJsonExpected = R"({ |
| 22 | "format_version":"1.0", |
| 23 | "charts":{ |
| 24 | "foobar":{ |
| 25 | "baz_v":{ |
| 26 | "type":"scalar", |
| 27 | "value":7, |
| 28 | "units":"widgets" |
| 29 | }, |
| 30 | "baz_me":{ |
Edward Lemur | c492bf1 | 2018-01-05 15:06:59 +0100 | [diff] [blame] | 31 | "type":"list_of_scalar_values", |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 32 | "values":[1], |
| 33 | "std":2, |
| 34 | "units":"lemurs" |
| 35 | }, |
| 36 | "baz_vl":{ |
Edward Lemur | c492bf1 | 2018-01-05 15:06:59 +0100 | [diff] [blame] | 37 | "type":"list_of_scalar_values", |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 38 | "values":[1,2,3], |
| 39 | "units":"units" |
| 40 | } |
| 41 | }, |
| 42 | "measurementmodifier":{ |
| 43 | "trace":{ |
| 44 | "type":"scalar", |
| 45 | "value":42, |
| 46 | "units":"units" |
| 47 | } |
| 48 | } |
| 49 | } |
| 50 | })"; |
| 51 | |
| 52 | std::string RemoveSpaces(std::string s) { |
| 53 | s.erase(std::remove(s.begin(), s.end(), ' '), s.end()); |
| 54 | s.erase(std::remove(s.begin(), s.end(), '\n'), s.end()); |
| 55 | return s; |
| 56 | } |
| 57 | |
| 58 | } // namespace |
| 59 | |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 60 | namespace webrtc { |
| 61 | namespace test { |
| 62 | |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 63 | class PerfTest : public ::testing::Test { |
| 64 | protected: |
Yves Gerey | 665174f | 2018-06-19 15:03:05 +0200 | [diff] [blame] | 65 | void TearDown() override { ClearPerfResults(); } |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 66 | }; |
| 67 | |
Edward Lemur | f49a56b | 2017-11-29 20:29:30 +0100 | [diff] [blame] | 68 | #if defined(WEBRTC_IOS) |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 69 | #define MAYBE_TestPrintResult DISABLED_TestPrintResult |
Edward Lemur | f49a56b | 2017-11-29 20:29:30 +0100 | [diff] [blame] | 70 | #else |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 71 | #define MAYBE_TestPrintResult TestPrintResult |
Edward Lemur | f49a56b | 2017-11-29 20:29:30 +0100 | [diff] [blame] | 72 | #endif |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 73 | TEST_F(PerfTest, MAYBE_TestPrintResult) { |
Mirko Bonadei | 6a489f2 | 2019-04-09 15:11:12 +0200 | [diff] [blame] | 74 | ::testing::internal::CaptureStdout(); |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 75 | std::string expected; |
| 76 | |
| 77 | expected += "RESULT measurementmodifier: trace= 42 units\n"; |
Edward Lemur | f7ff3e8 | 2017-11-22 16:32:01 +0100 | [diff] [blame] | 78 | PrintResult("measurement", "modifier", "trace", 42, "units", false); |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 79 | |
Edward Lemur | cb666f5 | 2017-12-04 13:21:01 +0100 | [diff] [blame] | 80 | expected += "*RESULT foobar: baz_v= 1423730 widgets\n"; |
| 81 | PrintResult("foo", "bar", "baz_v", 1423730, "widgets", true); |
Edward Lemur | 2f06168 | 2017-11-24 13:40:01 +0100 | [diff] [blame] | 82 | |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 83 | expected += "RESULT foobar: baz_me= {1,2} lemurs\n"; |
| 84 | PrintResultMeanAndError("foo", "bar", "baz_me", 1, 2, "lemurs", false); |
Edward Lemur | 2f06168 | 2017-11-24 13:40:01 +0100 | [diff] [blame] | 85 | |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 86 | const double kListOfScalars[] = {1, 2, 3}; |
| 87 | expected += "RESULT foobar: baz_vl= [1,2,3] units\n"; |
| 88 | PrintResultList("foo", "bar", "baz_vl", kListOfScalars, "units", false); |
Edward Lemur | f7ff3e8 | 2017-11-22 16:32:01 +0100 | [diff] [blame] | 89 | |
Mirko Bonadei | 6a489f2 | 2019-04-09 15:11:12 +0200 | [diff] [blame] | 90 | EXPECT_EQ(expected, ::testing::internal::GetCapturedStdout()); |
Edward Lemur | 936dfb1 | 2017-11-30 11:43:42 +0100 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | TEST_F(PerfTest, TestGetPerfResultsJSON) { |
| 94 | PrintResult("measurement", "modifier", "trace", 42, "units", false); |
| 95 | PrintResult("foo", "bar", "baz_v", 7, "widgets", true); |
| 96 | PrintResultMeanAndError("foo", "bar", "baz_me", 1, 2, "lemurs", false); |
| 97 | const double kListOfScalars[] = {1, 2, 3}; |
| 98 | PrintResultList("foo", "bar", "baz_vl", kListOfScalars, "units", false); |
| 99 | |
| 100 | EXPECT_EQ(RemoveSpaces(kJsonExpected), GetPerfResultsJSON()); |
| 101 | } |
| 102 | |
| 103 | TEST_F(PerfTest, TestClearPerfResults) { |
| 104 | PrintResult("measurement", "modifier", "trace", 42, "units", false); |
| 105 | ClearPerfResults(); |
| 106 | EXPECT_EQ(R"({"format_version":"1.0","charts":{}})", GetPerfResultsJSON()); |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 107 | } |
| 108 | |
Oleh Prypin | d136b28 | 2018-10-03 13:53:44 +0200 | [diff] [blame] | 109 | #if GTEST_HAS_DEATH_TEST |
| 110 | using PerfDeathTest = PerfTest; |
| 111 | |
| 112 | TEST_F(PerfDeathTest, TestFiniteResultError) { |
| 113 | const double kNan = std::numeric_limits<double>::quiet_NaN(); |
| 114 | const double kInf = std::numeric_limits<double>::infinity(); |
| 115 | |
| 116 | EXPECT_DEATH(PrintResult("a", "b", "c", kNan, "d", false), "finit"); |
| 117 | EXPECT_DEATH(PrintResult("a", "b", "c", kInf, "d", false), "finit"); |
| 118 | |
| 119 | EXPECT_DEATH(PrintResultMeanAndError("a", "b", "c", kNan, 1, "d", false), ""); |
| 120 | EXPECT_DEATH(PrintResultMeanAndError("a", "b", "c", 1, kInf, "d", false), ""); |
| 121 | |
| 122 | const double kNanList[] = {kNan, kNan}; |
| 123 | EXPECT_DEATH(PrintResultList("a", "b", "c", kNanList, "d", false), ""); |
| 124 | const double kInfList[] = {0, kInf}; |
| 125 | EXPECT_DEATH(PrintResultList("a", "b", "c", kInfList, "d", false), ""); |
| 126 | } |
| 127 | #endif |
| 128 | |
andrew@webrtc.org | 2009f6b | 2012-11-20 00:20:20 +0000 | [diff] [blame] | 129 | } // namespace test |
| 130 | } // namespace webrtc |