From f5a2b38fa4d6cc65c8e1878bf13cf24c19166222 Mon Sep 17 00:00:00 2001 From: "Mrozek, Michal" Date: Mon, 17 Sep 2018 18:23:04 -0700 Subject: [PATCH] Add new debug flag allowing to not register trim callback. Change-Id: I615be3edc9d843fb7b37cf32f2abd5e2839d6ada --- runtime/os_interface/DebugVariables_base.inl | 1 + runtime/os_interface/windows/wddm/wddm.cpp | 3 +++ unit_tests/mocks/mock_wddm.h | 1 + .../os_interface/windows/wddm_memory_manager_tests.cpp | 8 ++++++++ unit_tests/test_files/igdrcl.config | 3 ++- 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/runtime/os_interface/DebugVariables_base.inl b/runtime/os_interface/DebugVariables_base.inl index 2c7502ad48..536f880f66 100644 --- a/runtime/os_interface/DebugVariables_base.inl +++ b/runtime/os_interface/DebugVariables_base.inl @@ -51,6 +51,7 @@ DECLARE_DEBUG_VARIABLE(bool, ForceDispatchScheduler, false, "dispatches schedule DECLARE_DEBUG_VARIABLE(bool, TrackParentEvents, false, "events track their parents") DECLARE_DEBUG_VARIABLE(bool, RebuildPrecompiledKernels, false, "forces driver to recompile precompiled kernels from sources") DECLARE_DEBUG_VARIABLE(bool, LoopAtPlatformInitialize, false, "Adds endless loop in platform initalize, useful for debugging.") +DECLARE_DEBUG_VARIABLE(bool, DoNotRegisterTrimCallback, false, "When set to true driver is not registering trim callback.") /*LOGGING FLAGS*/ DECLARE_DEBUG_VARIABLE(bool, PrintDebugMessages, false, "when enabled, some debug messages will be propagated to console") DECLARE_DEBUG_VARIABLE(bool, DumpKernels, false, "Enables dumping kernels' program source code to text files and program from binary to bin file") diff --git a/runtime/os_interface/windows/wddm/wddm.cpp b/runtime/os_interface/windows/wddm/wddm.cpp index ebf0791638..1911f35453 100644 --- a/runtime/os_interface/windows/wddm/wddm.cpp +++ b/runtime/os_interface/windows/wddm/wddm.cpp @@ -826,6 +826,9 @@ uint64_t Wddm::getHeap32Size() { } void Wddm::registerTrimCallback(PFND3DKMT_TRIMNOTIFICATIONCALLBACK callback, WddmMemoryManager *memoryManager) { + if (DebugManager.flags.DoNotRegisterTrimCallback.get()) { + return; + } D3DKMT_REGISTERTRIMNOTIFICATION registerTrimNotification; registerTrimNotification.Callback = callback; registerTrimNotification.AdapterLuid = this->adapterLuid; diff --git a/unit_tests/mocks/mock_wddm.h b/unit_tests/mocks/mock_wddm.h index 50238c6cb0..bd12850e7f 100644 --- a/unit_tests/mocks/mock_wddm.h +++ b/unit_tests/mocks/mock_wddm.h @@ -59,6 +59,7 @@ class WddmMock : public Wddm { using Wddm::pagingFenceAddress; using Wddm::pagingQueue; using Wddm::preemptionMode; + using Wddm::trimCallbackHandle; using Wddm::wddmInterface; WddmMock() : Wddm(){}; diff --git a/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp b/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp index e18325dbe4..e0f9bf0d08 100644 --- a/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp @@ -1107,6 +1107,14 @@ TEST_F(WddmMemoryManagerResidencyTest, trimCallbackIsRegisteredInWddmMemoryManag EXPECT_EQ(wddm->getDevice(), gdi->getRegisterTrimNotificationArg().hDevice); } +TEST(WddmDebugModesTests, givenDebugModeWhenItIsActiveThenTrimCallbackIsNotRegistred) { + DebugManagerStateRestore stateRestore; + DebugManager.flags.DoNotRegisterTrimCallback.set(true); + WddmMock wddm; + wddm.init(); + EXPECT_EQ(nullptr, wddm.trimCallbackHandle); +} + TEST_F(WddmMemoryManagerResidencyTest, givenNotUsedAllocationsFromPreviousPeriodicTrimWhenTrimResidencyPeriodicTrimIsCalledThenAllocationsAreEvictedMarkedAndRemovedFromTrimCandidateList) { D3DKMT_TRIMNOTIFICATION trimNotification = {0}; trimNotification.Flags.PeriodicTrim = 1; diff --git a/unit_tests/test_files/igdrcl.config b/unit_tests/test_files/igdrcl.config index e2f345ba69..391c2e8630 100644 --- a/unit_tests/test_files/igdrcl.config +++ b/unit_tests/test_files/igdrcl.config @@ -83,4 +83,5 @@ CreateMultipleDevices = 0 EnableExperimentalCommandBuffer = 0 LoopAtPlatformInitialize = false EnableTimestampPacket = false -ReturnRawGpuTimestamps = 0 \ No newline at end of file +ReturnRawGpuTimestamps = 0 +DoNotRegisterTrimCallback = false \ No newline at end of file