Allow logging of calls into display driver (disabled by default)
Modified: trunk/reactos/subsys/win32k/misc/driver.c

Modified: trunk/reactos/subsys/win32k/misc/driver.c
--- trunk/reactos/subsys/win32k/misc/driver.c	2005-06-12 11:30:17 UTC (rev 15873)
+++ trunk/reactos/subsys/win32k/misc/driver.c	2005-06-12 13:11:36 UTC (rev 15874)
@@ -39,6 +39,9 @@
 #define NDEBUG
 #include <debug.h>
 
+/* #define TRACE_DRV_CALLS to get a log of all calls into the display driver. */
+#undef TRACE_DRV_CALLS
+
 typedef struct _GRAPHICS_DRIVER
 {
   PWSTR  Name;
@@ -164,11 +167,6 @@
     switch(DED->pdrvfn[i].iFunc) \
     {
 
-#define DRIVER_FUNCTION(function) \
-      case INDEX_Drv##function: \
-        *(PVOID*)&DF->function = DED->pdrvfn[i].pfn; \
-        break
-
 #define END_FUNCTION_MAP() \
       default: \
         DPRINT1("Unsupported DDI function 0x%x\n", DED->pdrvfn[i].iFunc); \
@@ -176,6 +174,202 @@
     } \
   }
 
+#ifdef TRACE_DRV_CALLS
+
+typedef struct _TRACEDRVINFO
+  {
+  unsigned Index;
+  char *Name;
+  PVOID DrvRoutine;
+  }
+TRACEDRVINFO, *PTRACEDRVINFO;
+
+__asm__(
+" .text\n"
+"TraceDrv:\n"
+" pushl %eax\n"
+" call  _FindTraceInfo\n"
+" add   $4,%esp\n"
+" pushl %eax\n"
+" pushl 4(%eax)\n"
+" call  _DbgPrint\n"
+" addl  $4,%esp\n"
+" popl  %eax\n"
+" mov   8(%eax),%eax\n"
+" jmp   *%eax\n"
+);
+
+#define TRACEDRV_ROUTINE(function) \
+unsigned TraceDrvIndex##function = INDEX_Drv##function; \
+__asm__ ( \
+" .text\n" \
+"_Trace" #function ":\n" \
+" movl _TraceDrvIndex" #function ",%eax\n" \
+" jmp TraceDrv\n" \
+); \
+extern PVOID Trace##function;
+
+TRACEDRV_ROUTINE(EnablePDEV)
+TRACEDRV_ROUTINE(CompletePDEV)
+TRACEDRV_ROUTINE(DisablePDEV)
+TRACEDRV_ROUTINE(EnableSurface)
+TRACEDRV_ROUTINE(DisableSurface)
+TRACEDRV_ROUTINE(AssertMode)
+TRACEDRV_ROUTINE(Offset)
+TRACEDRV_ROUTINE(ResetPDEV)
+TRACEDRV_ROUTINE(DisableDriver)
+TRACEDRV_ROUTINE(CreateDeviceBitmap)
+TRACEDRV_ROUTINE(DeleteDeviceBitmap)
+TRACEDRV_ROUTINE(RealizeBrush)
+TRACEDRV_ROUTINE(DitherColor)
+TRACEDRV_ROUTINE(StrokePath)
+TRACEDRV_ROUTINE(FillPath)
+TRACEDRV_ROUTINE(StrokeAndFillPath)
+TRACEDRV_ROUTINE(Paint)
+TRACEDRV_ROUTINE(BitBlt)
+TRACEDRV_ROUTINE(TransparentBlt)
+TRACEDRV_ROUTINE(CopyBits)
+TRACEDRV_ROUTINE(StretchBlt)
+TRACEDRV_ROUTINE(StretchBltROP)
+TRACEDRV_ROUTINE(SetPalette)
+TRACEDRV_ROUTINE(TextOut)
+TRACEDRV_ROUTINE(Escape)
+TRACEDRV_ROUTINE(DrawEscape)
+TRACEDRV_ROUTINE(QueryFont)
+TRACEDRV_ROUTINE(QueryFontTree)
+TRACEDRV_ROUTINE(QueryFontData)
+TRACEDRV_ROUTINE(SetPointerShape)
+TRACEDRV_ROUTINE(MovePointer)
+TRACEDRV_ROUTINE(LineTo)
+TRACEDRV_ROUTINE(SendPage)
+TRACEDRV_ROUTINE(StartPage)
+TRACEDRV_ROUTINE(EndDoc)
+TRACEDRV_ROUTINE(StartDoc)
+TRACEDRV_ROUTINE(GetGlyphMode)
+TRACEDRV_ROUTINE(Synchronize)
+TRACEDRV_ROUTINE(SaveScreenBits)
+TRACEDRV_ROUTINE(GetModes)
+TRACEDRV_ROUTINE(Free)
+TRACEDRV_ROUTINE(DestroyFont)
+TRACEDRV_ROUTINE(QueryFontCaps)
+TRACEDRV_ROUTINE(LoadFontFile)
+TRACEDRV_ROUTINE(UnloadFontFile)
+TRACEDRV_ROUTINE(FontManagement)
+TRACEDRV_ROUTINE(QueryTrueTypeTable)
+TRACEDRV_ROUTINE(QueryTrueTypeOutline)
+TRACEDRV_ROUTINE(GetTrueTypeFile)
+TRACEDRV_ROUTINE(QueryFontFile)
+TRACEDRV_ROUTINE(QueryAdvanceWidths)
+TRACEDRV_ROUTINE(SetPixelFormat)
+TRACEDRV_ROUTINE(DescribePixelFormat)
+TRACEDRV_ROUTINE(SwapBuffers)
+TRACEDRV_ROUTINE(StartBanding)
+TRACEDRV_ROUTINE(NextBand)
+TRACEDRV_ROUTINE(GetDirectDrawInfo)
+TRACEDRV_ROUTINE(EnableDirectDraw)
+TRACEDRV_ROUTINE(DisableDirectDraw)
+TRACEDRV_ROUTINE(QuerySpoolType)
+TRACEDRV_ROUTINE(GradientFill)
+TRACEDRV_ROUTINE(SynchronizeSurface)
+TRACEDRV_ROUTINE(AlphaBlend)
+
+#define TRACEDRVINFO_ENTRY(function) \
+    { INDEX_Drv##function, "Drv" #function "\n", NULL }
+static TRACEDRVINFO TraceDrvInfo[] =
+  {
+    TRACEDRVINFO_ENTRY(EnablePDEV),
+    TRACEDRVINFO_ENTRY(CompletePDEV),
+    TRACEDRVINFO_ENTRY(DisablePDEV),
+    TRACEDRVINFO_ENTRY(EnableSurface),
+    TRACEDRVINFO_ENTRY(DisableSurface),
+    TRACEDRVINFO_ENTRY(AssertMode),
+    TRACEDRVINFO_ENTRY(Offset),
+    TRACEDRVINFO_ENTRY(ResetPDEV),
+    TRACEDRVINFO_ENTRY(DisableDriver),
+    TRACEDRVINFO_ENTRY(CreateDeviceBitmap),
+    TRACEDRVINFO_ENTRY(DeleteDeviceBitmap),
+    TRACEDRVINFO_ENTRY(RealizeBrush),
+    TRACEDRVINFO_ENTRY(DitherColor),
+    TRACEDRVINFO_ENTRY(StrokePath),
+    TRACEDRVINFO_ENTRY(FillPath),
+    TRACEDRVINFO_ENTRY(StrokeAndFillPath),
+    TRACEDRVINFO_ENTRY(Paint),
+    TRACEDRVINFO_ENTRY(BitBlt),
+    TRACEDRVINFO_ENTRY(TransparentBlt),
+    TRACEDRVINFO_ENTRY(CopyBits),
+    TRACEDRVINFO_ENTRY(StretchBlt),
+    TRACEDRVINFO_ENTRY(StretchBltROP),
+    TRACEDRVINFO_ENTRY(SetPalette),
+    TRACEDRVINFO_ENTRY(TextOut),
+    TRACEDRVINFO_ENTRY(Escape),
+    TRACEDRVINFO_ENTRY(DrawEscape),
+    TRACEDRVINFO_ENTRY(QueryFont),
+    TRACEDRVINFO_ENTRY(QueryFontTree),
+    TRACEDRVINFO_ENTRY(QueryFontData),
+    TRACEDRVINFO_ENTRY(SetPointerShape),
+    TRACEDRVINFO_ENTRY(MovePointer),
+    TRACEDRVINFO_ENTRY(LineTo),
+    TRACEDRVINFO_ENTRY(SendPage),
+    TRACEDRVINFO_ENTRY(StartPage),
+    TRACEDRVINFO_ENTRY(EndDoc),
+    TRACEDRVINFO_ENTRY(StartDoc),
+    TRACEDRVINFO_ENTRY(GetGlyphMode),
+    TRACEDRVINFO_ENTRY(Synchronize),
+    TRACEDRVINFO_ENTRY(SaveScreenBits),
+    TRACEDRVINFO_ENTRY(GetModes),
+    TRACEDRVINFO_ENTRY(Free),
+    TRACEDRVINFO_ENTRY(DestroyFont),
+    TRACEDRVINFO_ENTRY(QueryFontCaps),
+    TRACEDRVINFO_ENTRY(LoadFontFile),
+    TRACEDRVINFO_ENTRY(UnloadFontFile),
+    TRACEDRVINFO_ENTRY(FontManagement),
+    TRACEDRVINFO_ENTRY(QueryTrueTypeTable),
+    TRACEDRVINFO_ENTRY(QueryTrueTypeOutline),
+    TRACEDRVINFO_ENTRY(GetTrueTypeFile),
+    TRACEDRVINFO_ENTRY(QueryFontFile),
+    TRACEDRVINFO_ENTRY(QueryAdvanceWidths),
+    TRACEDRVINFO_ENTRY(SetPixelFormat),
+    TRACEDRVINFO_ENTRY(DescribePixelFormat),
+    TRACEDRVINFO_ENTRY(SwapBuffers),
+    TRACEDRVINFO_ENTRY(StartBanding),
+    TRACEDRVINFO_ENTRY(NextBand),
+    TRACEDRVINFO_ENTRY(GetDirectDrawInfo),
+    TRACEDRVINFO_ENTRY(EnableDirectDraw),
+    TRACEDRVINFO_ENTRY(DisableDirectDraw),
+    TRACEDRVINFO_ENTRY(QuerySpoolType),
+    TRACEDRVINFO_ENTRY(GradientFill),
+    TRACEDRVINFO_ENTRY(SynchronizeSurface),
+    TRACEDRVINFO_ENTRY(AlphaBlend)
+  };
+
+PTRACEDRVINFO
+FindTraceInfo(unsigned Index)
+{
+  unsigned i;
+
+  for (i = 0; i < sizeof(TraceDrvInfo) / sizeof(TRACEDRVINFO); i++)
+    {
+      if (TraceDrvInfo[i].Index == Index)
+        {
+          return TraceDrvInfo + i;
+        }
+    }
+
+  return NULL;
+}
+
+#define DRIVER_FUNCTION(function) \
+      case INDEX_Drv##function: \
+        FindTraceInfo(INDEX_Drv##function)->DrvRoutine = DED->pdrvfn[i].pfn; \
+        *(PVOID*)&DF->function = &Trace##function; \
+        break
+#else
+#define DRIVER_FUNCTION(function) \
+      case INDEX_Drv##function: \
+        *(PVOID*)&DF->function = DED->pdrvfn[i].pfn; \
+        break
+#endif
+
 BOOL DRIVER_BuildDDIFunctions(PDRVENABLEDATA  DED,
                                PDRIVER_FUNCTIONS  DF)
 {