diff options
12 files changed, 28 insertions, 19 deletions
diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp index 544f445a06..2a6443a98a 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp @@ -749,7 +749,8 @@ Error AidlComposer::setClientTargetSlotCount(Display display) { } Error AidlComposer::validateDisplay(Display display, nsecs_t expectedPresentTime, - uint32_t* outNumTypes, uint32_t* outNumRequests) { + int32_t frameIntervalNs, uint32_t* outNumTypes, + uint32_t* outNumRequests) { const auto displayId = translate<int64_t>(display); ATRACE_FORMAT("HwcValidateDisplay %" PRId64, displayId); @@ -758,7 +759,8 @@ Error AidlComposer::validateDisplay(Display display, nsecs_t expectedPresentTime auto writer = getWriter(display); auto reader = getReader(display); if (writer && reader) { - writer->get().validateDisplay(displayId, ClockMonotonicTimestamp{expectedPresentTime}); + writer->get().validateDisplay(displayId, ClockMonotonicTimestamp{expectedPresentTime}, + frameIntervalNs); error = execute(display); } else { error = Error::BAD_DISPLAY; diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h index b55381d763..1635a16ec8 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h @@ -134,8 +134,8 @@ public: Error setClientTargetSlotCount(Display display) override; - Error validateDisplay(Display display, nsecs_t expectedPresentTime, uint32_t* outNumTypes, - uint32_t* outNumRequests) override; + Error validateDisplay(Display display, nsecs_t expectedPresentTime, int32_t frameIntervalNs, + uint32_t* outNumTypes, uint32_t* outNumRequests) override; Error presentOrValidateDisplay(Display display, nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h index 0062dfff46..082717a65b 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h @@ -174,7 +174,8 @@ public: virtual Error setClientTargetSlotCount(Display display) = 0; virtual Error validateDisplay(Display display, nsecs_t expectedPresentTime, - uint32_t* outNumTypes, uint32_t* outNumRequests) = 0; + int32_t frameIntervalNs, uint32_t* outNumTypes, + uint32_t* outNumRequests) = 0; virtual Error presentOrValidateDisplay(Display display, nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp index 2c9ea24aa5..bc763b2e55 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.cpp +++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp @@ -517,11 +517,12 @@ Error Display::setVsyncEnabled(Vsync enabled) return static_cast<Error>(intError); } -Error Display::validate(nsecs_t expectedPresentTime, uint32_t* outNumTypes, +Error Display::validate(nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, uint32_t* outNumRequests) { uint32_t numTypes = 0; uint32_t numRequests = 0; - auto intError = mComposer.validateDisplay(mId, expectedPresentTime, &numTypes, &numRequests); + auto intError = mComposer.validateDisplay(mId, expectedPresentTime, frameIntervalNs, &numTypes, + &numRequests); auto error = static_cast<Error>(intError); if (error != Error::NONE && !hasChangesError(error)) { return error; diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h index 06fa89a843..e7f807f553 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.h +++ b/services/surfaceflinger/DisplayHardware/HWC2.h @@ -148,8 +148,8 @@ public: const android::sp<android::Fence>& releaseFence) = 0; [[nodiscard]] virtual hal::Error setPowerMode(hal::PowerMode mode) = 0; [[nodiscard]] virtual hal::Error setVsyncEnabled(hal::Vsync enabled) = 0; - [[nodiscard]] virtual hal::Error validate(nsecs_t expectedPresentTime, uint32_t* outNumTypes, - uint32_t* outNumRequests) = 0; + [[nodiscard]] virtual hal::Error validate(nsecs_t expectedPresentTime, int32_t frameIntervalNs, + uint32_t* outNumTypes, uint32_t* outNumRequests) = 0; [[nodiscard]] virtual hal::Error presentOrValidate(nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, @@ -234,7 +234,7 @@ public: const android::sp<android::Fence>& releaseFence) override; hal::Error setPowerMode(hal::PowerMode) override; hal::Error setVsyncEnabled(hal::Vsync enabled) override; - hal::Error validate(nsecs_t expectedPresentTime, uint32_t* outNumTypes, + hal::Error validate(nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, uint32_t* outNumRequests) override; hal::Error presentOrValidate(nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, uint32_t* outNumRequests, diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 02b1975107..4d6c349d13 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -563,7 +563,8 @@ status_t HWComposer::getDeviceCompositionChanges( } // Present failed but Validate ran. } else { - error = hwcDisplay->validate(expectedPresentTime, &numTypes, &numRequests); + error = hwcDisplay->validate(expectedPresentTime, frameInterval.getPeriodNsecs(), &numTypes, + &numRequests); } ALOGV("SkipValidate failed, Falling back to SLOW validate/present"); if (!hasChangesError(error)) { diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp index 7d7b3489e3..1e7c6da592 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp @@ -665,7 +665,8 @@ Error HidlComposer::setClientTargetSlotCount(Display display) { } Error HidlComposer::validateDisplay(Display display, nsecs_t /*expectedPresentTime*/, - uint32_t* outNumTypes, uint32_t* outNumRequests) { + int32_t /*frameIntervalNs*/, uint32_t* outNumTypes, + uint32_t* outNumRequests) { ATRACE_NAME("HwcValidateDisplay"); mWriter.selectDisplay(display); mWriter.validateDisplay(); diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h index 346aa6ba8e..5c19b47b00 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h @@ -236,8 +236,8 @@ public: Error setClientTargetSlotCount(Display display) override; - Error validateDisplay(Display display, nsecs_t expectedPresentTime, uint32_t* outNumTypes, - uint32_t* outNumRequests) override; + Error validateDisplay(Display display, nsecs_t expectedPresentTime, int32_t frameIntervalNs, + uint32_t* outNumTypes, uint32_t* outNumRequests) override; Error presentOrValidateDisplay(Display display, nsecs_t expectedPresentTime, int32_t frameIntervalNs, uint32_t* outNumTypes, diff --git a/services/surfaceflinger/fuzzer/surfaceflinger_displayhardware_fuzzer.cpp b/services/surfaceflinger/fuzzer/surfaceflinger_displayhardware_fuzzer.cpp index f7e50136f1..afb5f5c630 100644 --- a/services/surfaceflinger/fuzzer/surfaceflinger_displayhardware_fuzzer.cpp +++ b/services/surfaceflinger/fuzzer/surfaceflinger_displayhardware_fuzzer.cpp @@ -163,8 +163,11 @@ private: void DisplayHardwareFuzzer::validateDisplay(Hwc2::AidlComposer* composer, Display display) { uint32_t outNumTypes, outNumRequests; - composer->validateDisplay(display, mFdp.ConsumeIntegral<nsecs_t>(), &outNumTypes, - &outNumRequests); + const auto frameIntervalRange = + mFdp.ConsumeIntegralInRange<int32_t>(Fps::fromValue(1).getPeriodNsecs(), + Fps::fromValue(120).getPeriodNsecs()); + composer->validateDisplay(display, mFdp.ConsumeIntegral<nsecs_t>(), frameIntervalRange, + &outNumTypes, &outNumRequests); } void DisplayHardwareFuzzer::presentOrValidateDisplay(Hwc2::AidlComposer* composer, diff --git a/services/surfaceflinger/tests/unittests/CompositionTest.cpp b/services/surfaceflinger/tests/unittests/CompositionTest.cpp index 8c9c32eb2d..ee967979cd 100644 --- a/services/surfaceflinger/tests/unittests/CompositionTest.cpp +++ b/services/surfaceflinger/tests/unittests/CompositionTest.cpp @@ -361,7 +361,7 @@ struct BaseDisplayVariant { } static void setupHwcForcedClientCompositionCallExpectations(CompositionTest* test) { - EXPECT_CALL(*test->mComposer, validateDisplay(HWC_DISPLAY, _, _, _)).Times(1); + EXPECT_CALL(*test->mComposer, validateDisplay(HWC_DISPLAY, _, _, _, _)).Times(1); } static void setupRECompositionCallExpectations(CompositionTest* test) { diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h index cd9ff85f82..3b74f0ab4a 100644 --- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h +++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h @@ -95,7 +95,7 @@ public: MOCK_METHOD2(setPowerMode, Error(Display, IComposerClient::PowerMode)); MOCK_METHOD2(setVsyncEnabled, Error(Display, IComposerClient::Vsync)); MOCK_METHOD1(setClientTargetSlotCount, Error(Display)); - MOCK_METHOD4(validateDisplay, Error(Display, nsecs_t, uint32_t*, uint32_t*)); + MOCK_METHOD(Error, validateDisplay, (Display, nsecs_t, int32_t, uint32_t*, uint32_t*)); MOCK_METHOD(Error, presentOrValidateDisplay, (Display, nsecs_t, int32_t, uint32_t*, uint32_t*, int*, uint32_t*)); MOCK_METHOD4(setCursorPosition, Error(Display, Layer, int32_t, int32_t)); diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h index 7d26ef3516..a7ddb6df58 100644 --- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h +++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h @@ -76,7 +76,7 @@ public: (override)); MOCK_METHOD(hal::Error, setPowerMode, (hal::PowerMode), (override)); MOCK_METHOD(hal::Error, setVsyncEnabled, (hal::Vsync), (override)); - MOCK_METHOD(hal::Error, validate, (nsecs_t, uint32_t *, uint32_t *), (override)); + MOCK_METHOD(hal::Error, validate, (nsecs_t, int32_t, uint32_t*, uint32_t*), (override)); MOCK_METHOD(hal::Error, presentOrValidate, (nsecs_t, int32_t, uint32_t*, uint32_t*, android::sp<android::Fence>*, uint32_t*), (override)); |