aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/syscall_windows_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-03-18 10:56:23 +0100
committerDmitry Vyukov <dvyukov@google.com>2016-04-09 16:11:41 +0000
commit0435e88a119fd057aa7209591ba3dff122c9f24c (patch)
tree700c7c30bd4e607e5dd6789bfea72d229f52f262 /src/runtime/syscall_windows_test.go
parent9d4efdfd12f47f1ed8ce482ebeeb4d4e30a2dbc6 (diff)
downloadgo-0435e88a119fd057aa7209591ba3dff122c9f24c.tar.gz
go-0435e88a119fd057aa7209591ba3dff122c9f24c.zip
runtime: revert "do not call timeBeginPeriod on windows"
This reverts commit ab4c9298b8185a056ff1152f2c7bd9b38d3d06f3. Sysmon critically depends on system timer resolution for retaking of Ps blocked in system calls. See #14790 for an example of a program where execution time goes from 2ms to 30ms if timeBeginPeriod(1) is not used. We can remove timeBeginPeriod(1) when we support UMS (#7876). Update #14790 Change-Id: I362b56154359b2c52d47f9f2468fe012b481cf6d Reviewed-on: https://go-review.googlesource.com/20834 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Dmitry Vyukov <dvyukov@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Diffstat (limited to 'src/runtime/syscall_windows_test.go')
-rw-r--r--src/runtime/syscall_windows_test.go66
1 files changed, 11 insertions, 55 deletions
diff --git a/src/runtime/syscall_windows_test.go b/src/runtime/syscall_windows_test.go
index ff045338c1..4a10749682 100644
--- a/src/runtime/syscall_windows_test.go
+++ b/src/runtime/syscall_windows_test.go
@@ -622,6 +622,13 @@ uintptr_t cfunc(callback f, uintptr_t n) {
}
}
+func TestTimeBeginPeriod(t *testing.T) {
+ const TIMERR_NOERROR = 0
+ if *runtime.TimeBeginPeriodRetValue != TIMERR_NOERROR {
+ t.Fatalf("timeBeginPeriod failed: it returned %d", *runtime.TimeBeginPeriodRetValue)
+ }
+}
+
// removeOneCPU removes one (any) cpu from affinity mask.
// It returns new affinity mask.
func removeOneCPU(mask uintptr) (uintptr, error) {
@@ -874,21 +881,10 @@ var (
modwinmm = syscall.NewLazyDLL("winmm.dll")
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
- proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod")
- proctimeEndPeriod = modwinmm.NewProc("timeEndPeriod")
-
procCreateEvent = modkernel32.NewProc("CreateEventW")
procSetEvent = modkernel32.NewProc("SetEvent")
)
-func timeBeginPeriod(period uint32) {
- syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0)
-}
-
-func timeEndPeriod(period uint32) {
- syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0)
-}
-
func createEvent() (syscall.Handle, error) {
r0, _, e0 := syscall.Syscall6(procCreateEvent.Addr(), 4, 0, 0, 0, 0, 0, 0)
if r0 == 0 {
@@ -905,7 +901,7 @@ func setEvent(h syscall.Handle) error {
return nil
}
-func benchChanToSyscallPing(b *testing.B) {
+func BenchmarkChanToSyscallPing(b *testing.B) {
n := b.N
ch := make(chan int)
event, err := createEvent()
@@ -927,17 +923,7 @@ func benchChanToSyscallPing(b *testing.B) {
}
}
-func BenchmarkChanToSyscallPing1ms(b *testing.B) {
- timeBeginPeriod(1)
- benchChanToSyscallPing(b)
- timeEndPeriod(1)
-}
-
-func BenchmarkChanToSyscallPing15ms(b *testing.B) {
- benchChanToSyscallPing(b)
-}
-
-func benchSyscallToSyscallPing(b *testing.B) {
+func BenchmarkSyscallToSyscallPing(b *testing.B) {
n := b.N
event1, err := createEvent()
if err != nil {
@@ -965,17 +951,7 @@ func benchSyscallToSyscallPing(b *testing.B) {
}
}
-func BenchmarkSyscallToSyscallPing1ms(b *testing.B) {
- timeBeginPeriod(1)
- benchSyscallToSyscallPing(b)
- timeEndPeriod(1)
-}
-
-func BenchmarkSyscallToSyscallPing15ms(b *testing.B) {
- benchSyscallToSyscallPing(b)
-}
-
-func benchChanToChanPing(b *testing.B) {
+func BenchmarkChanToChanPing(b *testing.B) {
n := b.N
ch1 := make(chan int)
ch2 := make(chan int)
@@ -991,28 +967,8 @@ func benchChanToChanPing(b *testing.B) {
}
}
-func BenchmarkChanToChanPing1ms(b *testing.B) {
- timeBeginPeriod(1)
- benchChanToChanPing(b)
- timeEndPeriod(1)
-}
-
-func BenchmarkChanToChanPing15ms(b *testing.B) {
- benchChanToChanPing(b)
-}
-
-func benchOsYield(b *testing.B) {
+func BenchmarkOsYield(b *testing.B) {
for i := 0; i < b.N; i++ {
runtime.OsYield()
}
}
-
-func BenchmarkOsYield1ms(b *testing.B) {
- timeBeginPeriod(1)
- benchOsYield(b)
- timeEndPeriod(1)
-}
-
-func BenchmarkOsYield15ms(b *testing.B) {
- benchOsYield(b)
-}