mirror of https://github.com/golang/go.git
runtime: use QPC to implement cputicks() on windows/arm
Tracing uses cputicks() to generate trace event timestamps. cputicks() is expected to be a high resolution clock source. On Windows/ARM, call QueryPerformanceCounter() which is the highest resolution clock source available. Updates #26148 Change-Id: I987fa556060b3d60c02f07b87b9e6320b9b026e2 Reviewed-on: https://go-review.googlesource.com/c/154762 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
d0f8a7517a
commit
84066f1b0b
|
|
@ -198,6 +198,13 @@ func loadOptionalSyscalls() {
|
||||||
}
|
}
|
||||||
_NtWaitForSingleObject = windowsFindfunc(n32, []byte("NtWaitForSingleObject\000"))
|
_NtWaitForSingleObject = windowsFindfunc(n32, []byte("NtWaitForSingleObject\000"))
|
||||||
|
|
||||||
|
if GOARCH == "arm" {
|
||||||
|
_QueryPerformanceCounter = windowsFindfunc(k32, []byte("QueryPerformanceCounter\000"))
|
||||||
|
if _QueryPerformanceCounter == nil {
|
||||||
|
throw("could not find QPC syscalls")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if windowsFindfunc(n32, []byte("wine_get_version\000")) != nil {
|
if windowsFindfunc(n32, []byte("wine_get_version\000")) != nil {
|
||||||
// running on Wine
|
// running on Wine
|
||||||
initWine(k32)
|
initWine(k32)
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,13 @@
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
func cputicks() int64 {
|
func cputicks() int64 {
|
||||||
return nanotime()
|
var counter int64
|
||||||
|
stdcall1(_QueryPerformanceCounter, uintptr(unsafe.Pointer(&counter)))
|
||||||
|
return counter
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkgoarm() {
|
func checkgoarm() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue