| // Copyright 2012 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. |
| |
| #include "cc/test/scheduler_test_common.h" |
| |
| #include <string> |
| |
| #include "base/logging.h" |
| |
| namespace cc { |
| |
| void FakeTimeSourceClient::OnTimerTick() { |
| tick_called_ = true; |
| } |
| |
| base::TimeTicks FakeDelayBasedTimeSource::Now() const { return now_; } |
| |
| TestDelayBasedTimeSource::TestDelayBasedTimeSource( |
| scoped_refptr<TestNowSource> now_src, |
| base::TimeDelta interval, |
| OrderedSimpleTaskRunner* task_runner) |
| : DelayBasedTimeSource(interval, task_runner), now_src_(now_src) { |
| } |
| |
| base::TimeTicks TestDelayBasedTimeSource::Now() const { |
| return now_src_->Now(); |
| } |
| |
| std::string TestDelayBasedTimeSource::TypeString() const { |
| return "TestDelayBasedTimeSource"; |
| } |
| |
| TestDelayBasedTimeSource::~TestDelayBasedTimeSource() { |
| } |
| |
| void FakeBeginFrameSource::DidFinishFrame(size_t remaining_frames) { |
| remaining_frames_ = remaining_frames; |
| } |
| void FakeBeginFrameSource::AsValueInto(base::debug::TracedValue* dict) const { |
| dict->SetString("type", "FakeBeginFrameSource"); |
| BeginFrameSourceMixIn::AsValueInto(dict); |
| } |
| |
| TestBackToBackBeginFrameSource::TestBackToBackBeginFrameSource( |
| scoped_refptr<TestNowSource> now_src, |
| base::SingleThreadTaskRunner* task_runner) |
| : BackToBackBeginFrameSource(task_runner), now_src_(now_src) { |
| } |
| |
| TestBackToBackBeginFrameSource::~TestBackToBackBeginFrameSource() { |
| } |
| |
| base::TimeTicks TestBackToBackBeginFrameSource::Now() { |
| return now_src_->Now(); |
| } |
| |
| TestSyntheticBeginFrameSource::TestSyntheticBeginFrameSource( |
| scoped_refptr<DelayBasedTimeSource> time_source) |
| : SyntheticBeginFrameSource(time_source) { |
| } |
| |
| TestSyntheticBeginFrameSource::~TestSyntheticBeginFrameSource() { |
| } |
| |
| TestSchedulerFrameSourcesConstructor::TestSchedulerFrameSourcesConstructor( |
| OrderedSimpleTaskRunner* test_task_runner, |
| TestNowSource* now_src) |
| : test_task_runner_(test_task_runner), now_src_(now_src) { |
| } |
| TestSchedulerFrameSourcesConstructor::~TestSchedulerFrameSourcesConstructor() { |
| } |
| |
| BeginFrameSource* |
| TestSchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource( |
| Scheduler* scheduler) { |
| if (!scheduler->settings_.throttle_frame_production) { |
| TRACE_EVENT1( |
| "cc", |
| "TestSchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource", |
| "source", |
| "TestBackToBackBeginFrameSource"); |
| DCHECK(!scheduler->primary_frame_source_internal_); |
| scheduler->primary_frame_source_internal_ = |
| TestBackToBackBeginFrameSource::Create(now_src_, test_task_runner_); |
| return scheduler->primary_frame_source_internal_.get(); |
| } else if (scheduler->settings_.use_external_begin_frame_source) { |
| return SchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource( |
| scheduler); |
| } else { |
| TRACE_EVENT1( |
| "cc", |
| "TestSchedulerFrameSourcesConstructor::ConstructPrimaryFrameSource", |
| "source", |
| "TestSyntheticBeginFrameSource"); |
| scoped_ptr<TestSyntheticBeginFrameSource> synthetic_source = |
| TestSyntheticBeginFrameSource::Create( |
| now_src_, test_task_runner_, BeginFrameArgs::DefaultInterval()); |
| |
| DCHECK(!scheduler->vsync_observer_); |
| scheduler->vsync_observer_ = synthetic_source.get(); |
| |
| DCHECK(!scheduler->primary_frame_source_internal_); |
| scheduler->primary_frame_source_internal_ = synthetic_source.Pass(); |
| return scheduler->primary_frame_source_internal_.get(); |
| } |
| } |
| |
| BeginFrameSource* |
| TestSchedulerFrameSourcesConstructor::ConstructBackgroundFrameSource( |
| Scheduler* scheduler) { |
| TRACE_EVENT1( |
| "cc", |
| "TestSchedulerFrameSourcesConstructor::ConstructBackgroundFrameSource", |
| "source", |
| "TestSyntheticBeginFrameSource"); |
| DCHECK(!(scheduler->background_frame_source_internal_)); |
| scheduler->background_frame_source_internal_ = |
| TestSyntheticBeginFrameSource::Create( |
| now_src_, test_task_runner_, base::TimeDelta::FromSeconds(1)); |
| return scheduler->background_frame_source_internal_.get(); |
| } |
| |
| TestScheduler::TestScheduler( |
| scoped_refptr<TestNowSource> now_src, |
| SchedulerClient* client, |
| const SchedulerSettings& scheduler_settings, |
| int layer_tree_host_id, |
| const scoped_refptr<OrderedSimpleTaskRunner>& test_task_runner, |
| base::PowerMonitor* power_monitor, |
| TestSchedulerFrameSourcesConstructor* frame_sources_constructor, |
| scoped_ptr<BeginFrameSource> external_begin_frame_source) |
| : Scheduler(client, |
| scheduler_settings, |
| layer_tree_host_id, |
| test_task_runner, |
| power_monitor, |
| external_begin_frame_source.Pass(), |
| frame_sources_constructor), |
| now_src_(now_src) { |
| } |
| |
| base::TimeTicks TestScheduler::Now() const { |
| return now_src_->Now(); |
| } |
| |
| TestScheduler::~TestScheduler() { |
| } |
| |
| } // namespace cc |