summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/common/debug.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/common/debug.cpp')
-rw-r--r--src/3rdparty/angle/src/common/debug.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/3rdparty/angle/src/common/debug.cpp b/src/3rdparty/angle/src/common/debug.cpp
index 05d3dc62ad..dcad327564 100644
--- a/src/3rdparty/angle/src/common/debug.cpp
+++ b/src/3rdparty/angle/src/common/debug.cpp
@@ -7,11 +7,13 @@
// debug.cpp: Debugging utilities.
#include "common/debug.h"
-#include <stdarg.h>
+#include "common/platform.h"
+#include "common/angleutils.h"
-#if defined(ANGLE_ENABLE_PERF)
-#include <d3d9.h>
-#endif
+#include <stdarg.h>
+#include <vector>
+#include <fstream>
+#include <cstdio>
namespace gl
{
@@ -23,25 +25,23 @@ typedef void (*PerfOutputFunction)(unsigned int, const wchar_t*);
static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const char *format, va_list vararg)
{
+#if defined(ANGLE_ENABLE_PERF) || defined(ANGLE_ENABLE_TRACE)
+ std::string formattedMessage = FormatString(format, vararg);
+#endif
+
#if defined(ANGLE_ENABLE_PERF)
if (perfActive())
{
- char message[32768];
- int len = vsprintf_s(message, format, vararg);
- if (len < 0)
+ // The perf function only accepts wide strings, widen the ascii message
+ static std::wstring wideMessage;
+ if (wideMessage.capacity() < formattedMessage.length())
{
- return;
+ wideMessage.reserve(formattedMessage.size());
}
- // There are no ASCII variants of these D3DPERF functions.
- wchar_t wideMessage[32768];
- for (int i = 0; i < len; ++i)
- {
- wideMessage[i] = message[i];
- }
- wideMessage[len] = 0;
+ wideMessage.assign(formattedMessage.begin(), formattedMessage.end());
- perfFunc(0, wideMessage);
+ perfFunc(0, wideMessage.c_str());
}
#endif // ANGLE_ENABLE_PERF
@@ -53,12 +53,13 @@ static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const c
}
#endif // NDEBUG
- FILE* file = fopen(TRACE_OUTPUT_FILE, "a");
+ static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app);
if (file)
{
- vfprintf(file, format, vararg);
- fclose(file);
+ file.write(formattedMessage.c_str(), formattedMessage.length());
+ file.flush();
}
+
#endif // ANGLE_ENABLE_TRACE
}