|
@@ -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
|
|
|
-}
|
|
|
+}
|