15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CC_TEST_SCHEDULER_TEST_COMMON_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CC_TEST_SCHEDULER_TEST_COMMON_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/scheduler/delay_based_time_source.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/scheduler/scheduler.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/test/ordered_simple_task_runner.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FakeTimeSourceClient : public TimeSourceClient { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeTimeSourceClient() { Reset(); } 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset() { tick_called_ = false; } 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool TickCalled() const { return tick_called_; } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TimeSourceClient implementation. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnTimerTick() OVERRIDE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool tick_called_; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FakeDelayBasedTimeSource : public DelayBasedTimeSource { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_refptr<FakeDelayBasedTimeSource> Create( 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner) { 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return make_scoped_refptr(new FakeDelayBasedTimeSource(interval, 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) task_runner)); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNow(base::TimeTicks time) { now_ = time; } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::TimeTicks Now() const OVERRIDE; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeDelayBasedTimeSource(base::TimeDelta interval, 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::SingleThreadTaskRunner* task_runner) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : DelayBasedTimeSource(interval, task_runner) {} 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~FakeDelayBasedTimeSource() {} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks now_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestDelayBasedTimeSource : public DelayBasedTimeSource { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static scoped_refptr<TestDelayBasedTimeSource> Create( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<TestNowSource> now_src, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta interval, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OrderedSimpleTaskRunner* task_runner) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_refptr( 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new TestDelayBasedTimeSource(now_src, interval, task_runner)); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestDelayBasedTimeSource(scoped_refptr<TestNowSource> now_src, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta interval, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OrderedSimpleTaskRunner* task_runner); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overridden from DelayBasedTimeSource 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~TestDelayBasedTimeSource(); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual base::TimeTicks Now() const OVERRIDE; 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual std::string TypeString() const OVERRIDE; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<TestNowSource> now_src_; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestScheduler : public Scheduler { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static scoped_ptr<TestScheduler> Create( 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<TestNowSource> now_src, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SchedulerClient* client, 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SchedulerSettings& scheduler_settings, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int layer_tree_host_id) { 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval() 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_src->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<OrderedSimpleTaskRunner> test_task_runner = 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new OrderedSimpleTaskRunner(now_src, true); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_ptr(new TestScheduler(now_src, 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client, 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheduler_settings, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layer_tree_host_id, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_task_runner)); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Extra test helper functionality 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool IsBeginRetroFrameArgsEmpty() const { 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return begin_retro_frame_args_.empty(); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool IsSyntheticBeginFrameSourceActive() const { 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return synthetic_begin_frame_source_->IsActive(); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OrderedSimpleTaskRunner& task_runner() { return *test_task_runner_; } 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~TestScheduler(); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overridden from Scheduler. 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual base::TimeTicks Now() const OVERRIDE; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestScheduler(scoped_refptr<TestNowSource> now_src, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SchedulerClient* client, 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SchedulerSettings& scheduler_settings, 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int layer_tree_host_id, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<OrderedSimpleTaskRunner>& test_task_runner); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<TestNowSource> now_src_; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OrderedSimpleTaskRunner* test_task_runner_; 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CC_TEST_SCHEDULER_TEST_COMMON_H_ 126