stream_profile.go
func Profile(w io.Writer, r io.Reader) (pw io.Writer, pr io.Reader, done func() TimeProfile) {
	return profile(clock.New(), w, r)
}
func Profile(w io.Writer, r io.Reader) (pw io.Writer, pr io.Reader, done func() TimeProfile) {
	return profile(clock.New(), w, r)
}
func Profile ( w io . Writer , r io . Reader ) ( pw io . Writer , pr io . Reader , done func ( ) TimeProfile ) { return profile ( clock . New ( ) , w , r ) }
// Profile will wrap a writer and reader pair and profile where
// time is spent: writing or reading. The result is returned when
// the `done` func is called. The `done` func can be called multiple
// times.
//
// There is a small performance overhead of ~µs per Read/Write call.
// This is negligible in most I/O workloads. If the overhead is too
// much for your needs, use the `ProfileSample` call.
Profile will wrap a writer and reader pair and profile where time is spent : writing or reading . The result is returned when the done func is called . The done func can be called multiple times . There is a small performance overhead of ~µs per Read / Write call . This is negligible in most I / O workloads . If the overhead is too much for your needs use the ProfileSample call .