From 29a3cb25d3e8db9ce9b42a68413c10c8551c4362 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 7 Apr 2020 11:47:28 +0100 Subject: [PATCH] Add extra guards for window-only performance checking --- src/common.cpp | 6 +++++- src/main.cpp | 14 ++++++++------ src/parser.cpp | 8 ++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/common.cpp b/src/common.cpp index 498b35401..8f91739a4 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -8,10 +8,10 @@ #endif #if defined(GB_SYSTEM_WINDOWS) + #define NOMINMAX 1 #include #undef NOMINMAX -#include #endif #define GB_WINDOWS_H_INCLUDED @@ -21,6 +21,10 @@ #include #include +#if defined(GB_COMPILER_MSVC) +#include +#endif + #include template diff --git a/src/main.cpp b/src/main.cpp index 1b0a91d9b..b1158b08e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1613,15 +1613,16 @@ int main(int arg_count, char const **arg_ptr) { remove_temp_files(gen.output_base); + #if defined(GB_COMPILER_MSVC) if (false) { - PROCESS_MEMORY_COUNTERS_EX pmc; + PROCESS_MEMORY_COUNTERS_EX pmc = {}; GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc)); - SIZE_T virtualMemUsedByMe = pmc.PrivateUsage; - gb_printf_err("virtual_memory_used: %tu B\n", virtualMemUsedByMe); + SIZE_T virtual_mem_used_by_me = pmc.PrivateUsage; + gb_printf_err("virtual_memory_used: %tu B\n", virtual_mem_used_by_me); - gb_printf_err("total_allocated_node_memory: %lld B\n", total_allocated_node_memory); - gb_printf_err("total_subtype_node_memory_test: %lld B\n", total_subtype_node_memory_test); - gb_printf_err("fraction: %.6f\n", (f64)total_subtype_node_memory_test/(f64)total_allocated_node_memory); + gb_printf_err("total_allocated_node_memory: %lld B\n", total_allocated_node_memory.value); + gb_printf_err("total_subtype_node_memory_test: %lld B\n", total_subtype_node_memory_test.value); + gb_printf_err("fraction: %.6f\n", (f64)total_subtype_node_memory_test.value/(f64)total_allocated_node_memory.value); Parser *p = checker.parser; isize lines = p->total_line_count; isize tokens = p->total_token_count; @@ -1641,6 +1642,7 @@ int main(int arg_count, char const **arg_ptr) { gb_printf_err("tokens: %lld\n", tokens); gb_printf_err("packages: %lld\n", packages); } + #endif if (run_output) { #if defined(GB_SYSTEM_WINDOWS) diff --git a/src/parser.cpp b/src/parser.cpp index 937e84279..b05f7df2f 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -442,15 +442,15 @@ bool ast_node_expect(Ast *node, AstKind kind) { } -gb_global isize volatile total_allocated_node_memory = 0; -gb_global isize volatile total_subtype_node_memory_test = 0; +gb_global gbAtomic64 total_allocated_node_memory = {0}; +gb_global gbAtomic64 total_subtype_node_memory_test = {0}; // NOTE(bill): And this below is why is I/we need a new language! Discriminated unions are a pain in C/C++ Ast *alloc_ast_node(AstFile *f, AstKind kind) { gbAllocator a = ast_allocator(); - _InterlockedExchangeAdd64(&total_allocated_node_memory, gb_size_of(Ast)); - _InterlockedExchangeAdd64(&total_subtype_node_memory_test, gb_size_of(AstCommonStuff) + ast_variant_sizes[kind]); + gb_atomic64_fetch_add(&total_allocated_node_memory, cast(i64)(gb_size_of(Ast))); + gb_atomic64_fetch_add(&total_subtype_node_memory_test, cast(i64)(gb_size_of(AstCommonStuff) + ast_variant_sizes[kind])); Ast *node = gb_alloc_item(a, Ast); node->kind = kind;