| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |