Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "platform/scheduler/renderer/task_queue_throttler.h" | |
| 6 | |
| 7 #include <stddef.h> | |
| 8 | |
| 9 #include <memory> | |
| 10 | |
| 11 #include "base/callback.h" | |
| 12 #include "base/macros.h" | |
| 13 #include "base/memory/ptr_util.h" | |
| 14 #include "base/test/simple_test_tick_clock.h" | |
| 15 #include "cc/test/ordered_simple_task_runner.h" | |
| 16 #include "platform/scheduler/base/real_time_domain.h" | |
| 17 #include "platform/scheduler/base/task_queue_impl.h" | |
| 18 #include "platform/scheduler/base/test_time_source.h" | |
| 19 #include "platform/scheduler/child/scheduler_tqm_delegate_for_test.h" | |
| 20 #include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h" | |
| 21 #include "platform/scheduler/renderer/budget_pool.h" | |
| 22 #include "platform/scheduler/renderer/renderer_scheduler_impl.h" | |
| 23 #include "platform/scheduler/renderer/web_frame_scheduler_impl.h" | |
|
Sami
2017/03/08 17:19:42
Some of these includes look unnecessary -- could y
altimin
2017/03/09 12:28:47
Done.
| |
| 24 #include "platform/scheduler/renderer/web_view_scheduler_impl.h" | |
| 25 #include "testing/gmock/include/gmock/gmock.h" | |
| 26 #include "testing/gtest/include/gtest/gtest.h" | |
| 27 | |
| 28 namespace blink { | |
| 29 namespace scheduler { | |
| 30 | |
| 31 class BudgetPoolTest : public testing::Test { | |
| 32 public: | |
| 33 BudgetPoolTest() {} | |
| 34 ~BudgetPoolTest() override {} | |
| 35 | |
| 36 void SetUp() override { | |
| 37 clock_.reset(new base::SimpleTestTickClock()); | |
| 38 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); | |
| 39 mock_task_runner_ = | |
| 40 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(clock_.get(), true)); | |
| 41 delegate_ = SchedulerTqmDelegateForTest::Create( | |
| 42 mock_task_runner_, base::MakeUnique<TestTimeSource>(clock_.get())); | |
| 43 scheduler_.reset(new RendererSchedulerImpl(delegate_)); | |
| 44 task_queue_throttler_ = scheduler_->task_queue_throttler(); | |
| 45 } | |
| 46 | |
| 47 void TearDown() override { | |
| 48 scheduler_->Shutdown(); | |
| 49 scheduler_.reset(); | |
| 50 } | |
| 51 | |
| 52 protected: | |
| 53 std::unique_ptr<base::SimpleTestTickClock> clock_; | |
| 54 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; | |
| 55 scoped_refptr<SchedulerTqmDelegate> delegate_; | |
| 56 std::unique_ptr<RendererSchedulerImpl> scheduler_; | |
| 57 TaskQueueThrottler* task_queue_throttler_; // NOT OWNED | |
| 58 | |
| 59 DISALLOW_COPY_AND_ASSIGN(BudgetPoolTest); | |
| 60 }; | |
| 61 | |
| 62 TEST_F(BudgetPoolTest, TimeBudgetPool) { | |
| 63 TimeBudgetPool* pool = task_queue_throttler_->CreateTimeBudgetPool( | |
| 64 "test", base::nullopt, base::nullopt); | |
| 65 | |
| 66 base::TimeTicks time_zero = clock_->NowTicks(); | |
| 67 | |
| 68 pool->SetTimeBudgetRecoveryRate(time_zero, 0.1); | |
| 69 | |
| 70 EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero)); | |
| 71 EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime()); | |
| 72 | |
| 73 // Run an expensive task and make sure that we're throttled. | |
| 74 pool->RecordTaskRunTime(time_zero, | |
| 75 time_zero + base::TimeDelta::FromMilliseconds(100)); | |
| 76 | |
| 77 EXPECT_FALSE(pool->HasEnoughBudgetToRun( | |
| 78 time_zero + base::TimeDelta::FromMilliseconds(500))); | |
| 79 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(1000), | |
| 80 pool->GetNextAllowedRunTime()); | |
| 81 EXPECT_TRUE(pool->HasEnoughBudgetToRun( | |
| 82 time_zero + base::TimeDelta::FromMilliseconds(1000))); | |
| 83 | |
| 84 // Run a cheap task and make sure that it doesn't affect anything. | |
| 85 EXPECT_TRUE(pool->HasEnoughBudgetToRun( | |
| 86 time_zero + base::TimeDelta::FromMilliseconds(2000))); | |
| 87 pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(2000), | |
| 88 time_zero + base::TimeDelta::FromMilliseconds(2020)); | |
| 89 EXPECT_TRUE(pool->HasEnoughBudgetToRun( | |
| 90 time_zero + base::TimeDelta::FromMilliseconds(2020))); | |
| 91 EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(2020), | |
| 92 pool->GetNextAllowedRunTime()); | |
| 93 | |
| 94 pool->Close(); | |
| 95 } | |
| 96 | |
| 97 } // namespace scheduler | |
| 98 } // namespace blink | |
| OLD | NEW |