blob: cb7851032e86e325e2aa9c70439f02e557eef0ce (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// 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 CCSchedulerTestCommon_h
#define CCSchedulerTestCommon_h
#include "CCDelayBasedTimeSource.h"
#include "CCFrameRateController.h"
#include "CCThread.h"
#include <gtest/gtest.h>
#include <wtf/OwnPtr.h>
namespace WebKitTests {
class FakeCCTimeSourceClient : public WebCore::CCTimeSourceClient {
public:
FakeCCTimeSourceClient() { reset(); }
void reset() { m_tickCalled = false; }
bool tickCalled() const { return m_tickCalled; }
virtual void onTimerTick() OVERRIDE { m_tickCalled = true; }
protected:
bool m_tickCalled;
};
class FakeCCThread : public WebCore::CCThread {
public:
FakeCCThread() { reset(); }
void reset()
{
m_pendingTaskDelay = 0;
m_pendingTask.clear();
m_runPendingTaskOnOverwrite = false;
}
void runPendingTaskOnOverwrite(bool enable)
{
m_runPendingTaskOnOverwrite = enable;
}
bool hasPendingTask() const { return m_pendingTask; }
void runPendingTask()
{
ASSERT(m_pendingTask);
OwnPtr<Task> task = m_pendingTask.release();
task->performTask();
}
long long pendingDelayMs() const
{
EXPECT_TRUE(hasPendingTask());
return m_pendingTaskDelay;
}
virtual void postTask(PassOwnPtr<Task>) { ASSERT_NOT_REACHED(); }
virtual void postDelayedTask(PassOwnPtr<Task> task, long long delay)
{
if (m_runPendingTaskOnOverwrite && hasPendingTask())
runPendingTask();
EXPECT_TRUE(!hasPendingTask());
m_pendingTask = task;
m_pendingTaskDelay = delay;
}
virtual WTF::ThreadIdentifier threadID() const { return 0; }
protected:
OwnPtr<Task> m_pendingTask;
long long m_pendingTaskDelay;
bool m_runPendingTaskOnOverwrite;
};
class FakeCCTimeSource : public WebCore::CCTimeSource {
public:
FakeCCTimeSource()
: m_active(false)
, m_nextTickTime(0)
, m_client(0) { }
virtual ~FakeCCTimeSource() { }
virtual void setClient(WebCore::CCTimeSourceClient* client) OVERRIDE { m_client = client; }
virtual void setActive(bool b) OVERRIDE { m_active = b; }
virtual bool active() const OVERRIDE { return m_active; }
virtual void setTimebaseAndInterval(double timebase, double interval) OVERRIDE { }
virtual double lastTickTime() OVERRIDE { return 0; }
virtual double nextTickTimeIfActivated() OVERRIDE { return 0; }
void tick()
{
ASSERT(m_active);
if (m_client)
m_client->onTimerTick();
}
void setNextTickTime(double nextTickTime) { m_nextTickTime = nextTickTime; }
protected:
bool m_active;
double m_nextTickTime;
WebCore::CCTimeSourceClient* m_client;
};
class FakeCCDelayBasedTimeSource : public WebCore::CCDelayBasedTimeSource {
public:
static PassRefPtr<FakeCCDelayBasedTimeSource> create(double interval, WebCore::CCThread* thread)
{
return adoptRef(new FakeCCDelayBasedTimeSource(interval, thread));
}
void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; }
virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow; }
protected:
FakeCCDelayBasedTimeSource(double interval, WebCore::CCThread* thread)
: CCDelayBasedTimeSource(interval, thread)
, m_monotonicTimeNow(0) { }
double m_monotonicTimeNow;
};
class FakeCCFrameRateController : public WebCore::CCFrameRateController {
public:
FakeCCFrameRateController(PassRefPtr<WebCore::CCTimeSource> timer) : WebCore::CCFrameRateController(timer) { }
int numFramesPending() const { return m_numFramesPending; }
};
}
#endif // CCSchedulerTestCommon_h
|