Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc

Issue 2761503002: [scheduler] CPUTimeBudgetPool: Require a minimal level of budget to run (Closed)
Patch Set: Remove #include <*stream> Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/scheduler/renderer/task_queue_throttler.h" 5 #include "platform/scheduler/renderer/task_queue_throttler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 std::unique_ptr<base::SimpleTestTickClock> clock_; 49 std::unique_ptr<base::SimpleTestTickClock> clock_;
50 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 50 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
51 scoped_refptr<SchedulerTqmDelegate> delegate_; 51 scoped_refptr<SchedulerTqmDelegate> delegate_;
52 std::unique_ptr<RendererSchedulerImpl> scheduler_; 52 std::unique_ptr<RendererSchedulerImpl> scheduler_;
53 TaskQueueThrottler* task_queue_throttler_; // NOT OWNED 53 TaskQueueThrottler* task_queue_throttler_; // NOT OWNED
54 54
55 DISALLOW_COPY_AND_ASSIGN(BudgetPoolTest); 55 DISALLOW_COPY_AND_ASSIGN(BudgetPoolTest);
56 }; 56 };
57 57
58 TEST_F(BudgetPoolTest, CPUTimeBudgetPool) { 58 TEST_F(BudgetPoolTest, CPUTimeBudgetPool) {
59 CPUTimeBudgetPool* pool = task_queue_throttler_->CreateCPUTimeBudgetPool( 59 CPUTimeBudgetPool* pool =
60 "test", base::nullopt, base::nullopt); 60 task_queue_throttler_->CreateCPUTimeBudgetPool("test");
61 61
62 base::TimeTicks time_zero = clock_->NowTicks(); 62 base::TimeTicks time_zero = clock_->NowTicks();
63 63
64 pool->SetTimeBudgetRecoveryRate(time_zero, 0.1); 64 pool->SetTimeBudgetRecoveryRate(time_zero, 0.1);
65 65
66 EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero)); 66 EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero));
67 EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime()); 67 EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime());
68 68
69 // Run an expensive task and make sure that we're throttled. 69 // Run an expensive task and make sure that we're throttled.
70 pool->RecordTaskRunTime(time_zero, 70 pool->RecordTaskRunTime(time_zero,
(...skipping 12 matching lines...) Expand all
83 pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(2000), 83 pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(2000),
84 time_zero + base::TimeDelta::FromMilliseconds(2020)); 84 time_zero + base::TimeDelta::FromMilliseconds(2020));
85 EXPECT_TRUE(pool->HasEnoughBudgetToRun( 85 EXPECT_TRUE(pool->HasEnoughBudgetToRun(
86 time_zero + base::TimeDelta::FromMilliseconds(2020))); 86 time_zero + base::TimeDelta::FromMilliseconds(2020)));
87 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(2020), 87 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(2020),
88 pool->GetNextAllowedRunTime()); 88 pool->GetNextAllowedRunTime());
89 89
90 pool->Close(); 90 pool->Close();
91 } 91 }
92 92
93 TEST_F(BudgetPoolTest, CPUTimeBudgetPoolMinBudgetLevelToRun) {
94 CPUTimeBudgetPool* pool =
95 task_queue_throttler_->CreateCPUTimeBudgetPool("test");
96
97 base::TimeTicks time_zero = clock_->NowTicks();
98
99 pool->SetMinBudgetLevelToRun(time_zero,
100 base::TimeDelta::FromMilliseconds(10));
101 pool->SetTimeBudgetRecoveryRate(time_zero, 0.1);
102
103 EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero));
104 EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime());
105
106 pool->RecordTaskRunTime(time_zero,
107 time_zero + base::TimeDelta::FromMilliseconds(10));
108 EXPECT_FALSE(pool->HasEnoughBudgetToRun(
109 time_zero + base::TimeDelta::FromMilliseconds(15)));
110 EXPECT_FALSE(pool->HasEnoughBudgetToRun(
111 time_zero + base::TimeDelta::FromMilliseconds(150)));
112 // We need to wait extra 100ms to get budget of 10ms.
113 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(200),
114 pool->GetNextAllowedRunTime());
115
116 pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(200),
117 time_zero + base::TimeDelta::FromMilliseconds(205));
118 // We can run when budget is non-negative even when it less than 10ms.
119 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(205),
120 pool->GetNextAllowedRunTime());
121
122 pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(205),
123 time_zero + base::TimeDelta::FromMilliseconds(215));
124 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(350),
125 pool->GetNextAllowedRunTime());
126 }
127
93 } // namespace scheduler 128 } // namespace scheduler
94 } // namespace blink 129 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698