annotate foosdk/sdk/pfc/debug.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "string-lite.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <functional>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #ifdef __ANDROID__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #define PFC_SET_THREAD_DESCRIPTION_EXTERNAL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 void debugBreak();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 [[noreturn]] void crash();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 [[noreturn]] void crashWithMessageOnStack( const char * msg );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 void outputDebugLine(const char * msg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #ifdef __APPLE__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 [[noreturn]] void appleThrowException( const char * name, const char * reason );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 // Debug logger service.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 // It is up to the caller to ensure thread safety. You want to create debugLineReceiver instances on app startup and never destroy them.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 class debugLineReceiver {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 debugLineReceiver();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 virtual void onLine( const char *) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 static void dispatch( const char * msg );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 debugLineReceiver * m_chain;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 void operator=( const debugLineReceiver & ) = delete;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 debugLineReceiver( const debugLineReceiver & ) = delete;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 class debugLog : public string_formatter {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 ~debugLog() { outputDebugLine(this->get_ptr()); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #define PFC_DEBUGLOG ::pfc::debugLog()._formatter()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 void setCurrentThreadDescription( const char * );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 #ifdef PFC_SET_THREAD_DESCRIPTION_EXTERNAL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 void initSetCurrentThreadDescription( std::function<void (const char*)> );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 #define PFC_SET_THREAD_DESCRIPTION(X) { ::pfc::setCurrentThreadDescription(X); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #define PFC_SET_THREAD_DESCRIPTION_SUPPORTED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #define PFC_DEBUG_PRINT_FORCED(...) ::pfc::outputDebugLine(pfc::format(__VA_ARGS__))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 #if PFC_DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 #define PFC_DEBUG_PRINT(...) PFC_DEBUG_PRINT_FORCED(pfc::format(__VA_ARGS__))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 #define PFC_DEBUG_PRINT(...)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #endif