More build fixes
This commit is contained in:
parent
ea7cd4638c
commit
d4dcead4f2
@ -1,4 +1,4 @@
|
|||||||
// Generated by the DN single header generator 2025-11-09 15:37:40
|
// Generated by the DN single header generator 2025-11-09 17:09:52
|
||||||
|
|
||||||
#define DN_BASE_INC_CPP
|
#define DN_BASE_INC_CPP
|
||||||
|
|
||||||
@ -827,7 +827,7 @@ static DN_ArenaBlock *DN_ArenaBlockFromMemFuncs_(DN_U64 reserve, DN_U64 commit,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (track_alloc && result)
|
if (track_alloc && result)
|
||||||
DN_LeakTrackAlloc(dn->leak, result, result->reserve, alloc_can_leak);
|
DN_LeakTrackAlloc(&g_dn_->leak, result, result->reserve, alloc_can_leak);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -1512,14 +1512,15 @@ DN_API DN_I64 DN_I64FromPtrUnsafe(void const *data, DN_USize size, char separato
|
|||||||
|
|
||||||
DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize buf_max, char const *fmt, va_list args)
|
DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize buf_max, char const *fmt, va_list args)
|
||||||
{
|
{
|
||||||
DN_FmtAppendResult result = {};
|
DN_FmtAppendResult result = {};
|
||||||
result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args);
|
DN_USize starting_size = *buf_size;
|
||||||
*buf_size += result.size_req;
|
result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args);
|
||||||
|
*buf_size += result.size_req;
|
||||||
if (*buf_size >= (buf_max - 1))
|
if (*buf_size >= (buf_max - 1))
|
||||||
*buf_size = buf_max - 1;
|
*buf_size = buf_max - 1;
|
||||||
DN_Assert(*buf_size <= (buf_max - 1));
|
DN_Assert(*buf_size <= (buf_max - 1));
|
||||||
result.str8 = DN_Str8FromPtr(buf, *buf_size);
|
result.str8 = DN_Str8FromPtr(buf, *buf_size);
|
||||||
result.truncated = result.str8.size != result.size_req;
|
result.truncated = result.str8.size != (starting_size + result.size_req);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10277,8 +10278,9 @@ enum DN_InitFlags_
|
|||||||
{
|
{
|
||||||
DN_InitFlags_Nil = 0,
|
DN_InitFlags_Nil = 0,
|
||||||
DN_InitFlags_OS = 1 << 0,
|
DN_InitFlags_OS = 1 << 0,
|
||||||
DN_InitFlags_LogLibFeatures = 1 << 1,
|
DN_InitFlags_OSLeakTracker = 1 << 1,
|
||||||
DN_InitFlags_LogCPUFeatures = 1 << 2,
|
DN_InitFlags_LogLibFeatures = 1 << 2,
|
||||||
|
DN_InitFlags_LogCPUFeatures = 1 << 3,
|
||||||
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -10382,49 +10384,51 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
{
|
{
|
||||||
g_dn_ = dn;
|
g_dn_ = dn;
|
||||||
|
|
||||||
#if defined(DN_OS_H) && defined(DN_OS_CPP)
|
if (flags & DN_InitFlags_OS) {
|
||||||
DN_InitOS_(&dn->os, args);
|
#if defined(DN_OS_H) && defined(DN_OS_CPP)
|
||||||
#endif
|
DN_InitOS_(&dn->os, args);
|
||||||
|
if (flags & DN_InitFlags_OSLeakTracker) {
|
||||||
// NOTE Initialise fields
|
// NOTE: Setup the allocation table with allocation tracking turned off on
|
||||||
#if defined(DN_LEAK_TRACKING)
|
// the arena we're using to initialise the table.
|
||||||
// NOTE: Setup the allocation table with allocation tracking turned off on
|
dn->leak.alloc_table_arena = DN_ArenaFromVMem(DN_Megabytes(1), DN_Kilobytes(512), DN_ArenaFlags_NoAllocTrack | DN_ArenaFlags_AllocCanLeak);
|
||||||
// the arena we're using to initialise the table.
|
dn->leak.alloc_table = DN_DSMap_Init<DN_LeakAlloc>(&dn->leak.alloc_table_arena, 4096, DN_DSMapFlags_Nil);
|
||||||
core->alloc_table_arena = DN_ArenaFromVMem(DN_Megabytes(1), DN_Kilobytes(512), DN_ArenaFlags_NoAllocTrack | DN_ArenaFlags_AllocCanLeak);
|
}
|
||||||
core->alloc_table = DN_DSMap_Init<DN_DebugAlloc>(&core->alloc_table_arena, 4096, DN_DSMapFlags_Nil);
|
#endif
|
||||||
#endif
|
}
|
||||||
|
|
||||||
// NOTE: Print out init features
|
// NOTE: Print out init features
|
||||||
DN_OSTLSTMem tmem = DN_OS_TLSPushTMem(nullptr);
|
char buf[4096];
|
||||||
DN_Str8Builder builder = DN_Str8BuilderFromArena(tmem.arena);
|
DN_USize buf_size = 0;
|
||||||
if (flags & DN_InitFlags_LogLibFeatures) {
|
if (flags & DN_InitFlags_LogLibFeatures) {
|
||||||
DN_Str8BuilderAppendRef(&builder, DN_Str8Lit("DN initialised:\n"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), "DN initialised:\n");
|
||||||
#if defined(DN_OS_CPP)
|
#if defined(DN_OS_CPP)
|
||||||
DN_F32 page_size_kib = dn->os.page_size / 1024.0f;
|
DN_F32 page_size_kib = dn->os.page_size / 1024.0f;
|
||||||
DN_F32 alloc_granularity_kib = dn->os.alloc_granularity / 1024.0f;
|
DN_F32 alloc_granularity_kib = dn->os.alloc_granularity / 1024.0f;
|
||||||
DN_Str8BuilderAppendF(&builder,
|
DN_FmtAppendTruncate(buf,
|
||||||
" OS Page Size/Alloc Granularity: %.1f/%.1fKiB\n"
|
&buf_size,
|
||||||
" Logical Processor Count: %u\n",
|
sizeof(buf),
|
||||||
page_size_kib,
|
DN_Str8Lit("..."),
|
||||||
alloc_granularity_kib,
|
" OS Page Size/Alloc Granularity: %.1f/%.1fKiB\n"
|
||||||
dn->os.logical_processor_count);
|
" Logical Processor Count: %u\n",
|
||||||
|
page_size_kib,
|
||||||
|
alloc_granularity_kib,
|
||||||
|
dn->os.logical_processor_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DN_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
|
#if DN_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
|
||||||
if (DN_ASAN_POISON) {
|
if (DN_ASAN_POISON) {
|
||||||
DN_Str8BuilderAppendF(
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " ASAN manual poisoning%s\n", DN_ASAN_VET_POISON ? " (+vet sanity checks)" : "");
|
||||||
&builder, " ASAN manual poisoning%s\n", DN_ASAN_VET_POISON ? " (+vet sanity checks)" : "");
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " ASAN poison guard size: %u\n", DN_ASAN_POISON_GUARD_SIZE);
|
||||||
DN_Str8BuilderAppendF(&builder, " ASAN poison guard size: %u\n", DN_ASAN_POISON_GUARD_SIZE);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DN_LEAK_TRACKING)
|
#if defined(DN_LEAK_TRACKING)
|
||||||
DN_Str8BuilderAppendRef(&builder, DN_Str8Lit(" Allocation leak tracing\n"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " Allocation leak tracing\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DN_PLATFORM_EMSCRIPTEN) || defined(DN_PLATFORM_POSIX)
|
#if defined(DN_PLATFORM_EMSCRIPTEN) || defined(DN_PLATFORM_POSIX)
|
||||||
DN_POSIXCore *posix = DN_Cast(DN_POSIXCore *)g_dn_->os.platform_context;
|
DN_POSIXCore *posix = DN_Cast(DN_POSIXCore *)g_dn_->os.platform_context;
|
||||||
DN_Str8BuilderAppendF(&builder, " Clock GetTime: %S\n", posix->clock_monotonic_raw ? DN_Str8Lit("CLOCK_MONOTONIC_RAW") : DN_Str8Lit("CLOCK_MONOTONIC"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " Clock GetTime: %S\n", posix->clock_monotonic_raw ? DN_Str8Lit("CLOCK_MONOTONIC_RAW") : DN_Str8Lit("CLOCK_MONOTONIC"));
|
||||||
#endif
|
#endif
|
||||||
// TODO(doyle): Add stacktrace feature log
|
// TODO(doyle): Add stacktrace feature log
|
||||||
}
|
}
|
||||||
@ -10434,7 +10438,7 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
DN_Str8 brand = DN_Str8TrimWhitespaceAround(DN_Str8FromPtr(report->brand, sizeof(report->brand) - 1));
|
DN_Str8 brand = DN_Str8TrimWhitespaceAround(DN_Str8FromPtr(report->brand, sizeof(report->brand) - 1));
|
||||||
DN_MSVC_WARNING_PUSH
|
DN_MSVC_WARNING_PUSH
|
||||||
DN_MSVC_WARNING_DISABLE(6284) // Object passed as _Param_(3) when a string is required in call to 'DN_Str8BuilderAppendF' Actual type: 'struct DN_Str8'.
|
DN_MSVC_WARNING_DISABLE(6284) // Object passed as _Param_(3) when a string is required in call to 'DN_Str8BuilderAppendF' Actual type: 'struct DN_Str8'.
|
||||||
DN_Str8BuilderAppendF(&builder, " CPU '%S' from '%s' detected:\n", brand, report->vendor);
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " CPU '%S' from '%s' detected:\n", brand, report->vendor);
|
||||||
DN_MSVC_WARNING_POP
|
DN_MSVC_WARNING_POP
|
||||||
|
|
||||||
DN_USize longest_feature_name = 0;
|
DN_USize longest_feature_name = 0;
|
||||||
@ -10446,19 +10450,20 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
for (DN_ForIndexU(feature_index, DN_CPUFeature_Count)) {
|
for (DN_ForIndexU(feature_index, DN_CPUFeature_Count)) {
|
||||||
DN_CPUFeatureDecl feature_decl = g_dn_cpu_feature_decl[feature_index];
|
DN_CPUFeatureDecl feature_decl = g_dn_cpu_feature_decl[feature_index];
|
||||||
bool has_feature = DN_CPUHasFeature(report, feature_decl.value);
|
bool has_feature = DN_CPUHasFeature(report, feature_decl.value);
|
||||||
DN_Str8BuilderAppendF(&builder,
|
DN_FmtAppendTruncate(buf,
|
||||||
" %.*s:%*s%s\n",
|
&buf_size,
|
||||||
DN_Str8PrintFmt(feature_decl.label),
|
sizeof(buf),
|
||||||
DN_Cast(int)(longest_feature_name - feature_decl.label.size),
|
DN_Str8Lit("..."),
|
||||||
"",
|
" %.*s:%*s%s\n",
|
||||||
has_feature ? "available" : "not available");
|
DN_Str8PrintFmt(feature_decl.label),
|
||||||
|
DN_Cast(int)(longest_feature_name - feature_decl.label.size),
|
||||||
|
"",
|
||||||
|
has_feature ? "available" : "not available");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DN_Str8 info_log = DN_Str8BuilderBuild(&builder, tmem.arena);
|
if (buf_size)
|
||||||
if (info_log.size)
|
DN_LOG_DebugF("%.*s", DN_Cast(int)buf_size, buf);
|
||||||
DN_LOG_DebugF("%.*s", DN_Str8PrintFmt(info_log));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DN_API void DN_BeginFrame()
|
DN_API void DN_BeginFrame()
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// Generated by the DN single header generator 2025-11-09 15:37:40
|
// Generated by the DN single header generator 2025-11-09 17:09:52
|
||||||
|
|
||||||
#if !defined(DN_BASE_INC_H)
|
#if !defined(DN_BASE_INC_H)
|
||||||
#define DN_BASE_INC_H
|
#define DN_BASE_INC_H
|
||||||
@ -4015,7 +4015,7 @@ DN_API void DN_LeakDump_ (DN_LeakTracker *leak);
|
|||||||
#if defined(DN_LEAK_TRACKING)
|
#if defined(DN_LEAK_TRACKING)
|
||||||
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) DN_LeakTrackAlloc_(leak, ptr, size, alloc_can_leak)
|
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) DN_LeakTrackAlloc_(leak, ptr, size, alloc_can_leak)
|
||||||
#define DN_LeakTrackDealloc(leak, ptr) DN_LeakTrackDealloc_(leak, ptr)
|
#define DN_LeakTrackDealloc(leak, ptr) DN_LeakTrackDealloc_(leak, ptr)
|
||||||
#define DN_LeakDump(leak) DN_LeakDump(leak);
|
#define DN_LeakDump(leak) DN_LeakDump_(leak)
|
||||||
#else
|
#else
|
||||||
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) do { (void)ptr; (void)size; (void)alloc_can_leak; } while (0)
|
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) do { (void)ptr; (void)size; (void)alloc_can_leak; } while (0)
|
||||||
#define DN_LeakTrackDealloc(leak, ptr) do { (void)ptr; } while (0)
|
#define DN_LeakTrackDealloc(leak, ptr) do { (void)ptr; } while (0)
|
||||||
@ -6330,8 +6330,9 @@ enum DN_InitFlags_
|
|||||||
{
|
{
|
||||||
DN_InitFlags_Nil = 0,
|
DN_InitFlags_Nil = 0,
|
||||||
DN_InitFlags_OS = 1 << 0,
|
DN_InitFlags_OS = 1 << 0,
|
||||||
DN_InitFlags_LogLibFeatures = 1 << 1,
|
DN_InitFlags_OSLeakTracker = 1 << 1,
|
||||||
DN_InitFlags_LogCPUFeatures = 1 << 2,
|
DN_InitFlags_LogLibFeatures = 1 << 2,
|
||||||
|
DN_InitFlags_LogCPUFeatures = 1 << 3,
|
||||||
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -822,7 +822,7 @@ static DN_ArenaBlock *DN_ArenaBlockFromMemFuncs_(DN_U64 reserve, DN_U64 commit,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (track_alloc && result)
|
if (track_alloc && result)
|
||||||
DN_LeakTrackAlloc(dn->leak, result, result->reserve, alloc_can_leak);
|
DN_LeakTrackAlloc(&g_dn_->leak, result, result->reserve, alloc_can_leak);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -1507,14 +1507,15 @@ DN_API DN_I64 DN_I64FromPtrUnsafe(void const *data, DN_USize size, char separato
|
|||||||
|
|
||||||
DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize buf_max, char const *fmt, va_list args)
|
DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize buf_max, char const *fmt, va_list args)
|
||||||
{
|
{
|
||||||
DN_FmtAppendResult result = {};
|
DN_FmtAppendResult result = {};
|
||||||
result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args);
|
DN_USize starting_size = *buf_size;
|
||||||
*buf_size += result.size_req;
|
result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args);
|
||||||
|
*buf_size += result.size_req;
|
||||||
if (*buf_size >= (buf_max - 1))
|
if (*buf_size >= (buf_max - 1))
|
||||||
*buf_size = buf_max - 1;
|
*buf_size = buf_max - 1;
|
||||||
DN_Assert(*buf_size <= (buf_max - 1));
|
DN_Assert(*buf_size <= (buf_max - 1));
|
||||||
result.str8 = DN_Str8FromPtr(buf, *buf_size);
|
result.str8 = DN_Str8FromPtr(buf, *buf_size);
|
||||||
result.truncated = result.str8.size != result.size_req;
|
result.truncated = result.str8.size != (starting_size + result.size_req);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ DN_API void DN_LeakDump_ (DN_LeakTracker *leak);
|
|||||||
#if defined(DN_LEAK_TRACKING)
|
#if defined(DN_LEAK_TRACKING)
|
||||||
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) DN_LeakTrackAlloc_(leak, ptr, size, alloc_can_leak)
|
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) DN_LeakTrackAlloc_(leak, ptr, size, alloc_can_leak)
|
||||||
#define DN_LeakTrackDealloc(leak, ptr) DN_LeakTrackDealloc_(leak, ptr)
|
#define DN_LeakTrackDealloc(leak, ptr) DN_LeakTrackDealloc_(leak, ptr)
|
||||||
#define DN_LeakDump(leak) DN_LeakDump(leak);
|
#define DN_LeakDump(leak) DN_LeakDump_(leak)
|
||||||
#else
|
#else
|
||||||
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) do { (void)ptr; (void)size; (void)alloc_can_leak; } while (0)
|
#define DN_LeakTrackAlloc(leak, ptr, size, alloc_can_leak) do { (void)ptr; (void)size; (void)alloc_can_leak; } while (0)
|
||||||
#define DN_LeakTrackDealloc(leak, ptr) do { (void)ptr; } while (0)
|
#define DN_LeakTrackDealloc(leak, ptr) do { (void)ptr; } while (0)
|
||||||
|
|||||||
@ -27,26 +27,6 @@ struct DN_NETCurlRingEvent
|
|||||||
DN_NETWSSend ws_send;
|
DN_NETWSSend ws_send;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DN_NETCurlCore
|
|
||||||
{
|
|
||||||
// NOTE: Shared w/ user and networking thread
|
|
||||||
DN_Ring ring;
|
|
||||||
DN_OSMutex ring_mutex;
|
|
||||||
bool kill_thread;
|
|
||||||
|
|
||||||
DN_OSMutex list_mutex; // Lock for request, response, deinit, free list
|
|
||||||
DN_NETRequest *request_list; // Current requests submitted by the user thread awaiting to move into the thread request list
|
|
||||||
DN_NETRequest *response_list; // Finished requests that are to be deqeued by the user via wait for response
|
|
||||||
DN_NETRequest *deinit_list; // Requests that are finished and are awaiting to be de-initialised by the CURL thread
|
|
||||||
DN_NETRequest *free_list; // Request pool that new requests will use before allocating
|
|
||||||
|
|
||||||
// NOTE: Networking thread only
|
|
||||||
DN_NETRequest *thread_request_list; // Current requests being executed by the CURL thread.
|
|
||||||
// This list is exclusively owned by the CURL thread so no locking is needed
|
|
||||||
DN_OSThread thread;
|
|
||||||
void *thread_curlm;
|
|
||||||
};
|
|
||||||
|
|
||||||
static DN_NETCurlRequest *DN_NET_CurlRequestFromRequest_(DN_NETRequest *req)
|
static DN_NETCurlRequest *DN_NET_CurlRequestFromRequest_(DN_NETRequest *req)
|
||||||
{
|
{
|
||||||
DN_NETCurlRequest *result = req ? DN_Cast(DN_NETCurlRequest *) req->context[0] : 0;
|
DN_NETCurlRequest *result = req ? DN_Cast(DN_NETCurlRequest *) req->context[0] : 0;
|
||||||
|
|||||||
@ -3,6 +3,27 @@
|
|||||||
|
|
||||||
#include "dn_net.h"
|
#include "dn_net.h"
|
||||||
|
|
||||||
|
struct DN_NETCurlCore
|
||||||
|
{
|
||||||
|
// NOTE: Shared w/ user and networking thread
|
||||||
|
DN_Ring ring;
|
||||||
|
DN_OSMutex ring_mutex;
|
||||||
|
bool kill_thread;
|
||||||
|
|
||||||
|
DN_OSMutex list_mutex; // Lock for request, response, deinit, free list
|
||||||
|
DN_NETRequest *request_list; // Current requests submitted by the user thread awaiting to move into the thread request list
|
||||||
|
DN_NETRequest *response_list; // Finished requests that are to be deqeued by the user via wait for response
|
||||||
|
DN_NETRequest *deinit_list; // Requests that are finished and are awaiting to be de-initialised by the CURL thread
|
||||||
|
DN_NETRequest *free_list; // Request pool that new requests will use before allocating
|
||||||
|
|
||||||
|
// NOTE: Networking thread only
|
||||||
|
DN_NETRequest *thread_request_list; // Current requests being executed by the CURL thread.
|
||||||
|
// This list is exclusively owned by the CURL thread so no locking is needed
|
||||||
|
DN_OSThread thread;
|
||||||
|
void *thread_curlm;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DN_NET_CurlCoreFromNet(net) ((net) ? (DN_Cast(DN_NETCurlCore *)(net)->context) : nullptr);
|
||||||
DN_NETInterface DN_NET_CurlInterface ();
|
DN_NETInterface DN_NET_CurlInterface ();
|
||||||
void DN_NET_CurlInit (DN_NETCore *net, char *base, DN_U64 base_size);
|
void DN_NET_CurlInit (DN_NETCore *net, char *base, DN_U64 base_size);
|
||||||
void DN_NET_CurlDeinit (DN_NETCore *net);
|
void DN_NET_CurlDeinit (DN_NETCore *net);
|
||||||
|
|||||||
@ -2119,7 +2119,7 @@ static DN_UTCore DN_Tests_Str8()
|
|||||||
DN_UT_AssertF(&result, size == 5, "size=%zu", size);
|
DN_UT_AssertF(&result, size == 5, "size=%zu", size);
|
||||||
}
|
}
|
||||||
|
|
||||||
char arena_base[256];
|
char arena_base[512];
|
||||||
for (DN_UT_Test(&result, "Str8 format from arena")) {
|
for (DN_UT_Test(&result, "Str8 format from arena")) {
|
||||||
DN_Arena arena = DN_ArenaFromBuffer(arena_base, sizeof(arena_base), DN_ArenaFlags_Nil);
|
DN_Arena arena = DN_ArenaFromBuffer(arena_base, sizeof(arena_base), DN_ArenaFlags_Nil);
|
||||||
DN_Str8 str8 = DN_Str8FromFmtArena(&arena, "Foo Bar %d", 5);
|
DN_Str8 str8 = DN_Str8FromFmtArena(&arena, "Foo Bar %d", 5);
|
||||||
|
|||||||
@ -95,49 +95,51 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
{
|
{
|
||||||
g_dn_ = dn;
|
g_dn_ = dn;
|
||||||
|
|
||||||
#if defined(DN_OS_H) && defined(DN_OS_CPP)
|
if (flags & DN_InitFlags_OS) {
|
||||||
DN_InitOS_(&dn->os, args);
|
#if defined(DN_OS_H) && defined(DN_OS_CPP)
|
||||||
#endif
|
DN_InitOS_(&dn->os, args);
|
||||||
|
if (flags & DN_InitFlags_OSLeakTracker) {
|
||||||
// NOTE Initialise fields
|
// NOTE: Setup the allocation table with allocation tracking turned off on
|
||||||
#if defined(DN_LEAK_TRACKING)
|
// the arena we're using to initialise the table.
|
||||||
// NOTE: Setup the allocation table with allocation tracking turned off on
|
dn->leak.alloc_table_arena = DN_ArenaFromVMem(DN_Megabytes(1), DN_Kilobytes(512), DN_ArenaFlags_NoAllocTrack | DN_ArenaFlags_AllocCanLeak);
|
||||||
// the arena we're using to initialise the table.
|
dn->leak.alloc_table = DN_DSMap_Init<DN_LeakAlloc>(&dn->leak.alloc_table_arena, 4096, DN_DSMapFlags_Nil);
|
||||||
core->alloc_table_arena = DN_ArenaFromVMem(DN_Megabytes(1), DN_Kilobytes(512), DN_ArenaFlags_NoAllocTrack | DN_ArenaFlags_AllocCanLeak);
|
}
|
||||||
core->alloc_table = DN_DSMap_Init<DN_DebugAlloc>(&core->alloc_table_arena, 4096, DN_DSMapFlags_Nil);
|
#endif
|
||||||
#endif
|
}
|
||||||
|
|
||||||
// NOTE: Print out init features
|
// NOTE: Print out init features
|
||||||
DN_OSTLSTMem tmem = DN_OS_TLSPushTMem(nullptr);
|
char buf[4096];
|
||||||
DN_Str8Builder builder = DN_Str8BuilderFromArena(tmem.arena);
|
DN_USize buf_size = 0;
|
||||||
if (flags & DN_InitFlags_LogLibFeatures) {
|
if (flags & DN_InitFlags_LogLibFeatures) {
|
||||||
DN_Str8BuilderAppendRef(&builder, DN_Str8Lit("DN initialised:\n"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), "DN initialised:\n");
|
||||||
#if defined(DN_OS_CPP)
|
#if defined(DN_OS_CPP)
|
||||||
DN_F32 page_size_kib = dn->os.page_size / 1024.0f;
|
DN_F32 page_size_kib = dn->os.page_size / 1024.0f;
|
||||||
DN_F32 alloc_granularity_kib = dn->os.alloc_granularity / 1024.0f;
|
DN_F32 alloc_granularity_kib = dn->os.alloc_granularity / 1024.0f;
|
||||||
DN_Str8BuilderAppendF(&builder,
|
DN_FmtAppendTruncate(buf,
|
||||||
" OS Page Size/Alloc Granularity: %.1f/%.1fKiB\n"
|
&buf_size,
|
||||||
" Logical Processor Count: %u\n",
|
sizeof(buf),
|
||||||
page_size_kib,
|
DN_Str8Lit("..."),
|
||||||
alloc_granularity_kib,
|
" OS Page Size/Alloc Granularity: %.1f/%.1fKiB\n"
|
||||||
dn->os.logical_processor_count);
|
" Logical Processor Count: %u\n",
|
||||||
|
page_size_kib,
|
||||||
|
alloc_granularity_kib,
|
||||||
|
dn->os.logical_processor_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DN_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
|
#if DN_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
|
||||||
if (DN_ASAN_POISON) {
|
if (DN_ASAN_POISON) {
|
||||||
DN_Str8BuilderAppendF(
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " ASAN manual poisoning%s\n", DN_ASAN_VET_POISON ? " (+vet sanity checks)" : "");
|
||||||
&builder, " ASAN manual poisoning%s\n", DN_ASAN_VET_POISON ? " (+vet sanity checks)" : "");
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " ASAN poison guard size: %u\n", DN_ASAN_POISON_GUARD_SIZE);
|
||||||
DN_Str8BuilderAppendF(&builder, " ASAN poison guard size: %u\n", DN_ASAN_POISON_GUARD_SIZE);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DN_LEAK_TRACKING)
|
#if defined(DN_LEAK_TRACKING)
|
||||||
DN_Str8BuilderAppendRef(&builder, DN_Str8Lit(" Allocation leak tracing\n"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " Allocation leak tracing\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DN_PLATFORM_EMSCRIPTEN) || defined(DN_PLATFORM_POSIX)
|
#if defined(DN_PLATFORM_EMSCRIPTEN) || defined(DN_PLATFORM_POSIX)
|
||||||
DN_POSIXCore *posix = DN_Cast(DN_POSIXCore *)g_dn_->os.platform_context;
|
DN_POSIXCore *posix = DN_Cast(DN_POSIXCore *)g_dn_->os.platform_context;
|
||||||
DN_Str8BuilderAppendF(&builder, " Clock GetTime: %S\n", posix->clock_monotonic_raw ? DN_Str8Lit("CLOCK_MONOTONIC_RAW") : DN_Str8Lit("CLOCK_MONOTONIC"));
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " Clock GetTime: %S\n", posix->clock_monotonic_raw ? DN_Str8Lit("CLOCK_MONOTONIC_RAW") : DN_Str8Lit("CLOCK_MONOTONIC"));
|
||||||
#endif
|
#endif
|
||||||
// TODO(doyle): Add stacktrace feature log
|
// TODO(doyle): Add stacktrace feature log
|
||||||
}
|
}
|
||||||
@ -147,7 +149,7 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
DN_Str8 brand = DN_Str8TrimWhitespaceAround(DN_Str8FromPtr(report->brand, sizeof(report->brand) - 1));
|
DN_Str8 brand = DN_Str8TrimWhitespaceAround(DN_Str8FromPtr(report->brand, sizeof(report->brand) - 1));
|
||||||
DN_MSVC_WARNING_PUSH
|
DN_MSVC_WARNING_PUSH
|
||||||
DN_MSVC_WARNING_DISABLE(6284) // Object passed as _Param_(3) when a string is required in call to 'DN_Str8BuilderAppendF' Actual type: 'struct DN_Str8'.
|
DN_MSVC_WARNING_DISABLE(6284) // Object passed as _Param_(3) when a string is required in call to 'DN_Str8BuilderAppendF' Actual type: 'struct DN_Str8'.
|
||||||
DN_Str8BuilderAppendF(&builder, " CPU '%S' from '%s' detected:\n", brand, report->vendor);
|
DN_FmtAppendTruncate(buf, &buf_size, sizeof(buf), DN_Str8Lit("..."), " CPU '%S' from '%s' detected:\n", brand, report->vendor);
|
||||||
DN_MSVC_WARNING_POP
|
DN_MSVC_WARNING_POP
|
||||||
|
|
||||||
DN_USize longest_feature_name = 0;
|
DN_USize longest_feature_name = 0;
|
||||||
@ -159,19 +161,20 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_InitArgs *args)
|
|||||||
for (DN_ForIndexU(feature_index, DN_CPUFeature_Count)) {
|
for (DN_ForIndexU(feature_index, DN_CPUFeature_Count)) {
|
||||||
DN_CPUFeatureDecl feature_decl = g_dn_cpu_feature_decl[feature_index];
|
DN_CPUFeatureDecl feature_decl = g_dn_cpu_feature_decl[feature_index];
|
||||||
bool has_feature = DN_CPUHasFeature(report, feature_decl.value);
|
bool has_feature = DN_CPUHasFeature(report, feature_decl.value);
|
||||||
DN_Str8BuilderAppendF(&builder,
|
DN_FmtAppendTruncate(buf,
|
||||||
" %.*s:%*s%s\n",
|
&buf_size,
|
||||||
DN_Str8PrintFmt(feature_decl.label),
|
sizeof(buf),
|
||||||
DN_Cast(int)(longest_feature_name - feature_decl.label.size),
|
DN_Str8Lit("..."),
|
||||||
"",
|
" %.*s:%*s%s\n",
|
||||||
has_feature ? "available" : "not available");
|
DN_Str8PrintFmt(feature_decl.label),
|
||||||
|
DN_Cast(int)(longest_feature_name - feature_decl.label.size),
|
||||||
|
"",
|
||||||
|
has_feature ? "available" : "not available");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DN_Str8 info_log = DN_Str8BuilderBuild(&builder, tmem.arena);
|
if (buf_size)
|
||||||
if (info_log.size)
|
DN_LOG_DebugF("%.*s", DN_Cast(int)buf_size, buf);
|
||||||
DN_LOG_DebugF("%.*s", DN_Str8PrintFmt(info_log));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DN_API void DN_BeginFrame()
|
DN_API void DN_BeginFrame()
|
||||||
|
|||||||
@ -23,8 +23,9 @@ enum DN_InitFlags_
|
|||||||
{
|
{
|
||||||
DN_InitFlags_Nil = 0,
|
DN_InitFlags_Nil = 0,
|
||||||
DN_InitFlags_OS = 1 << 0,
|
DN_InitFlags_OS = 1 << 0,
|
||||||
DN_InitFlags_LogLibFeatures = 1 << 1,
|
DN_InitFlags_OSLeakTracker = 1 << 1,
|
||||||
DN_InitFlags_LogCPUFeatures = 1 << 2,
|
DN_InitFlags_LogLibFeatures = 1 << 2,
|
||||||
|
DN_InitFlags_LogCPUFeatures = 1 << 3,
|
||||||
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
DN_InitFlags_LogAllFeatures = DN_InitFlags_LogLibFeatures | DN_InitFlags_LogCPUFeatures,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user