Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / cc / test / scheduler_test_common.h
index 596358a..a502336 100644 (file)
@@ -5,10 +5,14 @@
 #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 {
@@ -46,6 +50,76 @@ class FakeDelayBasedTimeSource : public DelayBasedTimeSource {
   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
+  virtual ~TestDelayBasedTimeSource();
+  virtual base::TimeTicks Now() const OVERRIDE;
+  virtual std::string TypeString() const OVERRIDE;
+
+  scoped_refptr<TestNowSource> now_src_;
+};
+
+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) {
+    // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval()
+    now_src->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
+
+    scoped_refptr<OrderedSimpleTaskRunner> 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<TestNowSource> now_src,
+                SchedulerClient* client,
+                const SchedulerSettings& scheduler_settings,
+                int layer_tree_host_id,
+                const scoped_refptr<OrderedSimpleTaskRunner>& test_task_runner);
+
+  scoped_refptr<TestNowSource> now_src_;
+  OrderedSimpleTaskRunner* test_task_runner_;
+};
+
 }  // namespace cc
 
 #endif  // CC_TEST_SCHEDULER_TEST_COMMON_H_