event: merge the trace builder into the normal one

Change-Id: I0c4b6f7e1ddf027e6c33a66c6f352038162f6d51
Reviewed-on: https://go-review.googlesource.com/c/exp/+/322829
Trust: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/event/bench/event_test.go b/event/bench/event_test.go
index 7d171a5..e6bc295 100644
--- a/event/bench/event_test.go
+++ b/event/bench/event_test.go
@@ -51,7 +51,7 @@
 
 	eventTrace = Hooks{
 		AStart: func(ctx context.Context, a int) context.Context {
-			ctx, _ = event.Trace(ctx).Start(aMsg)
+			ctx, _ = event.To(ctx).Start(aMsg)
 			event.To(ctx).With(aValue.Of(a)).Annotate()
 			return ctx
 		},
@@ -59,7 +59,7 @@
 			event.To(ctx).End()
 		},
 		BStart: func(ctx context.Context, b string) context.Context {
-			ctx, _ = event.Trace(ctx).Start(bMsg)
+			ctx, _ = event.To(ctx).Start(bMsg)
 			event.To(ctx).With(bValue.Of(b)).Annotate()
 			return ctx
 		},
diff --git a/event/builder.go b/event/builder.go
index 03486fa..9b5e8a0 100644
--- a/event/builder.go
+++ b/event/builder.go
@@ -15,13 +15,8 @@
 
 // Builder is a fluent builder for construction of new events.
 type Builder struct {
-	data *builder
-}
-
-// TraceBuilder is a specialized Builder for construction of new trace events.
-type TraceBuilder struct {
 	ctx  context.Context
-	data *traceBuilder
+	data *builder
 }
 
 // preallocateLabels controls the space reserved for labels in a builder.
@@ -33,24 +28,15 @@
 
 type builder struct {
 	exporter *Exporter
-	ctx      context.Context
 	Event    Event
 	labels   [preallocateLabels]Label
 }
 
 var builderPool = sync.Pool{New: func() interface{} { return &builder{} }}
 
-type traceBuilder struct {
-	exporter *Exporter
-	Event    Event
-	labels   [preallocateLabels]Label
-}
-
-var traceBuilderPool = sync.Pool{New: func() interface{} { return &traceBuilder{} }}
-
 // To initializes a builder from the values stored in a context.
 func To(ctx context.Context) Builder {
-	return Builder{data: newBuilder(ctx)}
+	return Builder{ctx: ctx, data: newBuilder(ctx)}
 }
 
 func newBuilder(ctx context.Context) *builder {
@@ -60,33 +46,18 @@
 	}
 	b := builderPool.Get().(*builder)
 	b.exporter = exporter
-	b.ctx = ctx
 	b.Event.Labels = b.labels[:0]
 	b.Event.Parent = parent
 	return b
 }
 
-// Trace initializes a trace builder from the values stored in a context.
-func Trace(ctx context.Context) TraceBuilder {
-	b := TraceBuilder{ctx: ctx}
-	exporter, parent := fromContext(ctx)
-	if exporter == nil {
-		return b
-	}
-	b.data = traceBuilderPool.Get().(*traceBuilder)
-	b.data.exporter = exporter
-	b.data.Event.Labels = b.data.labels[:0]
-	b.data.Event.Parent = parent
-	return b
-}
-
 // Clone returns a copy of this builder.
 // The two copies can be independently delivered.
 func (b Builder) Clone() Builder {
 	if b.data == nil {
 		return b
 	}
-	clone := Builder{data: builderPool.Get().(*builder)}
+	clone := Builder{ctx: b.ctx, data: builderPool.Get().(*builder)}
 	*clone.data = *b.data
 	if len(b.data.Event.Labels) == 0 || &b.data.labels[0] == &b.data.Event.Labels[0] {
 		clone.data.Event.Labels = clone.data.labels[:len(b.data.Event.Labels)]
@@ -153,7 +124,7 @@
 	defer b.data.exporter.mu.Unlock()
 	b.data.Event.Message = message
 	b.data.exporter.prepare(&b.data.Event)
-	b.data.exporter.log.Log(b.data.ctx, &b.data.Event)
+	b.data.exporter.log.Log(b.ctx, &b.data.Event)
 }
 
 // Metric is a helper that calls Deliver with MetricKind.
@@ -165,7 +136,7 @@
 		b.data.exporter.mu.Lock()
 		defer b.data.exporter.mu.Unlock()
 		b.data.exporter.prepare(&b.data.Event)
-		b.data.exporter.metric.Metric(b.data.ctx, &b.data.Event)
+		b.data.exporter.metric.Metric(b.ctx, &b.data.Event)
 	}
 	b.done()
 }
@@ -179,7 +150,7 @@
 		b.data.exporter.mu.Lock()
 		defer b.data.exporter.mu.Unlock()
 		b.data.exporter.prepare(&b.data.Event)
-		b.data.exporter.annotate.Annotate(b.data.ctx, &b.data.Event)
+		b.data.exporter.annotate.Annotate(b.ctx, &b.data.Event)
 	}
 	b.done()
 }
@@ -193,7 +164,7 @@
 		b.data.exporter.mu.Lock()
 		defer b.data.exporter.mu.Unlock()
 		b.data.exporter.prepare(&b.data.Event)
-		b.data.exporter.trace.End(b.data.ctx, &b.data.Event)
+		b.data.exporter.trace.End(b.ctx, &b.data.Event)
 	}
 	b.done()
 }
@@ -213,32 +184,12 @@
 	builderPool.Put(b.data)
 }
 
-// WithAll adds all the supplied labels to the event being constructed.
-func (b TraceBuilder) WithAll(labels ...Label) TraceBuilder {
-	if b.data == nil || len(labels) == 0 {
-		return b
-	}
-	if len(b.data.Event.Labels) == 0 {
-		b.data.Event.Labels = labels
-	} else {
-		b.data.Event.Labels = append(b.data.Event.Labels, labels...)
-	}
-	return b
-}
-
-func (b TraceBuilder) At(t time.Time) TraceBuilder {
-	if b.data != nil {
-		b.data.Event.At = t
-	}
-	return b
-}
-
 // Start delivers a start event with the given name and labels.
 // Its second return value is a function that should be called to deliver the
 // matching end event.
 // All events created from the returned context will have this start event
 // as their parent.
-func (b TraceBuilder) Start(name string) (context.Context, func()) {
+func (b Builder) Start(name string) (context.Context, func()) {
 	if b.data == nil {
 		return b.ctx, func() {}
 	}
@@ -253,18 +204,13 @@
 		eb.data = builderPool.Get().(*builder)
 		eb.data.exporter = b.data.exporter
 		eb.data.Event.Parent = b.data.Event.ID
-		end = eb.End
 		// and now deliver the start event
 		b.data.Event.Message = name
 		ctx = newContext(ctx, b.data.exporter, b.data.Event.ID)
 		ctx = b.data.exporter.trace.Start(ctx, &b.data.Event)
-		eb.data.ctx = ctx
+		eb.ctx = ctx
+		end = eb.End
 	}
 	b.done()
 	return ctx, end
 }
-
-func (b TraceBuilder) done() {
-	*b.data = traceBuilder{}
-	traceBuilderPool.Put(b.data)
-}
diff --git a/event/builder_test.go b/event/builder_test.go
index ddab645..a9b23e4 100644
--- a/event/builder_test.go
+++ b/event/builder_test.go
@@ -66,7 +66,7 @@
 	// Verify that the context returned from the handler is also returned from Start,
 	// and is the context passed to End.
 	ctx := event.WithExporter(context.Background(), event.NewExporter(&testTraceHandler{t}))
-	ctx, end := event.Trace(ctx).Start("s")
+	ctx, end := event.To(ctx).Start("s")
 	val := ctx.Value("x")
 	if val != 1 {
 		t.Fatal("context not returned from Start")
diff --git a/event/event_test.go b/event/event_test.go
index 2f796f3..7085e41 100644
--- a/event/event_test.go
+++ b/event/event_test.go
@@ -49,7 +49,7 @@
 	}, {
 		name: "span",
 		events: func(ctx context.Context) {
-			ctx, end := event.Trace(ctx).Start("span")
+			ctx, end := event.To(ctx).Start("span")
 			end()
 		},
 		expect: `
@@ -58,9 +58,9 @@
 `}, {
 		name: "span nested",
 		events: func(ctx context.Context) {
-			ctx, end := event.Trace(ctx).Start("parent")
+			ctx, end := event.To(ctx).Start("parent")
 			defer end()
-			child, end2 := event.Trace(ctx).Start("child")
+			child, end2 := event.To(ctx).Start("child")
 			defer end2()
 			event.To(child).Log("message")
 		},