| // Copyright 2017 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include <string> |
| |
| #include "base/time.h" |
| #include "cobalt/base/c_val_collection_timer_stats.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using ::testing::InSequence; |
| using ::testing::Return; |
| using ::testing::SaveArg; |
| using ::testing::_; |
| |
| namespace base { |
| |
| TEST(CValCollectionTimerStatsTest, DefaultValues) { |
| const std::string name = "CollectionTimerStats"; |
| const size_t max_size = 5; |
| bool enable_entry_list_c_val = false; |
| |
| base::CValCollectionTimerStats<> cval(name, max_size, |
| enable_entry_list_c_val); |
| |
| base::CValManager* cvm = base::CValManager::GetInstance(); |
| base::optional<std::string> count = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Cnt", name.c_str())); |
| base::optional<std::string> avg = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Avg", name.c_str())); |
| base::optional<std::string> min = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Min", name.c_str())); |
| base::optional<std::string> max = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Max", name.c_str())); |
| base::optional<std::string> pct25 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.25th", name.c_str())); |
| base::optional<std::string> pct50 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.50th", name.c_str())); |
| base::optional<std::string> pct75 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.75th", name.c_str())); |
| base::optional<std::string> pct95 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.95th", name.c_str())); |
| base::optional<std::string> std = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Std", name.c_str())); |
| base::optional<std::string> entry_list = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.EntryList", name.c_str())); |
| |
| EXPECT_TRUE(count); |
| EXPECT_EQ(*count, "0"); |
| EXPECT_TRUE(avg); |
| EXPECT_EQ(*avg, "0us"); |
| EXPECT_TRUE(min); |
| EXPECT_EQ(*min, "0us"); |
| EXPECT_TRUE(max); |
| EXPECT_EQ(*max, "0us"); |
| EXPECT_TRUE(pct25); |
| EXPECT_EQ(*pct25, "0us"); |
| EXPECT_TRUE(pct50); |
| EXPECT_EQ(*pct50, "0us"); |
| EXPECT_TRUE(pct75); |
| EXPECT_EQ(*pct75, "0us"); |
| EXPECT_TRUE(pct95); |
| EXPECT_EQ(*pct95, "0us"); |
| EXPECT_TRUE(std); |
| EXPECT_EQ(*std, "0us"); |
| EXPECT_FALSE(entry_list); |
| } |
| |
| TEST(CValCollectionTimerStatsTest, NoFlush) { |
| const std::string name = "CollectionTimerStats"; |
| const size_t max_size = 5; |
| bool enable_entry_list_c_val = true; |
| |
| base::CValCollectionTimerStats<> cval(name, max_size, |
| enable_entry_list_c_val); |
| cval.Start(base::TimeTicks::FromInternalValue(1000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(4000)); |
| cval.Start(base::TimeTicks::FromInternalValue(4000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(13000)); |
| cval.Start(base::TimeTicks::FromInternalValue(13000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(14000)); |
| cval.Start(base::TimeTicks::FromInternalValue(14000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(21000)); |
| |
| base::CValManager* cvm = base::CValManager::GetInstance(); |
| base::optional<std::string> count = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Cnt", name.c_str())); |
| base::optional<std::string> avg = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Avg", name.c_str())); |
| base::optional<std::string> min = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Min", name.c_str())); |
| base::optional<std::string> max = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Max", name.c_str())); |
| base::optional<std::string> pct25 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.25th", name.c_str())); |
| base::optional<std::string> pct50 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.50th", name.c_str())); |
| base::optional<std::string> pct75 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.75th", name.c_str())); |
| base::optional<std::string> pct95 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.95th", name.c_str())); |
| base::optional<std::string> std = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Std", name.c_str())); |
| base::optional<std::string> entry_list = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.EntryList", name.c_str())); |
| |
| EXPECT_TRUE(count); |
| EXPECT_EQ(*count, "0"); |
| EXPECT_TRUE(avg); |
| EXPECT_EQ(*avg, "0us"); |
| EXPECT_TRUE(min); |
| EXPECT_EQ(*min, "0us"); |
| EXPECT_TRUE(max); |
| EXPECT_EQ(*max, "0us"); |
| EXPECT_TRUE(pct25); |
| EXPECT_EQ(*pct25, "0us"); |
| EXPECT_TRUE(pct50); |
| EXPECT_EQ(*pct50, "0us"); |
| EXPECT_TRUE(pct75); |
| EXPECT_EQ(*pct75, "0us"); |
| EXPECT_TRUE(pct95); |
| EXPECT_EQ(*pct95, "0us"); |
| EXPECT_TRUE(std); |
| EXPECT_EQ(*std, "0us"); |
| EXPECT_TRUE(entry_list); |
| EXPECT_EQ(*entry_list, "[]"); |
| } |
| |
| TEST(CValCollectionTimerStatsTest, MaxSizeFlush) { |
| const std::string name = "CollectionTimerStats"; |
| const size_t max_size = 5; |
| bool enable_entry_list_c_val = true; |
| |
| base::CValCollectionTimerStats<> cval(name, max_size, |
| enable_entry_list_c_val); |
| cval.Start(base::TimeTicks::FromInternalValue(1000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(4000)); |
| cval.Start(base::TimeTicks::FromInternalValue(4000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(13000)); |
| cval.Start(base::TimeTicks::FromInternalValue(13000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(14000)); |
| cval.Start(base::TimeTicks::FromInternalValue(14000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(21000)); |
| cval.Start(base::TimeTicks::FromInternalValue(21000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(26000)); |
| cval.Flush(); |
| |
| base::CValManager* cvm = base::CValManager::GetInstance(); |
| base::optional<std::string> count = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Cnt", name.c_str())); |
| base::optional<std::string> avg = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Avg", name.c_str())); |
| base::optional<std::string> min = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Min", name.c_str())); |
| base::optional<std::string> max = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Max", name.c_str())); |
| base::optional<std::string> pct25 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.25th", name.c_str())); |
| base::optional<std::string> pct50 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.50th", name.c_str())); |
| base::optional<std::string> pct75 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.75th", name.c_str())); |
| base::optional<std::string> pct95 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.95th", name.c_str())); |
| base::optional<std::string> std = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Std", name.c_str())); |
| base::optional<std::string> entry_list = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.EntryList", name.c_str())); |
| |
| EXPECT_TRUE(count); |
| EXPECT_EQ(*count, "5"); |
| EXPECT_TRUE(avg); |
| EXPECT_EQ(*avg, "5.0ms"); |
| EXPECT_TRUE(min); |
| EXPECT_EQ(*min, "1000us"); |
| EXPECT_TRUE(max); |
| EXPECT_EQ(*max, "9.0ms"); |
| EXPECT_TRUE(pct25); |
| EXPECT_EQ(*pct25, "3.0ms"); |
| EXPECT_TRUE(pct50); |
| EXPECT_EQ(*pct50, "5.0ms"); |
| EXPECT_TRUE(pct75); |
| EXPECT_EQ(*pct75, "7.0ms"); |
| EXPECT_TRUE(pct95); |
| EXPECT_EQ(*pct95, "8.6ms"); |
| EXPECT_TRUE(std); |
| EXPECT_EQ(*std, "3.2ms"); |
| EXPECT_TRUE(entry_list); |
| EXPECT_EQ(*entry_list, "[3000, 9000, 1000, 7000, 5000]"); |
| } |
| |
| TEST(CValCollectionTimerStatsTest, ManualFlush) { |
| const std::string name = "CollectionTimerStats"; |
| const size_t max_size = 5; |
| bool enable_entry_list_c_val = true; |
| |
| base::CValCollectionTimerStats<CValPublic> cval(name, max_size, |
| enable_entry_list_c_val); |
| cval.Start(base::TimeTicks::FromInternalValue(1000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(4000)); |
| cval.Start(base::TimeTicks::FromInternalValue(4000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(13000)); |
| cval.Start(base::TimeTicks::FromInternalValue(13000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(14000)); |
| cval.Start(base::TimeTicks::FromInternalValue(14000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(21000)); |
| cval.Flush(); |
| cval.Start(base::TimeTicks::FromInternalValue(21000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(26000)); |
| |
| base::CValManager* cvm = base::CValManager::GetInstance(); |
| base::optional<std::string> count = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Cnt", name.c_str())); |
| base::optional<std::string> avg = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Avg", name.c_str())); |
| base::optional<std::string> min = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Min", name.c_str())); |
| base::optional<std::string> max = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Max", name.c_str())); |
| base::optional<std::string> pct25 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.25th", name.c_str())); |
| base::optional<std::string> pct50 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.50th", name.c_str())); |
| base::optional<std::string> pct75 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.75th", name.c_str())); |
| base::optional<std::string> pct95 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.95th", name.c_str())); |
| base::optional<std::string> std = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Std", name.c_str())); |
| base::optional<std::string> entry_list = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.EntryList", name.c_str())); |
| |
| EXPECT_TRUE(count); |
| EXPECT_EQ(*count, "4"); |
| EXPECT_TRUE(avg); |
| EXPECT_EQ(*avg, "5.0ms"); |
| EXPECT_TRUE(min); |
| EXPECT_EQ(*min, "1000us"); |
| EXPECT_TRUE(max); |
| EXPECT_EQ(*max, "9.0ms"); |
| EXPECT_TRUE(pct25); |
| EXPECT_EQ(*pct25, "2.5ms"); |
| EXPECT_TRUE(pct50); |
| EXPECT_EQ(*pct50, "5.0ms"); |
| EXPECT_TRUE(pct75); |
| EXPECT_EQ(*pct75, "7.5ms"); |
| EXPECT_TRUE(pct95); |
| EXPECT_EQ(*pct95, "8.7ms"); |
| EXPECT_TRUE(std); |
| EXPECT_EQ(*std, "3.7ms"); |
| EXPECT_TRUE(entry_list); |
| EXPECT_EQ(*entry_list, "[3000, 9000, 1000, 7000]"); |
| } |
| |
| TEST(CValCollectionTimerStatsTest, TwoManualFlushes) { |
| const std::string name = "CollectionTimer"; |
| const size_t max_size = 5; |
| bool enable_entry_list_c_val = true; |
| |
| base::CValCollectionTimerStats<CValDebug> cval(name, max_size, |
| enable_entry_list_c_val); |
| cval.Start(base::TimeTicks::FromInternalValue(1000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(4000)); |
| cval.Start(base::TimeTicks::FromInternalValue(4000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(13000)); |
| cval.Start(base::TimeTicks::FromInternalValue(13000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(14000)); |
| cval.Start(base::TimeTicks::FromInternalValue(14000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(21000)); |
| cval.Flush(); |
| cval.Start(base::TimeTicks::FromInternalValue(21000)); |
| cval.Stop(base::TimeTicks::FromInternalValue(26000)); |
| cval.Flush(); |
| |
| base::CValManager* cvm = base::CValManager::GetInstance(); |
| base::optional<std::string> count = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Cnt", name.c_str())); |
| base::optional<std::string> avg = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Avg", name.c_str())); |
| base::optional<std::string> min = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Min", name.c_str())); |
| base::optional<std::string> max = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Max", name.c_str())); |
| base::optional<std::string> pct25 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.25th", name.c_str())); |
| base::optional<std::string> pct50 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.50th", name.c_str())); |
| base::optional<std::string> pct75 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.75th", name.c_str())); |
| base::optional<std::string> pct95 = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Pct.95th", name.c_str())); |
| base::optional<std::string> std = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.Std", name.c_str())); |
| base::optional<std::string> entry_list = |
| cvm->GetValueAsPrettyString(StringPrintf("%s.EntryList", name.c_str())); |
| |
| EXPECT_TRUE(count); |
| EXPECT_EQ(*count, "1"); |
| EXPECT_TRUE(avg); |
| EXPECT_EQ(*avg, "5.0ms"); |
| EXPECT_TRUE(min); |
| EXPECT_EQ(*min, "5.0ms"); |
| EXPECT_TRUE(max); |
| EXPECT_EQ(*max, "5.0ms"); |
| EXPECT_TRUE(pct25); |
| EXPECT_EQ(*pct25, "5.0ms"); |
| EXPECT_TRUE(pct50); |
| EXPECT_EQ(*pct50, "5.0ms"); |
| EXPECT_TRUE(pct75); |
| EXPECT_EQ(*pct75, "5.0ms"); |
| EXPECT_TRUE(pct95); |
| EXPECT_EQ(*pct95, "5.0ms"); |
| EXPECT_TRUE(std); |
| EXPECT_EQ(*std, "0us"); |
| EXPECT_TRUE(entry_list); |
| EXPECT_EQ(*entry_list, "[5000]"); |
| } |
| |
| } // namespace base |