From b54d33619378e28f9b6f5dca7854e62a57f45698 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 31 Dec 2024 02:07:30 -0500 Subject: [PATCH] Adjustments to logger --- code/grime/filesystem.odin | 6 +-- code/grime/hashmap_chained.odin | 6 +-- code/grime/logger.odin | 42 +++++++++++++++++-- code/grime/memory_tracker.odin | 10 ++--- code/sectr/engine/client_api.odin | 26 ++++++------ .../engine/client_api_sokol_callbacks.odin | 12 +++--- code/sectr/engine/update.odin | 2 +- code/sectr/font/provider.odin | 2 +- code/sectr/grime/mappings.odin | 10 ++++- code/sectr/parser/whitespace.odin | 4 +- 10 files changed, 81 insertions(+), 39 deletions(-) diff --git a/code/grime/filesystem.odin b/code/grime/filesystem.odin index 090f522..9e38738 100644 --- a/code/grime/filesystem.odin +++ b/code/grime/filesystem.odin @@ -12,7 +12,7 @@ file_copy_sync :: proc( path_src, path_dst: string, allocator := context.allocat { path_info, result := file_status( path_src, allocator ) if result != os.ERROR_NONE { - logf("Could not get file info: %v", result, LogLevel.Error ) + log_fmt("Could not get file info: %v", result, LogLevel.Error ) return false } file_size = path_info.size @@ -20,14 +20,14 @@ file_copy_sync :: proc( path_src, path_dst: string, allocator := context.allocat src_content, result := os.read_entire_file( path_src, allocator ) if ! result { - logf( "Failed to read file to copy: %v", path_src, LogLevel.Error ) + log_fmt( "Failed to read file to copy: %v", path_src, LogLevel.Error ) runtime.debug_trap() return false } result = os.write_entire_file( path_dst, src_content, false ) if ! result { - logf( "Failed to copy file: %v", path_dst, LogLevel.Error ) + log_fmt( "Failed to copy file: %v", path_dst, LogLevel.Error ) runtime.debug_trap() return false } diff --git a/code/grime/hashmap_chained.odin b/code/grime/hashmap_chained.odin index 64458de..52006c4 100644 --- a/code/grime/hashmap_chained.odin +++ b/code/grime/hashmap_chained.odin @@ -141,7 +141,7 @@ hmap_chained_get :: proc( using self : HMapChained($Type), key : u64) -> ^Type { if slot.occupied && slot.key == key { if self.dbg_name != "" && self.tracker.entries.header != nil { - logf( "%v: Retrieved %v in lookup[%v] which shows key as %v", self.dbg_name, key, hash_index, slot.key ) + log_fmt( "%v: Retrieved %v in lookup[%v] which shows key as %v", self.dbg_name, key, hash_index, slot.key ) } return & slot.value } @@ -229,7 +229,7 @@ hmap_chained_set :: proc( self : HMapChained($Type), key : u64, value : Type ) - surface_slot.value = value surface_slot.occupied = true if dbg_name != "" && tracker.entries.header != nil { - logf( "%v: Set %v in lookup[%v]", self.dbg_name, key, hash_index ) + log_fmt( "%v: Set %v in lookup[%v]", self.dbg_name, key, hash_index ) } return & surface_slot.value, .None @@ -263,7 +263,7 @@ hmap_chained_set :: proc( self : HMapChained($Type), key : u64, value : Type ) - slot.next.value = value slot.next.occupied = true if dbg_name != "" && tracker.entries.header != nil { - logf( "%v: Set %v in lookup[%v] nest_id: %v", self.dbg_name, key, hash_index, nest_id ) + log_fmt( "%v: Set %v in lookup[%v] nest_id: %v", self.dbg_name, key, hash_index, nest_id ) } return & slot.next.value, .None } diff --git a/code/grime/logger.odin b/code/grime/logger.odin index 04ebba0..4107234 100644 --- a/code/grime/logger.odin +++ b/code/grime/logger.odin @@ -8,14 +8,24 @@ import str "core:strings" import "core:time" import core_log "core:log" -Max_Logger_Message_Width :: 180 +Max_Logger_Message_Width :: 160 LogLevel :: core_log.Level +LoggerEntry :: struct { + text : string, + timestamp : string, + level : string, + location : string, +} + Logger :: struct { file_path : string, file : os.Handle, id : string, + + varena : VArena, + entries : Array(LoggerEntry), } to_odin_logger :: proc( logger : ^ Logger ) -> core_log.Logger { @@ -37,6 +47,27 @@ logger_init :: proc( logger : ^ Logger, id : string, file_path : string, file : logger.file_path = file_path logger.id = id + LOGGER_VARENA_BASE_ADDRESS : uintptr = 2 * Terabyte + @static vmem_init_counter : uintptr = 0 + + when true { + alloc_error : AllocatorError + // logger.varena, alloc_error = varena_init( + // LOGGER_VARENA_BASE_ADDRESS + vmem_init_counter * 250 * Megabyte, + // 1 * Megabyte, + // 128 * Kilobyte, + // growth_policy = nil, + // allow_any_resize = true, + // dbg_name = "logger varena", + // enable_mem_tracking = false ) + // verify( alloc_error == .None, "Failed to allocate logger's virtual arena") + vmem_init_counter += 1 + + // TODO(Ed): Figure out another solution here... + // logger.entries, alloc_error = array_init(Array(LoggerEntry), 8192, runtime.heap_allocator()) + // verify( alloc_error == .None, "Failed to allocate logger's entries array") + } + context.logger = { logger_interface, logger, core_log.Level.Debug, core_log.Default_File_Logger_Opts } log("Initialized Logger") when false { @@ -60,8 +91,10 @@ logger_interface :: proc( first_line_length := len(text) > Max_Logger_Message_Width ? Max_Logger_Message_Width : len(text) first_line := transmute(string) text[ 0 : first_line_length ] - // str_fmt_builder( & builder, "%-s ", Max_Logger_Message_Width, first_line ) - str_fmt_builder( & builder, "%-180s ", first_line ) + + str_fmt_builder( & builder, "%s ", first_line ) + + // str_fmt_builder( & builder, "%-s ", first_line ) // Signature { @@ -84,6 +117,7 @@ logger_interface :: proc( str_fmt_builder( & builder, "] ") } } + core_log.do_level_header( options, & builder, level ) if logger.id != "" { @@ -125,7 +159,7 @@ log :: proc( msg : string, level := LogLevel.Info, loc := #caller_location ) { core_log.log( level, msg, location = loc ) } -logf :: proc( fmt : string, args : ..any, level := LogLevel.Info, loc := #caller_location ) { +log_fmt :: proc( fmt : string, args : ..any, level := LogLevel.Info, loc := #caller_location ) { temp_arena : Arena; arena_init(& temp_arena, Logger_Allocator_Buffer[:]) context.allocator = arena_allocator(& temp_arena) context.temp_allocator = arena_allocator(& temp_arena) diff --git a/code/grime/memory_tracker.odin b/code/grime/memory_tracker.odin index ee57694..b279b58 100644 --- a/code/grime/memory_tracker.odin +++ b/code/grime/memory_tracker.odin @@ -25,7 +25,7 @@ memtracker_clear :: proc ( tracker : MemoryTracker ) { return } - logf("Clearing tracker: %v", tracker.name) + log_fmt("Clearing tracker: %v", tracker.name) memtracker_dump_entries(tracker); array_clear(tracker.entries) } @@ -75,12 +75,12 @@ memtracker_register :: proc( tracker : ^MemoryTracker, new_entry : MemoryTracker memtracker_dump_entries(tracker ^) } array_append_at( & tracker.entries, new_entry, idx ) - logf("Registered: %v -> %v | %v", new_entry.start, new_entry.end, tracker.name) + log_fmt("Registered: %v -> %v | %v", new_entry.start, new_entry.end, tracker.name) return } array_append( & tracker.entries, new_entry ) - logf("Registered: %v -> %v | %v", new_entry.start, new_entry.end, tracker.name ) + log_fmt("Registered: %v -> %v | %v", new_entry.start, new_entry.end, tracker.name ) } memtracker_register_auto_name :: proc( tracker : ^MemoryTracker, start, end : rawptr ) @@ -118,7 +118,7 @@ memtracker_unregister :: proc( tracker : MemoryTracker, to_remove : MemoryTracke entry := & entries[idx] if entry.start == to_remove.start { if (entry.end == to_remove.end || to_remove.end == nil) { - logf("Unregistered: %v -> %v | %v", to_remove.start, to_remove.end, tracker.name ); + log_fmt("Unregistered: %v -> %v | %v", to_remove.start, to_remove.end, tracker.name ); array_remove_at(tracker.entries, idx) return } @@ -166,6 +166,6 @@ memtracker_dump_entries :: proc( tracker : MemoryTracker ) log( "Dumping Memory Tracker:") for idx in 0 ..< tracker.entries.num { entry := & tracker.entries.data[idx] - logf("%v -> %v", entry.start, entry.end) + log_fmt("%v -> %v", entry.start, entry.end) } } diff --git a/code/sectr/engine/client_api.odin b/code/sectr/engine/client_api.odin index 989818f..30335c3 100644 --- a/code/sectr/engine/client_api.odin +++ b/code/sectr/engine/client_api.odin @@ -231,14 +231,14 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem backend := sokol_gfx.query_backend() switch backend { - case .D3D11: logf("sokol_gfx: using D3D11 backend") - case .GLCORE, .GLES3: logf("sokol_gfx: using GL backend") + case .D3D11: log_fmt("sokol_gfx: using D3D11 backend") + case .GLCORE, .GLES3: log_fmt("sokol_gfx: using GL backend") case .METAL_MACOS, .METAL_IOS, .METAL_SIMULATOR: - logf("sokol_gfx: using Metal backend") + log_fmt("sokol_gfx: using Metal backend") - case .WGPU: logf("sokol_gfx: using WebGPU backend") - case .DUMMY: logf("sokol_gfx: using dummy backend") + case .WGPU: log_fmt("sokol_gfx: using WebGPU backend") + case .DUMMY: log_fmt("sokol_gfx: using dummy backend") } render_data.pass_actions.bg_clear_black.colors[0] = sokol_gfx.Color_Attachment_Action { @@ -280,11 +280,11 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem // path_open_sans := strings.concatenate( { Path_Assets, "OpenSans-Regular.ttf" } ) // font_open_sans = font_load( path_open_sans, 16.0, "OpenSans" ) - path_noto_sans := strings.concatenate( { Path_Assets, "NotoSans-Regular.ttf" } ) - font_noto_sans = font_load( path_noto_sans, 16.0, "NotoSans" ) + // path_noto_sans := strings.concatenate( { Path_Assets, "NotoSans-Regular.ttf" } ) + // font_noto_sans = font_load( path_noto_sans, 16.0, "NotoSans" ) - // path_neodgm_code := strings.concatenate( { Path_Assets, "neodgm_code.ttf"} ) - // font_neodgm_code = font_load( path_neodgm_code, 32.0, "NeoDunggeunmo Code" ) + path_neodgm_code := strings.concatenate( { Path_Assets, "neodgm_code.ttf"} ) + font_neodgm_code = font_load( path_neodgm_code, 32.0, "NeoDunggeunmo Code" ) // path_rec_mono_linear := strings.concatenate( { Path_Assets, "RecMonoLinear-Regular-1.084.ttf" }) // font_rec_mono_linear = font_load( path_rec_mono_linear, 16.0, "RecMonoLinear Regular" ) @@ -298,7 +298,7 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem // path_arial_unicode_ms := strings.concatenate( { Path_Assets, "Arial Unicode MS.ttf" } ) // font_arial_unicode_ms = font_load( path_arial_unicode_ms, 16.0, "Arial_Unicode_MS" ) - default_font = font_noto_sans + default_font = font_neodgm_code log( "Default font loaded" ) } @@ -354,10 +354,10 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem // debug.path_lorem = str_fmt("C:/projects/SectrPrototype/examples/ve_fontcache.h", allocator = persistent_slab_allocator()) alloc_error : AllocatorError; success : bool - debug.lorem_content, success = os.read_entire_file( debug.path_lorem, persistent_slab_allocator() ) + // debug.lorem_content, success = os.read_entire_file( debug.path_lorem, persistent_slab_allocator() ) - debug.lorem_parse, alloc_error = pws_parser_parse( transmute(string) debug.lorem_content, persistent_slab_allocator() ) - verify( alloc_error == .None, "Faield to parse due to allocation failure" ) + // debug.lorem_parse, alloc_error = pws_parser_parse( transmute(string) debug.lorem_content, persistent_slab_allocator() ) + // verify( alloc_error == .None, "Faield to parse due to allocation failure" ) // Render texture test // debug.viewport_rt = rl.LoadRenderTexture( 1280, 720 ) diff --git a/code/sectr/engine/client_api_sokol_callbacks.odin b/code/sectr/engine/client_api_sokol_callbacks.odin index ace4d9d..83ad10d 100644 --- a/code/sectr/engine/client_api_sokol_callbacks.odin +++ b/code/sectr/engine/client_api_sokol_callbacks.odin @@ -93,7 +93,7 @@ sokol_app_log_callback :: proc "c" ( } cloned_tag := str.clone_from_cstring(tag, context.temp_allocator) - logf( "%-80s %s::%v", cloned_msg, cloned_tag, line_nr, level = odin_level ) + log_fmt( "%-80s %s::%v", cloned_msg, cloned_tag, line_nr, level = odin_level ) } // TODO(Ed): Does this need to be queued to a separate thread? @@ -113,8 +113,8 @@ sokol_app_event_callback :: proc "c" (sokol_event : ^sokol_app.Event) switch sokol_event.type { case .INVALID: - logf("sokol_app - event: INVALID?") - logf("%v", sokol_event) + log_fmt("sokol_app - event: INVALID?") + log_fmt("%v", sokol_event) case .KEY_DOWN: if sokol_event.key_repeat do return @@ -223,8 +223,8 @@ sokol_app_event_callback :: proc "c" (sokol_event : ^sokol_app.Event) sokol_app.consume_event() case .DISPLAY_CHANGED: - logf("sokol_app - event: Display changed") - logf("refresh rate: %v", sokol_app.refresh_rate()) + log_fmt("sokol_app - event: Display changed") + log_fmt("refresh rate: %v", sokol_app.refresh_rate()) monitor_refresh_hz := sokol_app.refresh_rate() sokol_app.consume_event() } @@ -274,7 +274,7 @@ sokol_gfx_log_callback :: proc "c" ( } cloned_tag := str.clone_from_cstring(tag, context.temp_allocator) - logf( "%-80s %s::%v", cloned_msg, cloned_tag, line_nr, level = odin_level ) + log_fmt( "%-80s %s::%v", cloned_msg, cloned_tag, line_nr, level = odin_level ) } #endregion("Sokol GFX") diff --git a/code/sectr/engine/update.odin b/code/sectr/engine/update.odin index 3f98f6b..6b3e958 100644 --- a/code/sectr/engine/update.odin +++ b/code/sectr/engine/update.odin @@ -347,7 +347,7 @@ update :: proc( delta_time : f64 ) -> b32 // test_draggable() // test_text_box() // test_parenting( & default_layout, & frame_style_default ) - test_whitespace_ast( & default_layout, & frame_style_default ) + // test_whitespace_ast( & default_layout, & frame_style_default ) } //endregion Workspace Imgui Tick diff --git a/code/sectr/font/provider.odin b/code/sectr/font/provider.odin index 2ec9a8f..d7e7b61 100644 --- a/code/sectr/font/provider.odin +++ b/code/sectr/font/provider.odin @@ -6,7 +6,7 @@ import ve "codebase:font/VEFontCache" import sokol_gfx "thirdparty:sokol/gfx" Font_Provider_Use_Freetype :: false -Font_Largest_Px_Size :: 154 +Font_Largest_Px_Size :: 72 Font_Size_Interval :: 2 Font_Default :: FontID { 0, "" } diff --git a/code/sectr/grime/mappings.odin b/code/sectr/grime/mappings.odin index 499b781..7ab3c4f 100644 --- a/code/sectr/grime/mappings.odin +++ b/code/sectr/grime/mappings.odin @@ -262,7 +262,7 @@ import "codebase:grime" to_odin_logger :: grime.to_odin_logger logger_init :: grime.logger_init log :: grime.log - logf :: grime.logf + log_fmt :: grime.log_fmt // memory MemoryTracker :: grime.MemoryTracker @@ -398,6 +398,10 @@ get_bounds :: proc { view_get_bounds, } +join :: proc { + join_range2, +} + inverse_mag :: proc { inverse_mag_vec3, // inverse_mag_rotor3, @@ -535,6 +539,10 @@ remove_at :: proc { grime.array_remove_at, } +// size :: proc { +// size_range2, +// } + scope :: proc { ui_layout_scope_via_layout, ui_layout_scope_via_combo, diff --git a/code/sectr/parser/whitespace.odin b/code/sectr/parser/whitespace.odin index 7f09179..3a5a403 100644 --- a/code/sectr/parser/whitespace.odin +++ b/code/sectr/parser/whitespace.odin @@ -120,7 +120,7 @@ PWS_LexerData :: struct { pws_parser_lex :: proc ( text : string, allocator : Allocator ) -> ( PWS_LexResult, AllocatorError ) { bytes := transmute([]byte) text - log( str_fmt( "lexing: %v ...", (len(text) > 30 ? transmute(string) bytes[ :30] : text) )) + // log( str_fmt( "lexing: %v ...", (len(text) > 30 ? transmute(string) bytes[ :30] : text) )) profile(#procedure) using lexer : PWS_LexerData @@ -256,7 +256,7 @@ pws_parser_parse :: proc( text : string, allocator : Allocator ) -> ( PWS_ParseR tokens = lex.tokens - log( str_fmt( "parsing: %v ...", (len(text) > 30 ? transmute(string) bytes[ :30] : text) )) + // log( str_fmt( "parsing: %v ...", (len(text) > 30 ? transmute(string) bytes[ :30] : text) )) // TODO(Ed): Change this to use a node pool nodes, alloc_error = make( Array(PWS_AST), PWS_NodeArray_ReserveSize, allocator )