// Copyright 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_TEST_SCHEDULER_TEST_COMMON_H_ #define CC_TEST_SCHEDULER_TEST_COMMON_H_ #include #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/time/time.h" #include "cc/scheduler/delay_based_time_source.h" #include "cc/scheduler/scheduler.h" #include "cc/test/ordered_simple_task_runner.h" #include "testing/gtest/include/gtest/gtest.h" namespace cc { class FakeTimeSourceClient : public TimeSourceClient { public: FakeTimeSourceClient() { Reset(); } void Reset() { tick_called_ = false; } bool TickCalled() const { return tick_called_; } // TimeSourceClient implementation. virtual void OnTimerTick() OVERRIDE; protected: bool tick_called_; }; class FakeDelayBasedTimeSource : public DelayBasedTimeSource { public: static scoped_refptr Create( base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner) { return make_scoped_refptr(new FakeDelayBasedTimeSource(interval, task_runner)); } void SetNow(base::TimeTicks time) { now_ = time; } virtual base::TimeTicks Now() const OVERRIDE; protected: FakeDelayBasedTimeSource(base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner) : DelayBasedTimeSource(interval, task_runner) {} virtual ~FakeDelayBasedTimeSource() {} base::TimeTicks now_; }; class TestDelayBasedTimeSource : public DelayBasedTimeSource { public: static scoped_refptr Create( scoped_refptr now_src, base::TimeDelta interval, OrderedSimpleTaskRunner* task_runner) { return make_scoped_refptr( new TestDelayBasedTimeSource(now_src, interval, task_runner)); } protected: TestDelayBasedTimeSource(scoped_refptr now_src, base::TimeDelta interval, OrderedSimpleTaskRunner* task_runner); // Overridden from DelayBasedTimeSource virtual ~TestDelayBasedTimeSource(); virtual base::TimeTicks Now() const OVERRIDE; virtual std::string TypeString() const OVERRIDE; scoped_refptr now_src_; }; class TestScheduler : public Scheduler { public: static scoped_ptr Create( scoped_refptr now_src, SchedulerClient* client, const SchedulerSettings& scheduler_settings, int layer_tree_host_id) { // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval() now_src->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); scoped_refptr test_task_runner = new OrderedSimpleTaskRunner(now_src, true); return make_scoped_ptr(new TestScheduler(now_src, client, scheduler_settings, layer_tree_host_id, test_task_runner)); } // Extra test helper functionality bool IsBeginRetroFrameArgsEmpty() const { return begin_retro_frame_args_.empty(); } bool IsSyntheticBeginFrameSourceActive() const { return synthetic_begin_frame_source_->IsActive(); } OrderedSimpleTaskRunner& task_runner() { return *test_task_runner_; } virtual ~TestScheduler(); protected: // Overridden from Scheduler. virtual base::TimeTicks Now() const OVERRIDE; private: TestScheduler(scoped_refptr now_src, SchedulerClient* client, const SchedulerSettings& scheduler_settings, int layer_tree_host_id, const scoped_refptr& test_task_runner); scoped_refptr now_src_; OrderedSimpleTaskRunner* test_task_runner_; }; } // namespace cc #endif // CC_TEST_SCHEDULER_TEST_COMMON_H_