Commit 0347f00a authored by Clemens Backes's avatar Clemens Backes Committed by Commit Bot

Refactor platform tests to avoid deprecated API

The old tasks API is deprecated and we want to remove it in 8.0.
Thus, this CL refactors the platform tests to use the new
TaskRunner-based API, and removes redundant tests.

R=ahaas@chromium.org

Bug: v8:9810
Change-Id: Ie53c90184639e77b3247228059fd88290b233e0c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1868619Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64412}
parent a8938103
...@@ -45,196 +45,136 @@ class DefaultPlatformWithMockTime : public DefaultPlatform { ...@@ -45,196 +45,136 @@ class DefaultPlatformWithMockTime : public DefaultPlatform {
double DefaultPlatformWithMockTime::mock_time_ = 0.0; double DefaultPlatformWithMockTime::mock_time_ = 0.0;
} // namespace template <typename Platform>
class PlatformTest : public ::testing::Test {
public:
PlatformTest() : task_runner_(platform_.GetForegroundTaskRunner(isolate())) {}
Isolate* isolate() { return reinterpret_cast<Isolate*>(dummy_); }
TEST(DefaultPlatformTest, PumpMessageLoop) { Platform* platform() { return &platform_; }
InSequence s;
int dummy; // These methods take ownership of the task. Tests might still reference them,
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy); // if the tasks are expected to still exist.
void CallOnForegroundThread(Task* task) {
task_runner_->PostTask(std::unique_ptr<Task>(task));
}
void CallDelayedOnForegroundThread(Task* task, double delay_in_seconds) {
task_runner_->PostDelayedTask(std::unique_ptr<Task>(task),
delay_in_seconds);
}
void CallIdleOnForegroundThread(IdleTask* task) {
task_runner_->PostIdleTask(std::unique_ptr<IdleTask>(task));
}
DefaultPlatform platform; bool PumpMessageLoop() { return platform_.PumpMessageLoop(isolate()); }
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
private:
Platform platform_;
InSequence in_sequence_;
std::shared_ptr<TaskRunner> task_runner_;
int dummy_;
};
class DefaultPlatformTest : public PlatformTest<DefaultPlatform> {};
class DefaultPlatformTestWithMockTime
: public PlatformTest<DefaultPlatformWithMockTime> {};
} // namespace
TEST_F(DefaultPlatformTest, PumpMessageLoop) {
EXPECT_FALSE(platform()->PumpMessageLoop(isolate()));
StrictMock<MockTask>* task = new StrictMock<MockTask>; StrictMock<MockTask>* task = new StrictMock<MockTask>;
platform.CallOnForegroundThread(isolate, task); CallOnForegroundThread(task);
EXPECT_CALL(*task, Run()); EXPECT_CALL(*task, Run());
EXPECT_CALL(*task, Die()); EXPECT_CALL(*task, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
EXPECT_FALSE(platform.PumpMessageLoop(isolate)); EXPECT_FALSE(PumpMessageLoop());
} }
TEST(DefaultPlatformTest, PumpMessageLoopWithTaskRunner) { TEST_F(DefaultPlatformTest, PumpMessageLoopWithTaskRunner) {
InSequence s;
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatform platform;
std::shared_ptr<TaskRunner> taskrunner = std::shared_ptr<TaskRunner> taskrunner =
platform.GetForegroundTaskRunner(isolate); platform()->GetForegroundTaskRunner(isolate());
EXPECT_FALSE(platform.PumpMessageLoop(isolate)); EXPECT_FALSE(PumpMessageLoop());
StrictMock<MockTask>* task = new StrictMock<MockTask>; StrictMock<MockTask>* task = new StrictMock<MockTask>;
taskrunner->PostTask(std::unique_ptr<Task>(task)); taskrunner->PostTask(std::unique_ptr<Task>(task));
EXPECT_CALL(*task, Run()); EXPECT_CALL(*task, Run());
EXPECT_CALL(*task, Die()); EXPECT_CALL(*task, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
EXPECT_FALSE(platform.PumpMessageLoop(isolate)); EXPECT_FALSE(PumpMessageLoop());
} }
TEST(DefaultPlatformTest, PumpMessageLoopDelayed) { TEST_F(DefaultPlatformTestWithMockTime, PumpMessageLoopDelayed) {
InSequence s; EXPECT_FALSE(PumpMessageLoop());
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatformWithMockTime platform;
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
StrictMock<MockTask>* task1 = new StrictMock<MockTask>; StrictMock<MockTask>* task1 = new StrictMock<MockTask>;
StrictMock<MockTask>* task2 = new StrictMock<MockTask>; StrictMock<MockTask>* task2 = new StrictMock<MockTask>;
platform.CallDelayedOnForegroundThread(isolate, task2, 100); CallDelayedOnForegroundThread(task2, 100);
platform.CallDelayedOnForegroundThread(isolate, task1, 10); CallDelayedOnForegroundThread(task1, 10);
EXPECT_FALSE(platform.PumpMessageLoop(isolate)); EXPECT_FALSE(PumpMessageLoop());
platform.IncreaseTime(11); platform()->IncreaseTime(11);
EXPECT_CALL(*task1, Run()); EXPECT_CALL(*task1, Run());
EXPECT_CALL(*task1, Die()); EXPECT_CALL(*task1, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
EXPECT_FALSE(platform.PumpMessageLoop(isolate)); EXPECT_FALSE(PumpMessageLoop());
platform.IncreaseTime(90); platform()->IncreaseTime(90);
EXPECT_CALL(*task2, Run()); EXPECT_CALL(*task2, Run());
EXPECT_CALL(*task2, Die()); EXPECT_CALL(*task2, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
} }
TEST(DefaultPlatformTest, PumpMessageLoopDelayedWithTaskRunner) { TEST_F(DefaultPlatformTestWithMockTime, PumpMessageLoopNoStarvation) {
InSequence s; EXPECT_FALSE(PumpMessageLoop());
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatformWithMockTime platform;
std::shared_ptr<TaskRunner> taskrunner =
platform.GetForegroundTaskRunner(isolate);
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
StrictMock<MockTask>* task1 = new StrictMock<MockTask>;
StrictMock<MockTask>* task2 = new StrictMock<MockTask>;
taskrunner->PostDelayedTask(std::unique_ptr<Task>(task2), 100);
taskrunner->PostDelayedTask(std::unique_ptr<Task>(task1), 10);
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
platform.IncreaseTime(11);
EXPECT_CALL(*task1, Run());
EXPECT_CALL(*task1, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate));
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
platform.IncreaseTime(90);
EXPECT_CALL(*task2, Run());
EXPECT_CALL(*task2, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate));
}
TEST(DefaultPlatformTest, PumpMessageLoopNoStarvation) {
InSequence s;
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatformWithMockTime platform;
EXPECT_FALSE(platform.PumpMessageLoop(isolate));
StrictMock<MockTask>* task1 = new StrictMock<MockTask>; StrictMock<MockTask>* task1 = new StrictMock<MockTask>;
StrictMock<MockTask>* task2 = new StrictMock<MockTask>; StrictMock<MockTask>* task2 = new StrictMock<MockTask>;
StrictMock<MockTask>* task3 = new StrictMock<MockTask>; StrictMock<MockTask>* task3 = new StrictMock<MockTask>;
platform.CallOnForegroundThread(isolate, task1); CallOnForegroundThread(task1);
platform.CallDelayedOnForegroundThread(isolate, task2, 10); CallDelayedOnForegroundThread(task2, 10);
platform.IncreaseTime(11); platform()->IncreaseTime(11);
EXPECT_CALL(*task1, Run()); EXPECT_CALL(*task1, Run());
EXPECT_CALL(*task1, Die()); EXPECT_CALL(*task1, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
platform.CallOnForegroundThread(isolate, task3); CallOnForegroundThread(task3);
EXPECT_CALL(*task2, Run()); EXPECT_CALL(*task2, Run());
EXPECT_CALL(*task2, Die()); EXPECT_CALL(*task2, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
EXPECT_CALL(*task3, Run()); EXPECT_CALL(*task3, Run());
EXPECT_CALL(*task3, Die()); EXPECT_CALL(*task3, Die());
EXPECT_TRUE(platform.PumpMessageLoop(isolate)); EXPECT_TRUE(PumpMessageLoop());
} }
TEST_F(DefaultPlatformTestWithMockTime,
TEST(DefaultPlatformTest, PendingDelayedTasksAreDestroyedOnShutdown) { PendingDelayedTasksAreDestroyedOnShutdown) {
InSequence s;
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
{
DefaultPlatformWithMockTime platform;
StrictMock<MockTask>* task = new StrictMock<MockTask>; StrictMock<MockTask>* task = new StrictMock<MockTask>;
platform.CallDelayedOnForegroundThread(isolate, task, 10); CallDelayedOnForegroundThread(task, 10);
EXPECT_CALL(*task, Die()); EXPECT_CALL(*task, Die());
}
} }
TEST(DefaultPlatformTest, RunIdleTasks) { TEST_F(DefaultPlatformTestWithMockTime, RunIdleTasks) {
InSequence s;
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatformWithMockTime platform;
StrictMock<MockIdleTask>* task = new StrictMock<MockIdleTask>;
platform.CallIdleOnForegroundThread(isolate, task);
EXPECT_CALL(*task, Run(42.0 + 23.0));
EXPECT_CALL(*task, Die());
platform.IncreaseTime(23.0);
platform.RunIdleTasks(isolate, 42.0);
}
TEST(DefaultPlatformTest, RunIdleTasksWithTaskRunner) {
InSequence s;
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
DefaultPlatformWithMockTime platform;
std::shared_ptr<TaskRunner> taskrunner =
platform.GetForegroundTaskRunner(isolate);
StrictMock<MockIdleTask>* task = new StrictMock<MockIdleTask>; StrictMock<MockIdleTask>* task = new StrictMock<MockIdleTask>;
taskrunner->PostIdleTask(std::unique_ptr<IdleTask>(task)); CallIdleOnForegroundThread(task);
EXPECT_CALL(*task, Run(42.0 + 23.0)); EXPECT_CALL(*task, Run(42.0 + 23.0));
EXPECT_CALL(*task, Die()); EXPECT_CALL(*task, Die());
platform.IncreaseTime(23.0); platform()->IncreaseTime(23.0);
platform.RunIdleTasks(isolate, 42.0); platform()->RunIdleTasks(isolate(), 42.0);
} }
TEST(DefaultPlatformTest, PendingIdleTasksAreDestroyedOnShutdown) { TEST_F(DefaultPlatformTestWithMockTime,
InSequence s; PendingIdleTasksAreDestroyedOnShutdown) {
int dummy;
Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
{
DefaultPlatformWithMockTime platform;
StrictMock<MockIdleTask>* task = new StrictMock<MockIdleTask>; StrictMock<MockIdleTask>* task = new StrictMock<MockIdleTask>;
platform.CallIdleOnForegroundThread(isolate, task); CallIdleOnForegroundThread(task);
EXPECT_CALL(*task, Die()); EXPECT_CALL(*task, Die());
}
} }
namespace { namespace {
...@@ -259,7 +199,7 @@ class TestBackgroundTask : public Task { ...@@ -259,7 +199,7 @@ class TestBackgroundTask : public Task {
} // namespace } // namespace
TEST(DefaultPlatformTest, RunBackgroundTask) { TEST(CustomDefaultPlatformTest, RunBackgroundTask) {
DefaultPlatform platform; DefaultPlatform platform;
platform.SetThreadPoolSize(1); platform.SetThreadPoolSize(1);
...@@ -273,7 +213,7 @@ TEST(DefaultPlatformTest, RunBackgroundTask) { ...@@ -273,7 +213,7 @@ TEST(DefaultPlatformTest, RunBackgroundTask) {
EXPECT_TRUE(task_executed); EXPECT_TRUE(task_executed);
} }
TEST(DefaultPlatformTest, PostForegroundTaskAfterPlatformTermination) { TEST(CustomDefaultPlatformTest, PostForegroundTaskAfterPlatformTermination) {
std::shared_ptr<TaskRunner> foreground_taskrunner; std::shared_ptr<TaskRunner> foreground_taskrunner;
{ {
DefaultPlatformWithMockTime platform; DefaultPlatformWithMockTime platform;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment