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 |