Index: third_party/WebKit/Source/platform/scheduler/renderer/throttling_helper_unittest.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/throttling_helper_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/throttling_helper_unittest.cc |
index fa273d1b0f195306094e990729f2c8d1e26e6d53..740858b78e7edc8e5cbda9e9d667e510fe745e13 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/renderer/throttling_helper_unittest.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/throttling_helper_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "base/test/simple_test_tick_clock.h" |
#include "cc/test/ordered_simple_task_runner.h" |
#include "platform/scheduler/base/test_time_source.h" |
+#include "platform/scheduler/base/real_time_domain.h" |
#include "platform/scheduler/child/scheduler_tqm_delegate_for_test.h" |
#include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h" |
#include "platform/scheduler/renderer/renderer_scheduler_impl.h" |
@@ -28,10 +29,10 @@ namespace blink { |
namespace scheduler { |
namespace { |
-void CountingTask(size_t* count, scoped_refptr<TaskQueue> timer_queue) { |
+void RunTenTimesTask(size_t* count, scoped_refptr<TaskQueue> timer_queue) { |
if (++(*count) < 10) { |
timer_queue->PostTask(FROM_HERE, |
- base::Bind(&CountingTask, count, timer_queue)); |
+ base::Bind(&RunTenTimesTask, count, timer_queue)); |
} |
} |
} |
@@ -61,20 +62,23 @@ class ThrottlingHelperTest : public testing::Test { |
void ExpectThrottled(scoped_refptr<TaskQueue> timer_queue) { |
size_t count = 0; |
timer_queue->PostTask(FROM_HERE, |
- base::Bind(&CountingTask, &count, timer_queue)); |
+ base::Bind(&RunTenTimesTask, &count, timer_queue)); |
mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
- EXPECT_LT(count, 10u); |
- mock_task_runner_->RunUntilIdle(); |
+ EXPECT_LE(count, 1u); |
+ |
+ // Make sure the rest of the tasks run or we risk a UAF on |count|. |
+ mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(10)); |
+ EXPECT_EQ(10u, count); |
} |
void ExpectUnthrottled(scoped_refptr<TaskQueue> timer_queue) { |
size_t count = 0; |
timer_queue->PostTask(FROM_HERE, |
- base::Bind(&CountingTask, &count, timer_queue)); |
+ base::Bind(&RunTenTimesTask, &count, timer_queue)); |
mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
- EXPECT_EQ(count, 10u); |
+ EXPECT_EQ(10u, count); |
mock_task_runner_->RunUntilIdle(); |
} |
@@ -274,6 +278,10 @@ bool MessageLoopTaskCounter(size_t* count) { |
void NopTask() {} |
+void AddOneTask(size_t* count) { |
+ (*count)++; |
+} |
+ |
} // namespace |
TEST_F(ThrottlingHelperTest, |
@@ -287,7 +295,9 @@ TEST_F(ThrottlingHelperTest, |
mock_task_runner_->RunTasksWhile( |
base::Bind(&MessageLoopTaskCounter, &task_count)); |
- EXPECT_EQ(1u, task_count); |
+ // Run the task. |
+ // TODO(alexclarke): Add a base::RunLoop observer and fix this. |
+ EXPECT_EQ(2u, task_count); |
} |
TEST_F(ThrottlingHelperTest, |
@@ -301,7 +311,9 @@ TEST_F(ThrottlingHelperTest, |
mock_task_runner_->RunTasksWhile( |
base::Bind(&MessageLoopTaskCounter, &task_count)); |
- EXPECT_EQ(1u, task_count); |
+ // Run the delayed task. |
+ // TODO(alexclarke): Add a base::RunLoop observer and fix this. |
+ EXPECT_EQ(2u, task_count); |
} |
TEST_F(ThrottlingHelperTest, |
@@ -321,8 +333,9 @@ TEST_F(ThrottlingHelperTest, |
mock_task_runner_->RunTasksWhile( |
base::Bind(&MessageLoopTaskCounter, &task_count)); |
- EXPECT_EQ(2u, task_count); // There are two since the cancelled task runs in |
- // the same DoWork batch. |
+ // Run both delayed tasks. |
+ // TODO(alexclarke): Add a base::RunLoop observer and fix this. |
+ EXPECT_EQ(4u, task_count); |
EXPECT_THAT( |
run_times, |
@@ -373,13 +386,15 @@ TEST_F(ThrottlingHelperTest, ThrottledTasksReportRealTime) { |
} |
TEST_F(ThrottlingHelperTest, TaskQueueDisabledTillPump) { |
- timer_queue_->PostTask(FROM_HERE, base::Bind(&NopTask)); |
+ size_t count = 0; |
+ timer_queue_->PostTask(FROM_HERE, base::Bind(&AddOneTask, &count)); |
EXPECT_TRUE(timer_queue_->IsQueueEnabled()); |
throttling_helper_->IncreaseThrottleRefCount(timer_queue_.get()); |
EXPECT_FALSE(timer_queue_->IsQueueEnabled()); |
mock_task_runner_->RunUntilIdle(); // Wait until the pump. |
+ EXPECT_EQ(1u, count); // The task got run |
EXPECT_TRUE(timer_queue_->IsQueueEnabled()); |
} |
@@ -427,13 +442,15 @@ TEST_F(ThrottlingHelperTest, SetQueueEnabled_DisabledWhileThrottled) { |
} |
TEST_F(ThrottlingHelperTest, TaskQueueDisabledTillPump_ThenManuallyDisabled) { |
- timer_queue_->PostTask(FROM_HERE, base::Bind(&NopTask)); |
+ size_t count = 0; |
+ timer_queue_->PostTask(FROM_HERE, base::Bind(&AddOneTask, &count)); |
EXPECT_TRUE(timer_queue_->IsQueueEnabled()); |
throttling_helper_->IncreaseThrottleRefCount(timer_queue_.get()); |
EXPECT_FALSE(timer_queue_->IsQueueEnabled()); |
mock_task_runner_->RunUntilIdle(); // Wait until the pump. |
+ EXPECT_EQ(1u, count); // Task ran |
EXPECT_TRUE(timer_queue_->IsQueueEnabled()); |
throttling_helper_->SetQueueEnabled(timer_queue_.get(), false); |