mirror of
https://github.com/golang/go
synced 2024-11-16 22:24:47 -07:00
runtime: use cgo_import_dynamic for QueryPerformanceCounter
QueryPerformanceCounter is available since Windows 2000 [1], so there is no need to conditionally load it. Even if the Go runtime doesn't eventually use it, it is still simpler and faster to just tell the Windows loader to load it, instead of doing it ourselves. [1]: https://learn.microsoft.com/en-us/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter Change-Id: Ied3b54a6a8fe3b8d51aefab0fe483b3a193b5522 Reviewed-on: https://go-review.googlesource.com/c/go/+/532915 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Quim Muntal <quimmuntal@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
parent
a30967f4ce
commit
ab2e3ce77c
@ -43,6 +43,7 @@ const (
|
||||
//go:cgo_import_dynamic runtime._LoadLibraryExW LoadLibraryExW%3 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._LoadLibraryW LoadLibraryW%1 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._PostQueuedCompletionStatus PostQueuedCompletionStatus%4 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._QueryPerformanceCounter QueryPerformanceCounter%1 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._RaiseFailFastException RaiseFailFastException%3 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._ResumeThread ResumeThread%1 "kernel32.dll"
|
||||
//go:cgo_import_dynamic runtime._RtlLookupFunctionEntry RtlLookupFunctionEntry%3 "kernel32.dll"
|
||||
@ -151,7 +152,6 @@ var (
|
||||
|
||||
var (
|
||||
advapi32dll = [...]uint16{'a', 'd', 'v', 'a', 'p', 'i', '3', '2', '.', 'd', 'l', 'l', 0}
|
||||
kernel32dll = [...]uint16{'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l', 0}
|
||||
ntdlldll = [...]uint16{'n', 't', 'd', 'l', 'l', '.', 'd', 'l', 'l', 0}
|
||||
powrprofdll = [...]uint16{'p', 'o', 'w', 'r', 'p', 'r', 'o', 'f', '.', 'd', 'l', 'l', 0}
|
||||
winmmdll = [...]uint16{'w', 'i', 'n', 'm', 'm', '.', 'd', 'l', 'l', 0}
|
||||
@ -250,14 +250,7 @@ func windowsLoadSystemLib(name []uint16) uintptr {
|
||||
return stdcall3(_LoadLibraryExW, uintptr(unsafe.Pointer(&name[0])), 0, _LOAD_LIBRARY_SEARCH_SYSTEM32)
|
||||
}
|
||||
|
||||
const haveCputicksAsm = GOARCH == "386" || GOARCH == "amd64"
|
||||
|
||||
func loadOptionalSyscalls() {
|
||||
k32 := windowsLoadSystemLib(kernel32dll[:])
|
||||
if k32 == 0 {
|
||||
throw("kernel32.dll not found")
|
||||
}
|
||||
|
||||
a32 := windowsLoadSystemLib(advapi32dll[:])
|
||||
if a32 == 0 {
|
||||
throw("advapi32.dll not found")
|
||||
@ -271,13 +264,6 @@ func loadOptionalSyscalls() {
|
||||
_RtlGetCurrentPeb = windowsFindfunc(n32, []byte("RtlGetCurrentPeb\000"))
|
||||
_RtlGetNtVersionNumbers = windowsFindfunc(n32, []byte("RtlGetNtVersionNumbers\000"))
|
||||
|
||||
if !haveCputicksAsm {
|
||||
_QueryPerformanceCounter = windowsFindfunc(k32, []byte("QueryPerformanceCounter\000"))
|
||||
if _QueryPerformanceCounter == nil {
|
||||
throw("could not find QPC syscalls")
|
||||
}
|
||||
}
|
||||
|
||||
m32 := windowsLoadSystemLib(winmmdll[:])
|
||||
if m32 == 0 {
|
||||
throw("winmm.dll not found")
|
||||
|
Loading…
Reference in New Issue
Block a user