diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/fasttime.go | 41 | ||||
-rw-r--r-- | util/fasttime_test.go | 47 |
2 files changed, 0 insertions, 88 deletions
diff --git a/util/fasttime.go b/util/fasttime.go deleted file mode 100644 index f1a81333..00000000 --- a/util/fasttime.go +++ /dev/null @@ -1,41 +0,0 @@ -package util - -import ( - "sync/atomic" - "time" -) - -// FastTime provides current unix time using specified resolution with reduced number of syscalls. -type FastTime struct { - last int64 - ticker *time.Ticker -} - -// NewFastTime returns new time provider with given resolution. -func NewFastTime(resolution time.Duration) *FastTime { - ft := &FastTime{ - last: time.Now().UnixNano(), - ticker: time.NewTicker(resolution), - } - - go ft.run() - - return ft -} - -// Stop ticking. -func (ft *FastTime) Stop() { - ft.ticker.Stop() -} - -// UnixNano returns current timestamps. Value might be delayed after current time by specified resolution. -func (ft *FastTime) UnixNano() int64 { - return atomic.LoadInt64(&ft.last) -} - -// consume time values over given resolution. -func (ft *FastTime) run() { - for range ft.ticker.C { - atomic.StoreInt64(&ft.last, time.Now().UnixNano()) - } -} diff --git a/util/fasttime_test.go b/util/fasttime_test.go deleted file mode 100644 index c8ff0e13..00000000 --- a/util/fasttime_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package util - -import ( - "github.com/stretchr/testify/assert" - "testing" - "time" -) - -func TestFTime_UnixNano(t *testing.T) { - ft := NewFastTime(time.Millisecond) - defer ft.Stop() - - var d int64 - - d = time.Now().UnixNano() - ft.UnixNano() - - assert.True(t, d >= 0) - assert.True(t, d <= int64(time.Millisecond*2)) - - time.Sleep(time.Millisecond * 100) - d = time.Now().UnixNano() - ft.UnixNano() - - assert.True(t, d >= 0) - assert.True(t, d <= int64(time.Millisecond*2)) -} - -func Benchmark_FastTime(b *testing.B) { - ft := NewFastTime(time.Microsecond) - defer ft.Stop() - - b.ReportAllocs() - - for n := 0; n < b.N; n++ { - _ = ft.UnixNano() - } -} - -func Benchmark_Time(b *testing.B) { - ft := NewFastTime(time.Microsecond) - defer ft.Stop() - - b.ReportAllocs() - - for n := 0; n < b.N; n++ { - _ = time.Now().UnixNano() - } -} |