Codebase list golang-github-go-logr-logr / 1b9274c
funcr: Use WriteByte instead of WriteRune We know all these inputs are single-byte, so the overhead of WriteRune is wasted. Before: ``` BenchmarkFuncrLogInfoOneArg-6 2006905 597.2 ns/op BenchmarkFuncrJSONLogInfoOneArg-6 1728062 694.4 ns/op BenchmarkFuncrLogInfoSeveralArgs-6 973250 1239 ns/op BenchmarkFuncrJSONLogInfoSeveralArgs-6 874827 1347 ns/op BenchmarkFuncrLogV0Info-6 977566 1231 ns/op BenchmarkFuncrJSONLogV0Info-6 891244 1345 ns/op BenchmarkFuncrLogV9Info-6 14962072 80.68 ns/op BenchmarkFuncrJSONLogV9Info-6 14989345 80.21 ns/op BenchmarkFuncrLogError-6 815452 1469 ns/op BenchmarkFuncrJSONLogError-6 754250 1587 ns/op ``` After: ``` BenchmarkFuncrLogInfoOneArg-6 2062580 582.6 ns/op BenchmarkFuncrJSONLogInfoOneArg-6 1790674 669.6 ns/op BenchmarkFuncrLogInfoSeveralArgs-6 1000000 1124 ns/op BenchmarkFuncrJSONLogInfoSeveralArgs-6 949893 1255 ns/op BenchmarkFuncrLogV0Info-6 1000000 1153 ns/op BenchmarkFuncrJSONLogV0Info-6 953002 1259 ns/op BenchmarkFuncrLogV9Info-6 14849647 81.30 ns/op BenchmarkFuncrJSONLogV9Info-6 14510906 81.32 ns/op BenchmarkFuncrLogError-6 857920 1389 ns/op BenchmarkFuncrJSONLogError-6 803823 1499 ns/op ``` Tim Hockin 2 years ago
1 changed file(s) with 28 addition(s) and 28 deletion(s). Raw diff Collapse all Expand all
196196 // Empirically bytes.Buffer is faster than strings.Builder for this.
197197 buf := bytes.NewBuffer(make([]byte, 0, 1024))
198198 if f.outputFormat == outputJSON {
199 buf.WriteRune('{')
199 buf.WriteByte('{')
200200 }
201201 f.flatten(buf, builtins, false)
202202 continuing := len(builtins) > 0
203203 if len(f.valuesStr) > 0 {
204204 if continuing {
205205 if f.outputFormat == outputJSON {
206 buf.WriteRune(',')
206 buf.WriteByte(',')
207207 } else {
208 buf.WriteRune(' ')
208 buf.WriteByte(' ')
209209 }
210210 }
211211 continuing = true
213213 }
214214 f.flatten(buf, args, continuing)
215215 if f.outputFormat == outputJSON {
216 buf.WriteRune('}')
216 buf.WriteByte('}')
217217 }
218218 return buf.String()
219219 }
235235
236236 if i > 0 || continuing {
237237 if f.outputFormat == outputJSON {
238 buf.WriteRune(',')
238 buf.WriteByte(',')
239239 } else {
240240 // In theory the format could be something we don't understand. In
241241 // practice, we control it, so it won't
242 buf.WriteRune(' ')
243 }
244 }
245 buf.WriteRune('"')
242 buf.WriteByte(' ')
243 }
244 }
245 buf.WriteByte('"')
246246 buf.WriteString(k)
247 buf.WriteRune('"')
247 buf.WriteByte('"')
248248 if f.outputFormat == outputJSON {
249 buf.WriteRune(':')
249 buf.WriteByte(':')
250250 } else {
251 buf.WriteRune('=')
251 buf.WriteByte('=')
252252 }
253253 buf.WriteString(f.pretty(v))
254254 }
349349 case reflect.Complex128:
350350 return `"` + strconv.FormatComplex(v.Complex(), 'f', -1, 128) + `"`
351351 case reflect.Struct:
352 buf.WriteRune('{')
352 buf.WriteByte('{')
353353 for i := 0; i < t.NumField(); i++ {
354354 fld := t.Field(i)
355355 if fld.PkgPath != "" {
357357 continue
358358 }
359359 if i > 0 {
360 buf.WriteRune(',')
361 }
362 buf.WriteRune('"')
360 buf.WriteByte(',')
361 }
362 buf.WriteByte('"')
363363 name := fld.Name
364364 if tag, found := fld.Tag.Lookup("json"); found {
365365 if comma := strings.Index(tag, ","); comma != -1 {
369369 }
370370 }
371371 buf.WriteString(name)
372 buf.WriteRune('"')
373 buf.WriteRune(':')
372 buf.WriteByte('"')
373 buf.WriteByte(':')
374374 buf.WriteString(f.pretty(v.Field(i).Interface()))
375375 }
376 buf.WriteRune('}')
376 buf.WriteByte('}')
377377 return buf.String()
378378 case reflect.Slice, reflect.Array:
379 buf.WriteRune('[')
379 buf.WriteByte('[')
380380 for i := 0; i < v.Len(); i++ {
381381 if i > 0 {
382 buf.WriteRune(',')
382 buf.WriteByte(',')
383383 }
384384 e := v.Index(i)
385385 buf.WriteString(f.pretty(e.Interface()))
386386 }
387 buf.WriteRune(']')
387 buf.WriteByte(']')
388388 return buf.String()
389389 case reflect.Map:
390 buf.WriteRune('{')
390 buf.WriteByte('{')
391391 // This does not sort the map keys, for best perf.
392392 it := v.MapRange()
393393 i := 0
394394 for it.Next() {
395395 if i > 0 {
396 buf.WriteRune(',')
396 buf.WriteByte(',')
397397 }
398398 // JSON only does string keys.
399 buf.WriteRune('"')
399 buf.WriteByte('"')
400400 buf.WriteString(f.prettyWithFlags(it.Key().Interface(), flagRawString))
401 buf.WriteRune('"')
402 buf.WriteRune(':')
401 buf.WriteByte('"')
402 buf.WriteByte(':')
403403 buf.WriteString(f.pretty(it.Value().Interface()))
404404 i++
405405 }
406 buf.WriteRune('}')
406 buf.WriteByte('}')
407407 return buf.String()
408408 case reflect.Ptr, reflect.Interface:
409409 if v.IsNil() {