File: SchedulerTest.cpp

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (120 lines) | stat: -rw-r--r-- 2,956 bytes parent folder | download
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
// Copyright 2014 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 "config.h"
#include "platform/scheduler/Scheduler.h"

#include "platform/RuntimeEnabledFeatures.h"
#include "platform/TestingPlatformSupport.h"
#include "platform/TraceLocation.h"
#include "public/platform/Platform.h"
#include "public/platform/WebScheduler.h"

#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <string>
#include <vector>

using blink::Scheduler;
using blink::WebScheduler;
using blink::WebTraceLocation;

namespace {

class SchedulerForTest : public Scheduler {
public:
    SchedulerForTest(WebScheduler* webScheduler):
        Scheduler(webScheduler)
    {
    }
};

class WebSchedulerForTest : public WebScheduler {
public:
    WebSchedulerForTest()
        : m_shouldYieldForHighPriorityWork(false)
        , m_didShutdown(false)
    {
    }

    // WebScheduler implementation:
    void shutdown() override
    {
        m_didShutdown = true;
    }

    bool shouldYieldForHighPriorityWork() override
    {
        return m_shouldYieldForHighPriorityWork;
    }

    void postIdleTask(const WebTraceLocation&, IdleTask* task) override
    {
        m_latestIdleTask = adoptPtr(task);
    }

    bool didShutdown() const
    {
        return m_didShutdown;
    }

    void setShouldYieldForHighPriorityWork(bool shouldYieldForHighPriorityWork)
    {
        m_shouldYieldForHighPriorityWork = shouldYieldForHighPriorityWork;
    }

    void runLatestIdleTask(double deadlineSeconds)
    {
        m_latestIdleTask->run(deadlineSeconds);
        m_latestIdleTask.clear();
    }

protected:
    bool m_shouldYieldForHighPriorityWork;
    bool m_didShutdown;

    OwnPtr<WebScheduler::IdleTask> m_latestIdleTask;
};

class SchedulerTest : public testing::Test {
public:
    SchedulerTest()
    {
        blink::RuntimeEnabledFeatures::setBlinkSchedulerEnabled(true);
        m_webScheduler = adoptPtr(new WebSchedulerForTest());
        m_scheduler = adoptPtr(new SchedulerForTest(m_webScheduler.get()));
    }

protected:
    OwnPtr<WebSchedulerForTest> m_webScheduler;
    OwnPtr<SchedulerForTest> m_scheduler;
};

TEST_F(SchedulerTest, TestShutdown)
{
    EXPECT_FALSE(m_webScheduler->didShutdown());
    m_scheduler.clear();
    EXPECT_TRUE(m_webScheduler->didShutdown());
}

TEST_F(SchedulerTest, TestShouldYield)
{
    EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork());
    m_webScheduler->setShouldYieldForHighPriorityWork(true);
    EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork());
}

void idleTestTask(double expectedDeadline, double deadlineSeconds)
{
    EXPECT_EQ(expectedDeadline, deadlineSeconds);
}

TEST_F(SchedulerTest, TestIdleTasks)
{
    double deadline = 1.1;
    m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, deadline));
    m_webScheduler->runLatestIdleTask(deadline);
}

} // namespace