@@ -778,3 +778,34 @@ TEST_F(Wddm20Tests, whenContextIsInitializedThenApplyAdditionalContextFlagsIsCal
778778 EXPECT_TRUE (result);
779779 EXPECT_EQ (1u , wddm->applyAdditionalContextFlagsResult .called );
780780}
781+
782+ TEST_F (Wddm20Tests, givenTrimCallbackRegistrationIsDisabledInDebugVariableWhenRegisteringCallbackThenReturnNullptr) {
783+ DebugManagerStateRestore stateRestore;
784+ DebugManager.flags .DoNotRegisterTrimCallback .set (true );
785+ EXPECT_EQ (nullptr , wddm->registerTrimCallback ([](D3DKMT_TRIMNOTIFICATION *) {}, nullptr ));
786+ }
787+
788+ TEST_F (Wddm20Tests, givenSuccessWhenRegisteringTrimCallbackThenReturnTrimCallbackHandle) {
789+ auto trimCallbackHandle = wddm->registerTrimCallback ([](D3DKMT_TRIMNOTIFICATION *) {}, nullptr );
790+ EXPECT_NE (nullptr , trimCallbackHandle);
791+ }
792+
793+ TEST_F (Wddm20Tests, givenCorrectArgumentsWhenUnregisteringTrimCallbackThenPassArgumentsToGdiCall) {
794+ PFND3DKMT_TRIMNOTIFICATIONCALLBACK callback = [](D3DKMT_TRIMNOTIFICATION *) {};
795+ auto trimCallbackHandle = reinterpret_cast <VOID *>(0x9876 );
796+
797+ wddm->unregisterTrimCallback (callback, trimCallbackHandle);
798+ EXPECT_EQ (callback, gdi->getUnregisterTrimNotificationArg ().Callback );
799+ EXPECT_EQ (trimCallbackHandle, gdi->getUnregisterTrimNotificationArg ().Handle );
800+ }
801+
802+ TEST_F (Wddm20Tests, givenNullTrimCallbackHandleWhenUnregisteringTrimCallbackThenDoNotDoGdiCall) {
803+ PFND3DKMT_TRIMNOTIFICATIONCALLBACK callbackBefore = [](D3DKMT_TRIMNOTIFICATION *) {};
804+ auto trimCallbackHandleBefore = reinterpret_cast <VOID *>(0x9876 );
805+ gdi->getUnregisterTrimNotificationArg ().Callback = callbackBefore;
806+ gdi->getUnregisterTrimNotificationArg ().Handle = trimCallbackHandleBefore;
807+
808+ wddm->unregisterTrimCallback ([](D3DKMT_TRIMNOTIFICATION *) {}, nullptr );
809+ EXPECT_EQ (callbackBefore, gdi->getUnregisterTrimNotificationArg ().Callback );
810+ EXPECT_EQ (trimCallbackHandleBefore, gdi->getUnregisterTrimNotificationArg ().Handle );
811+ }
0 commit comments