Forráskód Böngészése

Merge pull request #3025 from laytan/log-allocator-memory-format

log allocator: use %m to format size and fix formatting bugs
Jeroen van Rijn 1 éve
szülő
commit
d4df3f6383
1 módosított fájl, 39 hozzáadás és 30 törlés
  1. 39 30
      core/log/log_allocator.odin

+ 39 - 30
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=%d, 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=%d, 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=%d)",
-					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,23 +82,24 @@ 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=%d, size=%d, 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,
-				"%s%ALLOCATOR(mode=.Query_Features)",
+				"%s%sALLOCATOR(mode=.Query_Features)",
 				la.prefix, padding,
 				location = location,
 			)
 		case .Query_Info:
 			logf(
 				la.level,
-				"%s%ALLOCATOR(mode=.Query_Info)",
+				"%s%sALLOCATOR(mode=.Query_Info)",
 				la.prefix, padding,
 				location = location,
 			)
@@ -104,11 +113,11 @@ log_allocator_proc :: proc(allocator_data: rawptr, mode: runtime.Allocator_Mode,
 		if err != nil {
 			logf(
 				la.level,
-				"%s%ALLOCATOR ERROR=%v",
-				la.prefix, padding, error,
+				"%s%sALLOCATOR ERROR=%v",
+				la.prefix, padding, err,
 				location = location,
 			)
 		}
 	}
 	return data, err
-}
+}