diff options
| author | 2025-03-09 17:47:56 +0100 | |
|---|---|---|
| committer | 2025-12-01 22:08:04 +0100 | |
| commit | b1af8fd87760b34e3ff2fd3bda38f211815a0473 (patch) | |
| tree | 9317fad1a7ec298d7a8d2678e4e422953bbc6f33 /vendor/codeberg.org/gruf/go-caller/caller.go | |
| parent | [chore] update URLs to forked source (diff) | |
| download | gotosocial-b1af8fd87760b34e3ff2fd3bda38f211815a0473.tar.xz | |
[chore] remove vendor
Diffstat (limited to 'vendor/codeberg.org/gruf/go-caller/caller.go')
| -rw-r--r-- | vendor/codeberg.org/gruf/go-caller/caller.go | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/vendor/codeberg.org/gruf/go-caller/caller.go b/vendor/codeberg.org/gruf/go-caller/caller.go deleted file mode 100644 index b07e05169..000000000 --- a/vendor/codeberg.org/gruf/go-caller/caller.go +++ /dev/null @@ -1,136 +0,0 @@ -package caller - -import ( - "runtime" - "strings" - "sync/atomic" -) - -var ( - // callerCache caches PC values to string names. - // note this may be a little slower than Caller() - // calls on startup, but after all PCs are cached - // this should be ~3x faster + less GC overhead. - // - // see the following benchmark: - // goos: linux - // goarch: amd64 - // pkg: codeberg.org/gruf/go-caller - // cpu: AMD Ryzen 7 7840U w/ Radeon 780M Graphics - // BenchmarkCallerCache - // BenchmarkCallerCache-16 16796982 66.19 ns/op 24 B/op 3 allocs/op - // BenchmarkNoCallerCache - // BenchmarkNoCallerCache-16 5486168 219.9 ns/op 744 B/op 6 allocs/op - callerCache atomic.Pointer[map[uintptr]string] - - // stringCache caches strings to minimise string memory use - // by ensuring only 1 instance of the same func name string. - stringCache atomic.Pointer[map[string]string] -) - -// Clear will empty the global caller PC -> func names cache. -func Clear() { callerCache.Store(nil); stringCache.Store(nil) } - -// Name returns the calling function name for given -// program counter, formatted to be useful for logging. -func Name(pc uintptr) string { - - // Get frame iterator for program counter. - frames := runtime.CallersFrames([]uintptr{pc}) - if frames == nil { - return "???" - } - - // Get func name from frame. - frame, _ := frames.Next() - name := frame.Function - if name == "" { - return "???" - } - - // Drop all but package and function name, no path. - if idx := strings.LastIndex(name, "/"); idx >= 0 { - name = name[idx+1:] - } - - const params = `[...]` - - // Drop any function generic type parameter markers. - if idx := strings.Index(name, params); idx >= 0 { - name = name[:idx] + name[idx+len(params):] - } - - return name -} - -// Get will return calling func information for given PC value, -// caching func names by their PC values to reduce calls to Caller(). -func Get(pc uintptr) string { - var cache map[uintptr]string - for { - // Load caller cache map. - ptr := callerCache.Load() - - if ptr != nil { - // Look for stored name. - name, ok := (*ptr)[pc] - if ok { - return name - } - - // Make a clone of existing caller cache map. - cache = make(map[uintptr]string, len(*ptr)+1) - for key, value := range *ptr { - cache[key] = value - } - } else { - // Allocate new caller cache map. - cache = make(map[uintptr]string, 1) - } - - // Calculate caller - // name for PC value. - name := Name(pc) - name = getString(name) - - // Store in map. - cache[pc] = name - - // Attempt to update caller cache map pointer. - if callerCache.CompareAndSwap(ptr, &cache) { - return name - } - } -} - -func getString(key string) string { - var cache map[string]string - for { - // Load string cache map. - ptr := stringCache.Load() - - if ptr != nil { - // Check for existing string. - if str, ok := (*ptr)[key]; ok { - return str - } - - // Make a clone of existing string cache map. - cache = make(map[string]string, len(*ptr)+1) - for key, value := range *ptr { - cache[key] = value - } - } else { - // Allocate new string cache map. - cache = make(map[string]string, 1) - } - - // Store this str. - cache[key] = key - - // Attempt to update string cache map pointer. - if stringCache.CompareAndSwap(ptr, &cache) { - return key - } - } -} |
