• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2011 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 #ifndef CC_TEST_SCHEDULER_TEST_COMMON_H_
6 #define CC_TEST_SCHEDULER_TEST_COMMON_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/time/time.h"
13 #include "cc/scheduler/delay_based_time_source.h"
14 #include "cc/scheduler/scheduler.h"
15 #include "cc/test/ordered_simple_task_runner.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 
18 namespace cc {
19 
20 class FakeTimeSourceClient : public TimeSourceClient {
21  public:
FakeTimeSourceClient()22   FakeTimeSourceClient() { Reset(); }
Reset()23   void Reset() { tick_called_ = false; }
TickCalled()24   bool TickCalled() const { return tick_called_; }
25 
26   // TimeSourceClient implementation.
27   virtual void OnTimerTick() OVERRIDE;
28 
29  protected:
30   bool tick_called_;
31 };
32 
33 class FakeDelayBasedTimeSource : public DelayBasedTimeSource {
34  public:
Create(base::TimeDelta interval,base::SingleThreadTaskRunner * task_runner)35   static scoped_refptr<FakeDelayBasedTimeSource> Create(
36       base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner) {
37     return make_scoped_refptr(new FakeDelayBasedTimeSource(interval,
38                                                            task_runner));
39   }
40 
SetNow(base::TimeTicks time)41   void SetNow(base::TimeTicks time) { now_ = time; }
42   virtual base::TimeTicks Now() const OVERRIDE;
43 
44  protected:
FakeDelayBasedTimeSource(base::TimeDelta interval,base::SingleThreadTaskRunner * task_runner)45   FakeDelayBasedTimeSource(base::TimeDelta interval,
46                            base::SingleThreadTaskRunner* task_runner)
47       : DelayBasedTimeSource(interval, task_runner) {}
~FakeDelayBasedTimeSource()48   virtual ~FakeDelayBasedTimeSource() {}
49 
50   base::TimeTicks now_;
51 };
52 
53 class TestDelayBasedTimeSource : public DelayBasedTimeSource {
54  public:
Create(scoped_refptr<TestNowSource> now_src,base::TimeDelta interval,OrderedSimpleTaskRunner * task_runner)55   static scoped_refptr<TestDelayBasedTimeSource> Create(
56       scoped_refptr<TestNowSource> now_src,
57       base::TimeDelta interval,
58       OrderedSimpleTaskRunner* task_runner) {
59     return make_scoped_refptr(
60         new TestDelayBasedTimeSource(now_src, interval, task_runner));
61   }
62 
63  protected:
64   TestDelayBasedTimeSource(scoped_refptr<TestNowSource> now_src,
65                            base::TimeDelta interval,
66                            OrderedSimpleTaskRunner* task_runner);
67 
68   // Overridden from DelayBasedTimeSource
69   virtual ~TestDelayBasedTimeSource();
70   virtual base::TimeTicks Now() const OVERRIDE;
71   virtual std::string TypeString() const OVERRIDE;
72 
73   scoped_refptr<TestNowSource> now_src_;
74 };
75 
76 class TestScheduler : public Scheduler {
77  public:
Create(scoped_refptr<TestNowSource> now_src,SchedulerClient * client,const SchedulerSettings & scheduler_settings,int layer_tree_host_id)78   static scoped_ptr<TestScheduler> Create(
79       scoped_refptr<TestNowSource> now_src,
80       SchedulerClient* client,
81       const SchedulerSettings& scheduler_settings,
82       int layer_tree_host_id) {
83     // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval()
84     now_src->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
85 
86     scoped_refptr<OrderedSimpleTaskRunner> test_task_runner =
87         new OrderedSimpleTaskRunner(now_src, true);
88     return make_scoped_ptr(new TestScheduler(now_src,
89                                              client,
90                                              scheduler_settings,
91                                              layer_tree_host_id,
92                                              test_task_runner));
93   }
94 
95   // Extra test helper functionality
IsBeginRetroFrameArgsEmpty()96   bool IsBeginRetroFrameArgsEmpty() const {
97     return begin_retro_frame_args_.empty();
98   }
99 
IsSyntheticBeginFrameSourceActive()100   bool IsSyntheticBeginFrameSourceActive() const {
101     return synthetic_begin_frame_source_->IsActive();
102   }
103 
task_runner()104   OrderedSimpleTaskRunner& task_runner() { return *test_task_runner_; }
105 
106   virtual ~TestScheduler();
107 
108  protected:
109   // Overridden from Scheduler.
110   virtual base::TimeTicks Now() const OVERRIDE;
111 
112  private:
113   TestScheduler(scoped_refptr<TestNowSource> now_src,
114                 SchedulerClient* client,
115                 const SchedulerSettings& scheduler_settings,
116                 int layer_tree_host_id,
117                 const scoped_refptr<OrderedSimpleTaskRunner>& test_task_runner);
118 
119   scoped_refptr<TestNowSource> now_src_;
120   OrderedSimpleTaskRunner* test_task_runner_;
121 };
122 
123 }  // namespace cc
124 
125 #endif  // CC_TEST_SCHEDULER_TEST_COMMON_H_
126