Index: cc/surfaces/display_scheduler_unittest.cc |
diff --git a/cc/surfaces/display_scheduler_unittest.cc b/cc/surfaces/display_scheduler_unittest.cc |
deleted file mode 100644 |
index 6e02876f43a354e5ef86edb9115eb5f65fe7924a..0000000000000000000000000000000000000000 |
--- a/cc/surfaces/display_scheduler_unittest.cc |
+++ /dev/null |
@@ -1,298 +0,0 @@ |
-// Copyright 2015 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 "cc/surfaces/display_scheduler.h" |
- |
-#include "base/logging.h" |
-#include "base/test/null_task_runner.h" |
-#include "base/trace_event/trace_event.h" |
-#include "cc/output/begin_frame_args.h" |
-#include "cc/surfaces/display.h" |
-#include "cc/test/scheduler_test_common.h" |
-#include "cc/test/test_now_source.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace cc { |
-namespace { |
- |
-class FakeDisplaySchedulerClient : public DisplaySchedulerClient { |
- public: |
- FakeDisplaySchedulerClient() : draw_and_swap_count_(0) {} |
- |
- ~FakeDisplaySchedulerClient() override {} |
- |
- bool DrawAndSwap() override { |
- draw_and_swap_count_++; |
- return true; |
- } |
- |
- void Reset() { draw_and_swap_count_ = 0; } |
- |
- int draw_and_swap_count() const { return draw_and_swap_count_; } |
- |
- protected: |
- int draw_and_swap_count_; |
-}; |
- |
-class TestDisplayScheduler : public DisplayScheduler { |
- public: |
- TestDisplayScheduler(DisplaySchedulerClient* client, |
- BeginFrameSource* begin_frame_source, |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- int max_pending_swaps) |
- : DisplayScheduler(client, |
- begin_frame_source, |
- task_runner, |
- max_pending_swaps), |
- scheduler_begin_frame_deadline_count_(0) {} |
- |
- base::TimeTicks DesiredBeginFrameDeadlineTimeForTest() { |
- return DesiredBeginFrameDeadlineTime(); |
- } |
- |
- void BeginFrameDeadlineForTest() { OnBeginFrameDeadline(); } |
- |
- void ScheduleBeginFrameDeadline() override { |
- scheduler_begin_frame_deadline_count_++; |
- DisplayScheduler::ScheduleBeginFrameDeadline(); |
- } |
- |
- int scheduler_begin_frame_deadline_count() { |
- return scheduler_begin_frame_deadline_count_; |
- } |
- |
- protected: |
- int scheduler_begin_frame_deadline_count_; |
-}; |
- |
-class DisplaySchedulerTest : public testing::Test { |
- public: |
- DisplaySchedulerTest() { |
- const int max_pending_swaps = 1; |
- now_src_ = TestNowSource::Create(); |
- null_task_runner_ = make_scoped_refptr(new base::NullTaskRunner); |
- client_ = make_scoped_ptr(new FakeDisplaySchedulerClient); |
- scheduler_ = make_scoped_ptr( |
- new TestDisplayScheduler(client_.get(), &fake_begin_frame_source_, |
- null_task_runner_, max_pending_swaps)); |
- } |
- |
- ~DisplaySchedulerTest() override {} |
- |
- void SetUp() override { scheduler_->SetResourcesLockedByBrowser(false); } |
- |
- void BeginFrameForTest() { |
- base::TimeTicks frame_time = now_src_->Now(); |
- base::TimeDelta interval = BeginFrameArgs::DefaultInterval(); |
- base::TimeTicks deadline = frame_time + interval - |
- BeginFrameArgs::DefaultEstimatedParentDrawTime(); |
- fake_begin_frame_source_.TestOnBeginFrame( |
- BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
- interval, BeginFrameArgs::NORMAL)); |
- } |
- |
- protected: |
- TestNowSource& now_src() { return *now_src_; } |
- FakeDisplaySchedulerClient& client() { return *client_; } |
- DisplayScheduler& scheduler() { return *scheduler_; } |
- |
- scoped_refptr<TestNowSource> now_src_; |
- scoped_refptr<base::NullTaskRunner> null_task_runner_; |
- |
- FakeBeginFrameSource fake_begin_frame_source_; |
- scoped_ptr<FakeDisplaySchedulerClient> client_; |
- scoped_ptr<TestDisplayScheduler> scheduler_; |
-}; |
- |
-TEST_F(DisplaySchedulerTest, EntireDisplayDamagedDrawsImmediately) { |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->EntireDisplayDamaged(); |
- EXPECT_GE(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
-} |
- |
-TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
- SurfaceId sid1(1); |
- SurfaceId sid2(2); |
- |
- // Get scheduler to detect surface 1 as active by drawing |
- // two frames in a row with damage from surface 1. |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- |
- // Damage only from surface 2 (inactive) does not trigger deadline early. |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid2); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- |
- // Damage from surface 1 triggers deadline early. |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_GE(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->BeginFrameDeadlineForTest(); |
- |
- // Make both surface 1 and 2 active. |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid2); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- |
- // Deadline doesn't trigger early until surface 1 and 2 are both damaged. |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->SurfaceDamaged(sid2); |
- EXPECT_GE(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->BeginFrameDeadlineForTest(); |
-} |
- |
-TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { |
- SurfaceId sid1(1); |
- |
- // DrawAndSwap normally. |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- EXPECT_EQ(0, client_->draw_and_swap_count()); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- |
- // Deadline triggers immediately on OutputSurfaceLost. |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->OutputSurfaceLost(); |
- EXPECT_GE(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- |
- // Deadline does not DrawAndSwap after OutputSurfaceLost. |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
-} |
- |
-TEST_F(DisplaySchedulerTest, ResourcesLockedByBrowser) { |
- SurfaceId sid1(1); |
- base::TimeTicks late_deadline; |
- |
- // DrawAndSwap normally. |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- EXPECT_EQ(0, client_->draw_and_swap_count()); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- |
- // Deadline triggers late while ResourcesLockedByBrowser. |
- late_deadline = now_src().Now() + BeginFrameArgs::DefaultInterval(); |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->SetResourcesLockedByBrowser(true); |
- EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- |
- // Deadline does not DrawAndSwap while ResourcesLockedByBrowser. |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- |
- // Deadline triggers normally when ResourcesLockedByBrowser goes false. |
- late_deadline = now_src().Now() + BeginFrameArgs::DefaultInterval(); |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->SetResourcesLockedByBrowser(false); |
- EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(2, client_->draw_and_swap_count()); |
-} |
- |
-TEST_F(DisplaySchedulerTest, DidSwapBuffers) { |
- SurfaceId sid1(1); |
- base::TimeTicks late_deadline; |
- |
- // DrawAndSwap normally. |
- BeginFrameForTest(); |
- EXPECT_LT(now_src().Now(), |
- scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- EXPECT_EQ(0, client_->draw_and_swap_count()); |
- scheduler_->SurfaceDamaged(sid1); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->DidSwapBuffers(); |
- |
- // Deadline triggers late while swap throttled. |
- late_deadline = now_src().Now() + BeginFrameArgs::DefaultInterval(); |
- BeginFrameForTest(); |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- |
- // Don't draw and swap in deadline while swap throttled. |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- |
- // Then triggers normally when once not swap throttled. |
- // Damage from previous BeginFrame should cary over, so don't damage again. |
- late_deadline = now_src().Now() + BeginFrameArgs::DefaultInterval(); |
- BeginFrameForTest(); |
- EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- scheduler_->DidSwapBuffersComplete(); |
- EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
- |
- // Draw and swap in deadline now that we aren't swap throttled. |
- EXPECT_EQ(1, client_->draw_and_swap_count()); |
- scheduler_->BeginFrameDeadlineForTest(); |
- EXPECT_EQ(2, client_->draw_and_swap_count()); |
-} |
- |
-// This test verfies that we try to reschedule the deadline |
-// after any event that may change what deadline we want. |
-TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { |
- SurfaceId sid1(1); |
- int count = 1; |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- BeginFrameForTest(); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->BeginFrameDeadlineForTest(); |
- scheduler_->DidSwapBuffers(); |
- BeginFrameForTest(); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->DidSwapBuffersComplete(); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->EntireDisplayDamaged(); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->SurfaceDamaged(sid1); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->SetResourcesLockedByBrowser(true); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
- |
- scheduler_->OutputSurfaceLost(); |
- EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
-} |
- |
-} // namespace |
-} // namespace cc |