From bf6d6a29c0eff6306fc1f16e23882f60363dd039 Mon Sep 17 00:00:00 2001 From: jflyfox Date: Tue, 19 Jan 2021 11:27:23 +0800 Subject: [PATCH] improve package gtmer --- os/gtimer/gtimer_loop.go | 12 ++++++------ ...er_z_unit_0_test.go => gtimer_z_unit_api_test.go} | 0 ..._z_unit_2_test.go => gtimer_z_unit_entry_test.go} | 0 ..._test.go => gtimer_z_unit_timer_internal_test.go} | 12 +++++++----- ..._z_unit_1_test.go => gtimer_z_unit_timer_test.go} | 0 5 files changed, 13 insertions(+), 11 deletions(-) rename os/gtimer/{gtimer_z_unit_0_test.go => gtimer_z_unit_api_test.go} (100%) rename os/gtimer/{gtimer_z_unit_2_test.go => gtimer_z_unit_entry_test.go} (100%) rename os/gtimer/{gtimer_z_unit_3_test.go => gtimer_z_unit_timer_internal_test.go} (85%) rename os/gtimer/{gtimer_z_unit_1_test.go => gtimer_z_unit_timer_test.go} (100%) diff --git a/os/gtimer/gtimer_loop.go b/os/gtimer/gtimer_loop.go index cfd936ee4..725f6de46 100644 --- a/os/gtimer/gtimer_loop.go +++ b/os/gtimer/gtimer_loop.go @@ -45,14 +45,14 @@ func (w *wheel) start() { // according to its leftover interval in milliseconds. func (w *wheel) proceed() { var ( - n = w.ticks.Add(1) - l = w.slots[int(n%w.number)] - length = l.Len() - nowMs = w.timer.nowFunc().UnixNano() / 1e6 + nowTicks = w.ticks.Add(1) + list = w.slots[int(nowTicks%w.number)] + length = list.Len() + nowMs = w.timer.nowFunc().UnixNano() / 1e6 ) if length > 0 { go func(l *glist.List, nowTicks int64) { - entry := (*Entry)(nil) + var entry *Entry for i := length; i > 0; i-- { if v := l.PopFront(); v == nil { break @@ -88,6 +88,6 @@ func (w *wheel) proceed() { entry.wheel.timer.doAddEntryByParent(!runnable, nowMs, entry.installIntervalMs, entry) } } - }(l, n) + }(list, nowTicks) } } diff --git a/os/gtimer/gtimer_z_unit_0_test.go b/os/gtimer/gtimer_z_unit_api_test.go similarity index 100% rename from os/gtimer/gtimer_z_unit_0_test.go rename to os/gtimer/gtimer_z_unit_api_test.go diff --git a/os/gtimer/gtimer_z_unit_2_test.go b/os/gtimer/gtimer_z_unit_entry_test.go similarity index 100% rename from os/gtimer/gtimer_z_unit_2_test.go rename to os/gtimer/gtimer_z_unit_entry_test.go diff --git a/os/gtimer/gtimer_z_unit_3_test.go b/os/gtimer/gtimer_z_unit_timer_internal_test.go similarity index 85% rename from os/gtimer/gtimer_z_unit_3_test.go rename to os/gtimer/gtimer_z_unit_timer_internal_test.go index 394c3bdca..2d30c4c0f 100644 --- a/os/gtimer/gtimer_z_unit_3_test.go +++ b/os/gtimer/gtimer_z_unit_timer_internal_test.go @@ -7,15 +7,20 @@ package gtimer import ( + "github.com/gogf/gf/container/gtype" "github.com/gogf/gf/test/gtest" "testing" "time" ) -func TestTimer(t *testing.T) { +func TestTimer_Proceed(t *testing.T) { gtest.C(t, func(t *gtest.T) { - timer := doNewWithoutAutoStart(10, 60*time.Millisecond, 6) + index := gtype.NewInt() slice := make([]int, 0) + timer := doNewWithoutAutoStart(10, 60*time.Millisecond, 6) + timer.nowFunc = func() time.Time { + return time.Now().Add(time.Duration(index.Add(1)) * time.Millisecond * 60) + } timer.AddOnce(2*time.Second, func() { slice = append(slice, 1) }) @@ -44,9 +49,6 @@ func TestTimer(t *testing.T) { slice = append(slice, 9) }) for i := 0; i < 2000000; i++ { - timer.nowFunc = func() time.Time { - return time.Now().Add(time.Duration(i) * time.Millisecond * 60) - } timer.wheels[0].proceed() time.Sleep(time.Microsecond) } diff --git a/os/gtimer/gtimer_z_unit_1_test.go b/os/gtimer/gtimer_z_unit_timer_test.go similarity index 100% rename from os/gtimer/gtimer_z_unit_1_test.go rename to os/gtimer/gtimer_z_unit_timer_test.go