...
Run Format

Source file src/internal/trace/writer.go

Documentation: internal/trace

  package trace
  
  import "bytes"
  
  // Writer is a test trace writer.
  type Writer struct {
  	bytes.Buffer
  }
  
  func NewWriter() *Writer {
  	w := new(Writer)
  	w.Write([]byte("go 1.9 trace\x00\x00\x00\x00"))
  	return w
  }
  
  // Emit writes an event record to the trace.
  // See Event types for valid types and required arguments.
  func (w *Writer) Emit(typ byte, args ...uint64) {
  	nargs := byte(len(args)) - 1
  	if nargs > 3 {
  		nargs = 3
  	}
  	buf := []byte{typ | nargs<<6}
  	if nargs == 3 {
  		buf = append(buf, 0)
  	}
  	for _, a := range args {
  		buf = appendVarint(buf, a)
  	}
  	if nargs == 3 {
  		buf[1] = byte(len(buf) - 2)
  	}
  	n, err := w.Write(buf)
  	if n != len(buf) || err != nil {
  		panic("failed to write")
  	}
  }
  
  func appendVarint(buf []byte, v uint64) []byte {
  	for ; v >= 0x80; v >>= 7 {
  		buf = append(buf, 0x80|byte(v))
  	}
  	buf = append(buf, byte(v))
  	return buf
  }
  

View as plain text