[chromium] Times in the cc should be expressed in seconds.
[WebKit-https.git] / Source / WebKit / chromium / tests / CCSchedulerTestCommon.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #ifndef CCSchedulerTestCommon_h
26 #define CCSchedulerTestCommon_h
27
28 #include "cc/CCDelayBasedTimeSource.h"
29 #include "cc/CCThread.h"
30 #include <gtest/gtest.h>
31 #include <wtf/OwnPtr.h>
32
33 namespace WebKitTests {
34
35 class FakeCCTimeSourceClient : public WebCore::CCTimeSourceClient {
36 public:
37     FakeCCTimeSourceClient() { reset(); }
38     void reset() { m_tickCalled = false; }
39     bool tickCalled() const { return m_tickCalled; }
40
41     virtual void onTimerTick() { m_tickCalled = true; }
42
43 protected:
44     bool m_tickCalled;
45 };
46
47 class FakeCCThread : public WebCore::CCThread {
48 public:
49     FakeCCThread() { reset(); }
50     void reset()
51     {
52         m_pendingTaskDelay = 0;
53         m_pendingTask.clear();
54     }
55
56     bool hasPendingTask() const { return m_pendingTask; }
57     void runPendingTask()
58     {
59         ASSERT(m_pendingTask);
60         OwnPtr<Task> task = m_pendingTask.release();
61         task->performTask();
62     }
63
64     long long pendingDelayMs() const
65     {
66         EXPECT_TRUE(hasPendingTask());
67         return m_pendingTaskDelay;
68     }
69
70     virtual void postTask(PassOwnPtr<Task>) { ASSERT_NOT_REACHED(); }
71     virtual void postDelayedTask(PassOwnPtr<Task> task, long long delay)
72     {
73         EXPECT_TRUE(!hasPendingTask());
74         m_pendingTask = task;
75         m_pendingTaskDelay = delay;
76     }
77     virtual WTF::ThreadIdentifier threadID() const { return 0; }
78
79 protected:
80     OwnPtr<Task> m_pendingTask;
81     long long m_pendingTaskDelay;
82 };
83
84 class FakeCCTimeSource : public WebCore::CCTimeSource {
85 public:
86     FakeCCTimeSource()
87         : m_active(false)
88         , m_client(0) { }
89
90     virtual ~FakeCCTimeSource() { }
91
92     virtual void setClient(WebCore::CCTimeSourceClient* client) { m_client = client; }
93     virtual void setActive(bool b) { m_active = b; }
94     virtual bool active() const { return m_active; }
95
96     void tick()
97     {
98         ASSERT(m_active);
99         if (m_client)
100             m_client->onTimerTick();
101     }
102
103 protected:
104     bool m_active;
105     WebCore::CCTimeSourceClient* m_client;
106 };
107
108 class FakeCCDelayBasedTimeSource : public WebCore::CCDelayBasedTimeSource {
109 public:
110     static PassRefPtr<FakeCCDelayBasedTimeSource> create(double interval, WebCore::CCThread* thread)
111     {
112         return adoptRef(new FakeCCDelayBasedTimeSource(interval, thread));
113     }
114
115     void setMonotonicallyIncreasingTime(double time) { m_monotonicallyIncreasingTime = time; }
116     virtual double monotonicallyIncreasingTime() const { return m_monotonicallyIncreasingTime; }
117
118 protected:
119     FakeCCDelayBasedTimeSource(double interval, WebCore::CCThread* thread)
120         : CCDelayBasedTimeSource(interval, thread)
121         , m_monotonicallyIncreasingTime(0) { }
122
123     double m_monotonicallyIncreasingTime;
124 };
125
126 }
127
128 #endif // CCSchedulerTestCommon_h