Files
obitools4/autodoc/docmd/pkg/obistats/scaler.md
T
Eric Coissac 8c7017a99d ⬆️ version bump to v4.5
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5"
- Update version.txt from 4.29 → .30
(automated by Makefile)
2026-04-13 13:34:53 +02:00

24 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `obistats` Package: Semantic Description
The `obistats` package provides utility functions for **formatting and scaling benchmark measurements** in Go, especially tailored for performance benchmarks (e.g., `go test -bench`). Its core component is the **`Scaler` type**, a function that converts raw numeric values into human-readable, unit-aware strings.
- **`Scaler func(float64) string`**: A function type that formats a numeric measurement (e.g., time, memory usage, throughput) into an appropriately scaled and unit-annotated string.
- **`NewScaler(val float64, unit string) Scaler`**: Dynamically selects the best scaling strategy based on:
- The measurement value (`val`)
- Its unit (e.g., `"ns/op"`, `"MB/s"`, `"B/op"`)
It applies **SI prefixes** (`k`/`M`/`G`/`T`) with adaptive precision (02 decimal places) to ensure readability and consistency across table rows.
- **`timeScaler(ns float64)`**: Specialized scaler for time-based units (`ns/op`, `ns/GC`). It selects optimal unit (s, ms, µs, ns) and precision based on magnitude.
- **`hasBaseUnit(s, unit string) bool`**: Helper to detect if a full unit string (e.g., `"bytes/op"`, `"MB/s"`) includes or matches a base unit.
Key features:
- Supports common Go benchmark units: time (`ns/op`), memory (`B/op`, `bytes/op`), throughput (`MB/s`)
- Ensures consistent formatting across rows (e.g., all values in a row use same scale)
- Avoids unnecessary trailing zeros and uses SI conventions
- Designed for compatibility with internal benchmarking infrastructure (originally from `golang-design/bench`)
Intended use: formatting tables of benchmark results where readability and unit consistency are critical.