profiling/timing: implement execution time profiler

This commit is contained in:
Tamer Tas 2016-09-14 15:49:43 +03:00
parent 418cd23c0a
commit 90f5b5b1a5
2 changed files with 39 additions and 1 deletions

View File

@ -98,7 +98,7 @@ A curated collection of idiomatic design & application patterns for Go language.
| Pattern | Description | Status |
|:-------:|:----------- |:------:|
| [Timing Functions](/profiling/timing.md) | Wraps a function and logs the execution | |
| [Timing Functions](/profiling/timing.md) | Wraps a function and logs the execution | |
## Idioms

38
profiling/timing.md Normal file
View File

@ -0,0 +1,38 @@
# Timing Functions
When optimizing code, sometimes a quick and dirty time measurement is required
as opposed to utilizing profiler tools/frameworks to validate assumptions.
Time measurements can be performed by utilizing `time` package and `defer` statements.
## Implementation
```go
package profile
import (
"time"
"log"
)
func Duration(invocation time.Time, name string) {
elapsed := time.Since(invocation)
log.Printf("%s lasted %s", name, elapsed)
}
```
## Usage
```go
func IntFactorial(x big.Int) *big.Int {
defer profile.Duration(time.Now(), "IntFactorial")
y := big.NewInt(1)
for one := big.NewInt(1); x.Sign() > 0; x.Sub(x, one) {
y.Mul(y, x)
}
return x.Set(y)
}
```