[Spice-devel] [PATCH qxl-wddm-dod 10/20] qxl-wddm-dod: Debug warning on long wait on event
Frediano Ziglio
fziglio at redhat.com
Tue Mar 28 13:27:05 UTC 2017
From: "yuri.benditovich at daynix.com" <yuri.benditovich at daynix.com>
In release build this does not affect the code.
In debug build we will have a warning printout when waiting
on event is close to 2 seconds - this can be a cause of following
stop by OS. The printout contains name of related event variable.
There is one event (in offload thread) that long wait on it
does not affect any functionality, for it this warning is disabled.
Signed-off-by: Yuri Benditovich <yuri.benditovich at daynix.com>
---
qxldod/QxlDod.cpp | 3 ++-
qxldod/QxlDod.h | 15 +++++++++++++--
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
index 6bf7525..98b685a 100755
--- a/qxldod/QxlDod.cpp
+++ b/qxldod/QxlDod.cpp
@@ -5058,7 +5058,8 @@ void QxlDevice::PresentThreadRoutine()
// No need for a mutex, only one consumer thread
SPICE_RING_CONS_WAIT(m_PresentRing, wait);
while (wait) {
- WaitForObject(&m_PresentEvent, NULL);
+ // we do not want indication of long wait on this event
+ DoWaitForObject(&m_PresentEvent, NULL, NULL);
SPICE_RING_CONS_WAIT(m_PresentRing, wait);
}
drawables = *SPICE_RING_CONS_ITEM(m_PresentRing);
diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
index 51c554d..a1e9634 100755
--- a/qxldod/QxlDod.h
+++ b/qxldod/QxlDod.h
@@ -416,11 +416,13 @@ struct Resource {
BOOLEAN
FORCEINLINE
-WaitForObject(
+DoWaitForObject(
PVOID Object,
- PLARGE_INTEGER Timeout)
+ PLARGE_INTEGER Timeout,
+ LPCSTR name)
{
NTSTATUS status;
+ TimeMeasurement tm;
status = KeWaitForSingleObject (
Object,
Executive,
@@ -428,9 +430,18 @@ WaitForObject(
FALSE,
Timeout);
ASSERT(NT_SUCCESS(status));
+ tm.Stop();
+ if (name && tm.Diff() > 1900)
+ {
+ // 2 seconds in PresentDisplayOnly triggers watchdog on Win10RS1
+ // when VSync control enabled. Print the exact event name.
+ DbgPrint(TRACE_LEVEL_ERROR, ("Waiting %d ms for %s\n", tm.Diff(), name));
+ }
return (status == STATUS_SUCCESS);
}
+#define WaitForObject(o, timeout) DoWaitForObject((o), (timeout), #o)
+
VOID
FORCEINLINE
ReleaseMutex(
--
2.9.3
More information about the Spice-devel
mailing list