| Index: cc/test/scheduler_test_common.h
|
| diff --git a/cc/test/scheduler_test_common.h b/cc/test/scheduler_test_common.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..763ccc8351d761e5d546b961cbfa29d17f424e37
|
| --- /dev/null
|
| +++ b/cc/test/scheduler_test_common.h
|
| @@ -0,0 +1,218 @@
|
| +// 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 <string>
|
| +
|
| +#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() : tick_called_(false) {}
|
| + void Reset() { tick_called_ = false; }
|
| + bool TickCalled() const { return tick_called_; }
|
| +
|
| + // TimeSourceClient implementation.
|
| + void OnTimerTick() override;
|
| +
|
| + protected:
|
| + bool tick_called_;
|
| +};
|
| +
|
| +class FakeDelayBasedTimeSource : public DelayBasedTimeSource {
|
| + public:
|
| + static scoped_refptr<FakeDelayBasedTimeSource> Create(
|
| + base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner) {
|
| + return make_scoped_refptr(new FakeDelayBasedTimeSource(interval,
|
| + task_runner));
|
| + }
|
| +
|
| + void SetNow(base::TimeTicks time) { now_ = time; }
|
| + base::TimeTicks Now() const override;
|
| +
|
| + protected:
|
| + FakeDelayBasedTimeSource(base::TimeDelta interval,
|
| + base::SingleThreadTaskRunner* task_runner)
|
| + : DelayBasedTimeSource(interval, task_runner) {}
|
| + ~FakeDelayBasedTimeSource() override {}
|
| +
|
| + base::TimeTicks now_;
|
| +};
|
| +
|
| +class TestDelayBasedTimeSource : public DelayBasedTimeSource {
|
| + public:
|
| + static scoped_refptr<TestDelayBasedTimeSource> Create(
|
| + scoped_refptr<TestNowSource> now_src,
|
| + base::TimeDelta interval,
|
| + OrderedSimpleTaskRunner* task_runner) {
|
| + return make_scoped_refptr(
|
| + new TestDelayBasedTimeSource(now_src, interval, task_runner));
|
| + }
|
| +
|
| + protected:
|
| + TestDelayBasedTimeSource(scoped_refptr<TestNowSource> now_src,
|
| + base::TimeDelta interval,
|
| + OrderedSimpleTaskRunner* task_runner);
|
| +
|
| + // Overridden from DelayBasedTimeSource
|
| + ~TestDelayBasedTimeSource() override;
|
| + base::TimeTicks Now() const override;
|
| + std::string TypeString() const override;
|
| +
|
| + scoped_refptr<TestNowSource> now_src_;
|
| +};
|
| +
|
| +struct FakeBeginFrameSource : public BeginFrameSourceMixIn {
|
| + bool remaining_frames_ = false;
|
| +
|
| + BeginFrameObserver* GetObserver() { return observer_; }
|
| +
|
| + BeginFrameArgs TestLastUsedBeginFrameArgs() {
|
| + if (observer_) {
|
| + return observer_->LastUsedBeginFrameArgs();
|
| + }
|
| + return BeginFrameArgs();
|
| + }
|
| + void TestOnBeginFrame(const BeginFrameArgs& args) {
|
| + return CallOnBeginFrame(args);
|
| + }
|
| +
|
| + // BeginFrameSource
|
| + void DidFinishFrame(size_t remaining_frames) override;
|
| + void AsValueInto(base::trace_event::TracedValue* dict) const override;
|
| +
|
| + ~FakeBeginFrameSource() override {}
|
| +};
|
| +
|
| +class TestBackToBackBeginFrameSource : public BackToBackBeginFrameSource {
|
| + public:
|
| + ~TestBackToBackBeginFrameSource() override;
|
| +
|
| + static scoped_ptr<TestBackToBackBeginFrameSource> Create(
|
| + scoped_refptr<TestNowSource> now_src,
|
| + base::SingleThreadTaskRunner* task_runner) {
|
| + return make_scoped_ptr(
|
| + new TestBackToBackBeginFrameSource(now_src, task_runner));
|
| + }
|
| +
|
| + protected:
|
| + TestBackToBackBeginFrameSource(scoped_refptr<TestNowSource> now_src,
|
| + base::SingleThreadTaskRunner* task_runner);
|
| +
|
| + base::TimeTicks Now() override;
|
| +
|
| + scoped_refptr<TestNowSource> now_src_;
|
| +};
|
| +
|
| +class TestSyntheticBeginFrameSource : public SyntheticBeginFrameSource {
|
| + public:
|
| + ~TestSyntheticBeginFrameSource() override;
|
| +
|
| + static scoped_ptr<TestSyntheticBeginFrameSource> Create(
|
| + scoped_refptr<TestNowSource> now_src,
|
| + OrderedSimpleTaskRunner* task_runner,
|
| + base::TimeDelta initial_interval) {
|
| + return make_scoped_ptr(
|
| + new TestSyntheticBeginFrameSource(TestDelayBasedTimeSource::Create(
|
| + now_src, initial_interval, task_runner)));
|
| + }
|
| +
|
| + protected:
|
| + TestSyntheticBeginFrameSource(
|
| + scoped_refptr<DelayBasedTimeSource> time_source);
|
| +};
|
| +
|
| +class TestScheduler;
|
| +class TestSchedulerFrameSourcesConstructor
|
| + : public SchedulerFrameSourcesConstructor {
|
| + public:
|
| + ~TestSchedulerFrameSourcesConstructor() override;
|
| +
|
| + protected:
|
| + BeginFrameSource* ConstructPrimaryFrameSource(Scheduler* scheduler) override;
|
| + BeginFrameSource* ConstructBackgroundFrameSource(
|
| + Scheduler* scheduler) override;
|
| + BeginFrameSource* ConstructUnthrottledFrameSource(
|
| + Scheduler* scheduler) override;
|
| +
|
| + OrderedSimpleTaskRunner* test_task_runner_;
|
| + TestNowSource* now_src_;
|
| +
|
| + protected:
|
| + explicit TestSchedulerFrameSourcesConstructor(
|
| + OrderedSimpleTaskRunner* test_task_runner,
|
| + TestNowSource* now_src);
|
| + friend class TestScheduler;
|
| +};
|
| +
|
| +class TestScheduler : public Scheduler {
|
| + public:
|
| + static scoped_ptr<TestScheduler> Create(
|
| + scoped_refptr<TestNowSource> now_src,
|
| + SchedulerClient* client,
|
| + const SchedulerSettings& scheduler_settings,
|
| + int layer_tree_host_id,
|
| + const scoped_refptr<OrderedSimpleTaskRunner>& task_runner,
|
| + scoped_ptr<BeginFrameSource> external_begin_frame_source) {
|
| + TestSchedulerFrameSourcesConstructor frame_sources_constructor(
|
| + task_runner.get(), now_src.get());
|
| + return make_scoped_ptr(new TestScheduler(
|
| + now_src,
|
| + client,
|
| + scheduler_settings,
|
| + layer_tree_host_id,
|
| + task_runner,
|
| + &frame_sources_constructor,
|
| + external_begin_frame_source.Pass()));
|
| + }
|
| +
|
| + // Extra test helper functionality
|
| + bool IsBeginRetroFrameArgsEmpty() const {
|
| + return begin_retro_frame_args_.empty();
|
| + }
|
| +
|
| + bool CanStart() const { return state_machine_.CanStartForTesting(); }
|
| +
|
| + BeginFrameSource& frame_source() { return *frame_source_; }
|
| + bool FrameProductionThrottled() { return throttle_frame_production_; }
|
| +
|
| + ~TestScheduler() override;
|
| +
|
| + void NotifyReadyToCommitThenActivateIfNeeded() {
|
| + NotifyReadyToCommit();
|
| + if (settings_.impl_side_painting) {
|
| + NotifyReadyToActivate();
|
| + }
|
| + }
|
| +
|
| + protected:
|
| + // Overridden from Scheduler.
|
| + base::TimeTicks Now() const override;
|
| +
|
| + private:
|
| + TestScheduler(
|
| + scoped_refptr<TestNowSource> now_src,
|
| + SchedulerClient* client,
|
| + const SchedulerSettings& scheduler_settings,
|
| + int layer_tree_host_id,
|
| + const scoped_refptr<OrderedSimpleTaskRunner>& test_task_runner,
|
| + TestSchedulerFrameSourcesConstructor* frame_sources_constructor,
|
| + scoped_ptr<BeginFrameSource> external_begin_frame_source);
|
| +
|
| + scoped_refptr<TestNowSource> now_src_;
|
| +};
|
| +
|
| +} // namespace cc
|
| +
|
| +#endif // CC_TEST_SCHEDULER_TEST_COMMON_H_
|
|
|