MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / mi_printf_amount

Function mi_printf_amount

system/lib/mimalloc/src/stats.c:145–171  ·  view source on GitHub ↗

unit > 0 : size in binary bytes unit == 0: count as decimal unit < 0 : count in binary

Source from the content-addressed store, hash-verified

143// unit == 0: count as decimal
144// unit < 0 : count in binary
145static void mi_printf_amount(int64_t n, int64_t unit, mi_output_fun* out, void* arg, const char* fmt) {
146 char buf[32]; _mi_memzero_var(buf);
147 int len = 32;
148 const char* suffix = (unit <= 0 ? " " : "B");
149 const int64_t base = (unit == 0 ? 1000 : 1024);
150 if (unit>0) n *= unit;
151
152 const int64_t pos = (n < 0 ? -n : n);
153 if (pos < base) {
154 if (n!=1 || suffix[0] != 'B') { // skip printing 1 B for the unit column
155 _mi_snprintf(buf, len, "%lld %-3s", (long long)n, (n==0 ? "" : suffix));
156 }
157 }
158 else {
159 int64_t divider = base;
160 const char* magnitude = "K";
161 if (pos >= divider*base) { divider *= base; magnitude = "M"; }
162 if (pos >= divider*base) { divider *= base; magnitude = "G"; }
163 const int64_t tens = (n / (divider/10));
164 const long whole = (long)(tens/10);
165 const long frac1 = (long)(tens%10);
166 char unitdesc[8];
167 _mi_snprintf(unitdesc, 8, "%s%s%s", magnitude, (base==1024 ? "i" : ""), suffix);
168 _mi_snprintf(buf, len, "%ld.%ld %-3s", whole, (frac1 < 0 ? -frac1 : frac1), unitdesc);
169 }
170 _mi_fprintf(out, arg, (fmt==NULL ? "%12s" : fmt), buf);
171}
172
173
174static void mi_print_amount(int64_t n, int64_t unit, mi_output_fun* out, void* arg) {

Callers 2

mi_print_amountFunction · 0.85

Calls 2

_mi_snprintfFunction · 0.85
_mi_fprintfFunction · 0.85

Tested by

no test coverage detected