Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(898)

Unified Diff: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc

Issue 994833003: Prevent multiple pending UpdatePolicy tasks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweak Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
diff --git a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
index 4a97a0454749f11708d1fdb98d7f81e2202a5354..d4656f5237186494fb7520f3dfcaf57516ad9a76 100644
--- a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
+++ b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
@@ -10,6 +10,8 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using testing::_;
+
namespace content {
namespace {
@@ -106,6 +108,11 @@ class RendererSchedulerImplTest : public testing::Test {
}
}
+ void PostUpdatePolicyOnControlRunner(base::TimeDelta delay) {
+ base::AutoLock lock(scheduler_->incoming_signals_lock_);
+ scheduler_->PostUpdatePolicyOnControlRunnerLocked(delay);
+ }
+
protected:
static base::TimeDelta priority_escalation_after_input_duration() {
return base::TimeDelta::FromMilliseconds(
@@ -847,4 +854,67 @@ TEST_F(RendererSchedulerImplTest, InputArrivesAfterBeginFrame) {
EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
}
+class MockRendererSchedulerImpl : public RendererSchedulerImpl {
+ public:
+ MockRendererSchedulerImpl(
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner)
+ : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {}
+
+ void UpdatePolicy(bool clear_pending_non_delayed_update_policy) override {
+ update_policy_count_++;
+ RendererSchedulerImpl::UpdatePolicy(
+ clear_pending_non_delayed_update_policy);
+ }
+
+ int update_policy_count_;
+};
+
+TEST_F(RendererSchedulerImplTest, OnlyOnePendingNonDelayedUpdatePolicy) {
+ MockRendererSchedulerImpl* mock_scheduler =
+ new MockRendererSchedulerImpl(mock_task_runner_);
+ scheduler_.reset(mock_scheduler);
+
+ PostUpdatePolicyOnControlRunner(base::TimeDelta());
Sami 2015/03/10 16:19:38 Do we know what triggered the bug in the first pla
alex clarke (OOO till 29th) 2015/03/11 10:59:05 Anything that calls MaybeUpdatePolicy can potentia
+ PostUpdatePolicyOnControlRunner(base::TimeDelta());
+ PostUpdatePolicyOnControlRunner(base::TimeDelta());
+ PostUpdatePolicyOnControlRunner(base::TimeDelta());
+
+ RunUntilIdle();
+
+ EXPECT_EQ(1, mock_scheduler->update_policy_count_);
+}
+
+TEST_F(RendererSchedulerImplTest, OnlyOnePendingDelayedUpdatePolicy) {
+ MockRendererSchedulerImpl* mock_scheduler =
+ new MockRendererSchedulerImpl(mock_task_runner_);
+ scheduler_.reset(mock_scheduler);
+ scheduler_->SetTimeSourceForTesting(clock_);
+ mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
+
+ PostUpdatePolicyOnControlRunner(base::TimeDelta::FromMilliseconds(1));
+ PostUpdatePolicyOnControlRunner(base::TimeDelta::FromMilliseconds(10));
+ PostUpdatePolicyOnControlRunner(base::TimeDelta::FromMilliseconds(100));
+ PostUpdatePolicyOnControlRunner(base::TimeDelta::FromMilliseconds(1000));
+
+ RunUntilIdle();
+
+ EXPECT_EQ(1, mock_scheduler->update_policy_count_);
+}
+
+TEST_F(RendererSchedulerImplTest,
+ OnePendingDelayedAndOneNonDelayedUpdatePolicy) {
+ MockRendererSchedulerImpl* mock_scheduler =
+ new MockRendererSchedulerImpl(mock_task_runner_);
+ scheduler_.reset(mock_scheduler);
+ scheduler_->SetTimeSourceForTesting(clock_);
+ mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
+
+ PostUpdatePolicyOnControlRunner(base::TimeDelta());
+ PostUpdatePolicyOnControlRunner(base::TimeDelta::FromMilliseconds(1));
Sami 2015/03/10 16:19:38 Could you also try this the other way around to ma
alex clarke (OOO till 29th) 2015/03/11 10:59:05 It's now hard to test this directly. If you're ke
+
+ RunUntilIdle();
+
+ EXPECT_EQ(2, mock_scheduler->update_policy_count_);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698