Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cc/scheduler/rolling_sample_window.h" | |
| 6 #include "testing/gtest/include/gtest/gtest.h" | |
| 7 | |
| 8 namespace cc { | |
| 9 namespace { | |
| 10 | |
| 11 TEST(RollingSampleWindowTest, EmptyWindow) { | |
| 12 RollingSampleWindow empty_window(0); | |
| 13 | |
| 14 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(0.0)); | |
| 15 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(50.0)); | |
| 16 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(100.0)); | |
| 17 | |
| 18 empty_window.InsertSample(base::TimeDelta::FromMilliseconds(10)); | |
| 19 empty_window.InsertSample(base::TimeDelta::FromMilliseconds(15)); | |
| 20 empty_window.InsertSample(base::TimeDelta::FromMilliseconds(20)); | |
| 21 | |
| 22 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(0.0)); | |
| 23 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(50.0)); | |
| 24 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(100.0)); | |
| 25 | |
| 26 empty_window.Clear(); | |
| 27 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(0.0)); | |
| 28 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(50.0)); | |
| 29 EXPECT_EQ(base::TimeDelta(), empty_window.Percentile(100.0)); | |
| 30 } | |
| 31 | |
| 32 TEST(RollingSampleWindowTest, SizeOneWindow) { | |
| 33 RollingSampleWindow size_one_window(1); | |
| 34 base::TimeDelta sample1 = base::TimeDelta::FromMilliseconds(10); | |
| 35 base::TimeDelta sample2 = base::TimeDelta::FromMilliseconds(20); | |
| 36 | |
| 37 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(0.0)); | |
| 38 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(50.0)); | |
| 39 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(100.0)); | |
| 40 | |
| 41 size_one_window.InsertSample(sample1); | |
| 42 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(0.0)); | |
|
brianderson
2013/05/31 18:42:05
Would it make sense for the 0th percentile to retu
ajuma
2013/05/31 20:41:11
My initial thought was for Percentile(X) to return
| |
| 43 EXPECT_EQ(sample1, size_one_window.Percentile(50.0)); | |
| 44 EXPECT_EQ(sample1, size_one_window.Percentile(100.0)); | |
| 45 | |
| 46 size_one_window.InsertSample(sample2); | |
| 47 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(0.0)); | |
| 48 EXPECT_EQ(sample2, size_one_window.Percentile(50.0)); | |
| 49 EXPECT_EQ(sample2, size_one_window.Percentile(100.0)); | |
| 50 | |
| 51 size_one_window.Clear(); | |
| 52 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(0.0)); | |
| 53 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(50.0)); | |
| 54 EXPECT_EQ(base::TimeDelta(), size_one_window.Percentile(100.0)); | |
| 55 } | |
| 56 | |
| 57 TEST(RollingSampleWindowTest, LargeWindow) { | |
| 58 RollingSampleWindow large_window(100); | |
| 59 base::TimeDelta sample1 = base::TimeDelta::FromMilliseconds(150); | |
| 60 base::TimeDelta sample2 = base::TimeDelta::FromMilliseconds(250); | |
| 61 base::TimeDelta sample3 = base::TimeDelta::FromMilliseconds(200); | |
| 62 | |
| 63 large_window.InsertSample(sample1); | |
| 64 large_window.InsertSample(sample2); | |
| 65 | |
| 66 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(0.0)); | |
| 67 EXPECT_EQ(sample1, large_window.Percentile(25.0)); | |
| 68 EXPECT_EQ(sample2, large_window.Percentile(75.0)); | |
| 69 EXPECT_EQ(sample2, large_window.Percentile(100.0)); | |
| 70 | |
| 71 large_window.InsertSample(sample3); | |
| 72 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(0.0)); | |
| 73 EXPECT_EQ(sample1, large_window.Percentile(25.0)); | |
| 74 EXPECT_EQ(sample3, large_window.Percentile(50.0)); | |
| 75 EXPECT_EQ(sample2, large_window.Percentile(100.0)); | |
| 76 | |
| 77 // Fill the window. | |
| 78 for (int i = 1; i <= 97; i++) | |
| 79 large_window.InsertSample(base::TimeDelta::FromMilliseconds(i)); | |
| 80 | |
| 81 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(0.0)); | |
| 82 for (int i = 1; i <= 97; i++) { | |
| 83 EXPECT_EQ(base::TimeDelta::FromMilliseconds(i), | |
| 84 large_window.Percentile(i - 0.5)); | |
| 85 } | |
| 86 EXPECT_EQ(sample1, large_window.Percentile(97.5)); | |
| 87 EXPECT_EQ(sample3, large_window.Percentile(98.5)); | |
| 88 EXPECT_EQ(sample2, large_window.Percentile(99.5)); | |
| 89 | |
| 90 // Continue inserting samples, causing the oldest samples to be discarded. | |
| 91 base::TimeDelta sample4 = base::TimeDelta::FromMilliseconds(100); | |
| 92 base::TimeDelta sample5 = base::TimeDelta::FromMilliseconds(102); | |
| 93 base::TimeDelta sample6 = base::TimeDelta::FromMilliseconds(104); | |
| 94 large_window.InsertSample(sample4); | |
| 95 large_window.InsertSample(sample5); | |
| 96 large_window.InsertSample(sample6); | |
| 97 EXPECT_EQ(sample4, large_window.Percentile(97.5)); | |
| 98 EXPECT_EQ(sample5, large_window.Percentile(98.5)); | |
| 99 EXPECT_EQ(sample6, large_window.Percentile(99.5)); | |
| 100 | |
| 101 large_window.Clear(); | |
| 102 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(0.0)); | |
| 103 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(50.0)); | |
| 104 EXPECT_EQ(base::TimeDelta(), large_window.Percentile(100.0)); | |
| 105 } | |
| 106 | |
| 107 } // namespace | |
| 108 } // namespace cc | |
| OLD | NEW |