]> Cypherpunks repositories - gostls13.git/commit
runtime/trace: implement annotation API
authorHana Kim <hakim@google.com>
Tue, 5 Dec 2017 23:02:10 +0000 (18:02 -0500)
committerHyang-Ah Hana Kim <hyangah@gmail.com>
Thu, 15 Feb 2018 18:54:14 +0000 (18:54 +0000)
commit6977a3b257dbf28494f43539908e65b229c315d3
tree4c1ae2e12232d3e0622b293745e8a52d53f9aa6c
parent32d1cd33c7b93267d371baa7206aed6bbd236d00
runtime/trace: implement annotation API

This implements the annotation API proposed in golang.org/cl/63274.

traceString is updated to protect the string map with trace.stringsLock
because the assumption that traceString is called by a single goroutine
(either at the beginning of tracing and at the end of tracing when
dumping all the symbols and function names) is no longer true.

traceString is used by the annotation apis (NewContext, StartSpan, Log)
to register frequently appearing strings (task and span names, and log
keys) after this change.

NewContext -> one or two records (EvString, EvUserTaskCreate)
end function -> one record (EvUserTaskEnd)
StartSpan -> one or two records (EvString, EvUserSpan)
span end function -> one or two records (EvString, EvUserSpan)
Log -> one or two records (EvString, EvUserLog)

EvUserLog record is of the typical record format written by traceEvent
except that it is followed by bytes that represents the value string.

In addition to runtime/trace change, this change includes
corresponding changes in internal/trace to parse the new record types.

Future work to improve efficiency:
  More efficient unique task id generation instead of atomic. (per-P
  counter).
  Instead of a centralized trace.stringsLock, consider using per-P
  string cache or something more efficient.

R=go1.11

Change-Id: Iec9276c6c51e5be441ccd52dec270f1e3b153970
Reviewed-on: https://go-review.googlesource.com/71690
Reviewed-by: Austin Clements <austin@google.com>
src/internal/trace/parser.go
src/runtime/trace.go
src/runtime/trace/annotation.go
src/runtime/trace/annotation_test.go [new file with mode: 0644]