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

Unified Diff: cc/scheduler/begin_frame_source_unittest.cc

Issue 2767933002: [cc] Don't send missed BeginFrames with past deadline.
Patch Set: add ExternalBFS tests, don't check in DelayBasedBFS. Created 3 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
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/delay_based_time_source.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/begin_frame_source_unittest.cc
diff --git a/cc/scheduler/begin_frame_source_unittest.cc b/cc/scheduler/begin_frame_source_unittest.cc
index bce3439e31c0fc4e6809c7a201c156675e7a1805..96eb62a9ad33d8b489d8a93fa4d6e2a6bd9af122 100644
--- a/cc/scheduler/begin_frame_source_unittest.cc
+++ b/cc/scheduler/begin_frame_source_unittest.cc
@@ -802,15 +802,23 @@ class MockExternalBeginFrameSourceClient
MOCK_METHOD1(OnDidFinishFrame, void(const BeginFrameAck&));
};
+class ExternalBeginFrameSourceForTest : public ExternalBeginFrameSource {
+ public:
+ using ExternalBeginFrameSource::ExternalBeginFrameSource;
+ base::TimeTicks Now() const override { return now_; }
+
+ base::TimeTicks now_;
+};
+
class ExternalBeginFrameSourceTest : public ::testing::Test {
public:
std::unique_ptr<MockExternalBeginFrameSourceClient> client_;
- std::unique_ptr<ExternalBeginFrameSource> source_;
+ std::unique_ptr<ExternalBeginFrameSourceForTest> source_;
std::unique_ptr<MockBeginFrameObserver> obs_;
void SetUp() override {
client_.reset(new MockExternalBeginFrameSourceClient);
- source_.reset(new ExternalBeginFrameSource(client_.get()));
+ source_.reset(new ExternalBeginFrameSourceForTest(client_.get()));
obs_.reset(new MockBeginFrameObserver);
}
@@ -908,5 +916,36 @@ TEST_F(ExternalBeginFrameSourceTest, OnBeginFrameChecksBeginFrameContinuity) {
source2.OnBeginFrame(args);
}
+TEST_F(ExternalBeginFrameSourceTest, AddObserverSendsMissedBeginFrame) {
+ BeginFrameArgs args = CreateBeginFrameArgsForTesting(
+ BEGINFRAME_FROM_HERE, 0, 2, base::TimeTicks::FromInternalValue(10000));
+ EXPECT_CALL((*client_), OnDidFinishFrame(BeginFrameAck(0, 2, 2, 0, false)))
+ .Times(1);
+ source_->OnBeginFrame(args);
+
+ args.type = BeginFrameArgs::MISSED;
+ EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
+ EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
+ EXPECT_BEGIN_FRAME_ARGS_USED(*obs_, args);
+ source_->AddObserver(obs_.get());
+}
+
+TEST_F(ExternalBeginFrameSourceTest,
+ AddObserverDoesNotSendMissedBeginFrameAfterDeadline) {
+ BeginFrameArgs args = CreateBeginFrameArgsForTesting(
+ BEGINFRAME_FROM_HERE, 0, 2, base::TimeTicks::FromInternalValue(10000));
+ EXPECT_CALL((*client_), OnDidFinishFrame(BeginFrameAck(0, 2, 2, 0, false)))
+ .Times(1);
+ source_->OnBeginFrame(args);
+
+ source_->now_ = args.deadline;
+ args.type = BeginFrameArgs::MISSED;
+ EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
+ EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
+ // Should not call OnBeginFrame for missed BeginFrame with past deadline.
+ EXPECT_CALL((*obs_), OnBeginFrame(::testing::_)).Times(0);
+ source_->AddObserver(obs_.get());
+}
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/delay_based_time_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698