| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package trace_test |
| |
| import ( |
| "context" |
| "io" |
| . "runtime/trace" |
| "strings" |
| "testing" |
| ) |
| |
| func TestStartRegionLongString(t *testing.T) { |
| // Regression test: a region name longer than the trace region |
| // allocator's block size (~64KB) used to crash with |
| // "traceRegion: alloc too large" because traceStringTable.put |
| // inserted the full string into the trace map before truncation. |
| Start(io.Discard) |
| defer Stop() |
| |
| big := strings.Repeat("x", 70_000) |
| StartRegion(context.Background(), big).End() |
| } |
| |
| func BenchmarkStartRegion(b *testing.B) { |
| b.ReportAllocs() |
| ctx, task := NewTask(context.Background(), "benchmark") |
| defer task.End() |
| |
| b.RunParallel(func(pb *testing.PB) { |
| for pb.Next() { |
| StartRegion(ctx, "region").End() |
| } |
| }) |
| } |
| |
| func BenchmarkNewTask(b *testing.B) { |
| b.ReportAllocs() |
| pctx, task := NewTask(context.Background(), "benchmark") |
| defer task.End() |
| |
| b.RunParallel(func(pb *testing.PB) { |
| for pb.Next() { |
| _, task := NewTask(pctx, "task") |
| task.End() |
| } |
| }) |
| } |
| |
| func BenchmarkLog(b *testing.B) { |
| b.ReportAllocs() |
| |
| Start(io.Discard) |
| defer Stop() |
| |
| ctx := context.Background() |
| for b.Loop() { |
| Log(ctx, "", "") |
| } |
| } |