gallium: Cache one line worth of debug output on windows.
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Tue, 15 Apr 2008 09:11:47 +0000 (18:11 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Tue, 15 Apr 2008 09:11:47 +0000 (18:11 +0900)
The windbg connection seems synchronous, so this speeds up when printing
little text at a time (e.g., tgsi output).

src/gallium/auxiliary/util/p_debug.c

index f9366467cd50075ec38bed6bd53ffc40f70be54a..c195f618200b63b598ef06f8fabf169e0646df06 100644 (file)
@@ -59,10 +59,15 @@ void _debug_vprintf(const char *format, va_list ap)
 #ifdef WIN32
 #ifndef WINCE
    /* EngDebugPrint does not handle float point arguments, so we need to use
-    * our own vsnprintf implementation */
-   char buf[512 + 1];
-   util_vsnprintf(buf, sizeof(buf), format, ap);
-   _EngDebugPrint("%s", buf);
+    * our own vsnprintf implementation. It is also very slow, so buffer until
+    * we find a newline. */
+   static char buf[512 + 1] = {'\0'};
+   size_t len = strlen(buf);
+   int ret = util_vsnprintf(buf + len, sizeof(buf) - len, format, ap);
+   if(ret > (int)(sizeof(buf) - len - 1) || strchr(buf + len, '\n')) {
+      _EngDebugPrint("%s", buf);
+      buf[0] = '\0';
+   }
 #else
    /* TODO: Implement debug print for WINCE */
 #endif