Browse Source

log allocator: add option to switch between bytes and human format

Laytan Laats 1 year ago
parent
commit
58ff3dd1ed
1 changed files with 34 additions and 25 deletions
  1. 34 25
      core/log/log_allocator.odin

+ 34 - 25
core/log/log_allocator.odin

@@ -2,18 +2,26 @@ package log
 
 import "core:runtime"
 
+Log_Allocator_Format :: enum {
+	Bytes, // Actual number of bytes.
+	Human, // Bytes in human units like bytes, kibibytes, etc. as appropriate.
+}
+
 Log_Allocator :: struct {
 	allocator: runtime.Allocator,
 	level:     Level,
 	prefix:    string,
 	locked:    bool,
+	size_fmt:  Log_Allocator_Format,
 }
 
-log_allocator_init :: proc(la: ^Log_Allocator, level: Level, allocator := context.allocator, prefix := "") {
+log_allocator_init :: proc(la: ^Log_Allocator, level: Level, size_fmt := Log_Allocator_Format.Bytes,
+                           allocator := context.allocator, prefix := "") {
 	la.allocator = allocator
 	la.level = level
 	la.prefix = prefix
 	la.locked = false
+	la.size_fmt = size_fmt
 }
 
 
@@ -37,27 +45,27 @@ log_allocator_proc :: proc(allocator_data: rawptr, mode: runtime.Allocator_Mode,
 
 		switch mode {
 		case .Alloc:
-			logf(
-				la.level,
-				"%s%s>>> ALLOCATOR(mode=.Alloc, size=%m, alignment=%d)",
-				la.prefix, padding, size, alignment,
-				location = location,
-			)
+			fmt: string
+			switch la.size_fmt {
+			case .Bytes: fmt = "%s%s>>> ALLOCATOR(mode=.Alloc, size=%d, alignment=%d)"
+			case .Human: fmt = "%s%s>>> ALLOCATOR(mode=.Alloc, size=%m, alignment=%d)"
+			}
+			logf(la.level, fmt, la.prefix, padding, size, alignment, location = location)
 		case .Alloc_Non_Zeroed:
-			logf(
-				la.level,
-				"%s%s>>> ALLOCATOR(mode=.Alloc_Non_Zeroed, size=%m, alignment=%d)",
-				la.prefix, padding, size, alignment,
-				location = location,
-			)
+			fmt: string
+			switch la.size_fmt {
+			case .Bytes: fmt = "%s%s>>> ALLOCATOR(mode=.Alloc_Non_Zeroed, size=%d, alignment=%d)"
+			case .Human: fmt = "%s%s>>> ALLOCATOR(mode=.Alloc_Non_Zeroed, size=%m, alignment=%d)"
+			}
+			logf(la.level, fmt, la.prefix, padding, size, alignment, location = location)
 		case .Free:
 			if old_size != 0 {
-				logf(
-					la.level,
-					"%s%s<<< ALLOCATOR(mode=.Free, ptr=%p, size=%m)",
-					la.prefix, padding, old_memory, old_size,
-					location = location,
-				)
+				fmt: string
+				switch la.size_fmt {
+				case .Bytes: fmt = "%s%s<<< ALLOCATOR(mode=.Free, ptr=%p, size=%d)"
+				case .Human: fmt = "%s%s<<< ALLOCATOR(mode=.Free, ptr=%p, size=%m)"
+				}
+				logf(la.level, fmt, la.prefix, padding, old_memory, old_size, location = location)
 			} else {
 				logf(
 					la.level,
@@ -74,12 +82,13 @@ log_allocator_proc :: proc(allocator_data: rawptr, mode: runtime.Allocator_Mode,
 				location = location,
 			)
 		case .Resize:
-			logf(
-				la.level,
-				"%s%s>>> ALLOCATOR(mode=.Resize, ptr=%p, old_size=%m, size=%m, alignment=%d)",
-				la.prefix, padding, old_memory, old_size, size, alignment,
-				location = location,
-			)
+			fmt: string
+			switch la.size_fmt {
+			case .Bytes: fmt = "%s%s>>> ALLOCATOR(mode=.Resize, ptr=%p, old_size=%d, size=%d, alignment=%d)"
+			case .Human: fmt = "%s%s>>> ALLOCATOR(mode=.Resize, ptr=%p, old_size=%m, size=%m, alignment=%d)"
+			}
+			logf(la.level, fmt, la.prefix, padding, old_memory, old_size, size, alignment, location = location)
+
 		case .Query_Features:
 			logf(
 				la.level,