diff options
author | Ady Abraham <adyabr@google.com> | 2019-02-12 15:30:16 -0800 |
---|---|---|
committer | Ady Abraham <adyabr@google.com> | 2019-02-19 10:59:56 -0800 |
commit | b838aed40b86c7038c0cd72d672999c76194265e (patch) | |
tree | c9e9ba9ae9c4de89f6c7baa24c6c54e059943267 /services/surfaceflinger/tests/unittests/EventThreadTest.cpp | |
parent | 7127e80071e32f12a2fa45d97303236a658cdd3f (diff) |
SurfaceFlinger: no app vsyncs during config switch
Do not dipatch vsync callbacks to applications during a config
switch as applications will get choreographer callbacks at uneven
times and will stuff the queue to surface flinger.
Test: test google/perf/jank/UIBench/UIBench-Trace:com.android.uibench.janktests.UiBenchJankTests#testClippedListView -v
Change-Id: I0537933c27af83a9186bcff54c3596d612c748ea
Diffstat (limited to 'services/surfaceflinger/tests/unittests/EventThreadTest.cpp')
-rw-r--r-- | services/surfaceflinger/tests/unittests/EventThreadTest.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/services/surfaceflinger/tests/unittests/EventThreadTest.cpp b/services/surfaceflinger/tests/unittests/EventThreadTest.cpp index 3a7cfba805..e499ff58f7 100644 --- a/services/surfaceflinger/tests/unittests/EventThreadTest.cpp +++ b/services/surfaceflinger/tests/unittests/EventThreadTest.cpp @@ -44,6 +44,7 @@ public: MOCK_METHOD1(setVSyncEnabled, void(bool)); MOCK_METHOD1(setCallback, void(VSyncSource::Callback*)); MOCK_METHOD1(setPhaseOffset, void(nsecs_t)); + MOCK_METHOD1(pauseVsyncCallback, void(bool)); }; } // namespace @@ -71,6 +72,7 @@ protected: void expectVSyncSetEnabledCallReceived(bool expectedState); void expectVSyncSetPhaseOffsetCallReceived(nsecs_t expectedPhaseOffset); + void expectVSyncPauseVsyncCallbackCallReceived(bool expectedPause); VSyncSource::Callback* expectVSyncSetCallbackCallReceived(); void expectInterceptCallReceived(nsecs_t expectedTimestamp); void expectVsyncEventReceivedByConnection(const char* name, @@ -83,6 +85,7 @@ protected: AsyncCallRecorder<void (*)(bool)> mVSyncSetEnabledCallRecorder; AsyncCallRecorder<void (*)(VSyncSource::Callback*)> mVSyncSetCallbackCallRecorder; AsyncCallRecorder<void (*)(nsecs_t)> mVSyncSetPhaseOffsetCallRecorder; + AsyncCallRecorder<void (*)(bool)> mVSyncPauseVsyncCallbackCallRecorder; AsyncCallRecorder<void (*)()> mResyncCallRecorder; AsyncCallRecorder<void (*)()> mResetIdleTimerCallRecorder; AsyncCallRecorder<void (*)(nsecs_t)> mInterceptVSyncCallRecorder; @@ -108,6 +111,9 @@ EventThreadTest::EventThreadTest() { EXPECT_CALL(mVSyncSource, setPhaseOffset(_)) .WillRepeatedly(Invoke(mVSyncSetPhaseOffsetCallRecorder.getInvocable())); + EXPECT_CALL(mVSyncSource, pauseVsyncCallback(_)) + .WillRepeatedly(Invoke(mVSyncPauseVsyncCallbackCallRecorder.getInvocable())); + createThread(); mConnection = createConnection(mConnectionEventCallRecorder); @@ -157,6 +163,12 @@ void EventThreadTest::expectVSyncSetPhaseOffsetCallReceived(nsecs_t expectedPhas EXPECT_EQ(expectedPhaseOffset, std::get<0>(args.value())); } +void EventThreadTest::expectVSyncPauseVsyncCallbackCallReceived(bool expectedPause) { + auto args = mVSyncPauseVsyncCallbackCallRecorder.waitForCall(); + ASSERT_TRUE(args.has_value()); + EXPECT_EQ(expectedPause, std::get<0>(args.value())); +} + VSyncSource::Callback* EventThreadTest::expectVSyncSetCallbackCallReceived() { auto callbackSet = mVSyncSetCallbackCallRecorder.waitForCall(); return callbackSet.has_value() ? std::get<0>(callbackSet.value()) : nullptr; @@ -406,6 +418,16 @@ TEST_F(EventThreadTest, setPhaseOffsetForwardsToVSyncSource) { expectVSyncSetPhaseOffsetCallReceived(321); } +TEST_F(EventThreadTest, pauseVsyncCallbackForwardsToVSyncSource) { + mThread->pauseVsyncCallback(true); + expectVSyncPauseVsyncCallbackCallReceived(true); +} + +TEST_F(EventThreadTest, resumeVsyncCallbackForwardsToVSyncSource) { + mThread->pauseVsyncCallback(false); + expectVSyncPauseVsyncCallbackCallReceived(false); +} + TEST_F(EventThreadTest, postHotplugInternalDisconnect) { mThread->onHotplugReceived(INTERNAL_DISPLAY_ID, false); expectHotplugEventReceivedByConnection(INTERNAL_DISPLAY_ID, false); |