diff options
author | 2024-01-22 09:35:23 +0000 | |
---|---|---|
committer | 2024-01-22 09:35:23 +0000 | |
commit | a858831387f5e423c855ff3c5611fc80209f44b0 (patch) | |
tree | 059dcfc37228670e1e2aa20db4a36bb3cef40ef6 /vendor/github.com/pbnjay/memory/memory_darwin.go | |
parent | [bugfix] fix array type for also_known_as_uris (#2553) (diff) | |
download | gotosocial-a858831387f5e423c855ff3c5611fc80209f44b0.tar.xz |
[chore]: Bump github.com/KimMachineGun/automemlimit from 0.4.0 to 0.5.0 (#2560)
Diffstat (limited to 'vendor/github.com/pbnjay/memory/memory_darwin.go')
-rw-r--r-- | vendor/github.com/pbnjay/memory/memory_darwin.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/github.com/pbnjay/memory/memory_darwin.go b/vendor/github.com/pbnjay/memory/memory_darwin.go new file mode 100644 index 000000000..a3f457699 --- /dev/null +++ b/vendor/github.com/pbnjay/memory/memory_darwin.go @@ -0,0 +1,49 @@ +// +build darwin + +package memory + +import ( + "os/exec" + "regexp" + "strconv" +) + +func sysTotalMemory() uint64 { + s, err := sysctlUint64("hw.memsize") + if err != nil { + return 0 + } + return s +} + +func sysFreeMemory() uint64 { + cmd := exec.Command("vm_stat") + outBytes, err := cmd.Output() + if err != nil { + return 0 + } + + rePageSize := regexp.MustCompile("page size of ([0-9]*) bytes") + reFreePages := regexp.MustCompile("Pages free: *([0-9]*)\\.") + + // default: page size of 4096 bytes + matches := rePageSize.FindSubmatchIndex(outBytes) + pageSize := uint64(4096) + if len(matches) == 4 { + pageSize, err = strconv.ParseUint(string(outBytes[matches[2]:matches[3]]), 10, 64) + if err != nil { + return 0 + } + } + + // ex: Pages free: 1126961. + matches = reFreePages.FindSubmatchIndex(outBytes) + freePages := uint64(0) + if len(matches) == 4 { + freePages, err = strconv.ParseUint(string(outBytes[matches[2]:matches[3]]), 10, 64) + if err != nil { + return 0 + } + } + return freePages * pageSize +} |