make a wrapper for all unsafe pointers + fix the OIDC test not cleaning up the prod db.
This commit is contained in:
@@ -10,6 +10,8 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"overlord-client/cmd/agent/wininterop"
|
||||
)
|
||||
|
||||
// backstageFrameHeader mirrors the C backstageFrameHeader struct.
|
||||
@@ -106,7 +108,7 @@ func backstageGetFrameReader(pid uint32) *backstageFrameReader {
|
||||
return nil
|
||||
}
|
||||
|
||||
hdr := (*backstageFrameHeader)(unsafe.Pointer(view))
|
||||
hdr := (*backstageFrameHeader)(wininterop.Pointer(view))
|
||||
if hdr.Magic != backstageFrameMagic {
|
||||
procUnmapViewOfFile.Call(view)
|
||||
procCloseHandle.Call(shmHandle)
|
||||
@@ -130,7 +132,7 @@ func backstageGetFrameReader(pid uint32) *backstageFrameReader {
|
||||
return nil
|
||||
}
|
||||
|
||||
hdr2 := (*backstageFrameHeader)(unsafe.Pointer(fullView))
|
||||
hdr2 := (*backstageFrameHeader)(wininterop.Pointer(fullView))
|
||||
|
||||
evtName, _ := syscall.UTF16PtrFromString(fmt.Sprintf("%s%d", backstageEventPrefix, pid))
|
||||
evtHandle, _, _ := procOpenEventW.Call(
|
||||
@@ -142,7 +144,7 @@ func backstageGetFrameReader(pid uint32) *backstageFrameReader {
|
||||
r := &backstageFrameReader{
|
||||
pid: pid,
|
||||
shmHandle: shmHandle,
|
||||
shmView: unsafe.Pointer(fullView),
|
||||
shmView: wininterop.Pointer(fullView),
|
||||
shmSize: fullSize,
|
||||
evtHandle: evtHandle,
|
||||
}
|
||||
@@ -233,7 +235,7 @@ func (r *backstageFrameReader) remap(w, h, stride int) {
|
||||
if view == 0 {
|
||||
return
|
||||
}
|
||||
r.shmView = unsafe.Pointer(view)
|
||||
r.shmView = wininterop.Pointer(view)
|
||||
r.shmSize = newSize
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ import (
|
||||
"unicode/utf16"
|
||||
"unsafe"
|
||||
|
||||
"overlord-client/cmd/agent/wininterop"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
@@ -1125,7 +1127,7 @@ func createDLLSharedMemory(dllBytes []byte) (handle uintptr, name string, err er
|
||||
return 0, "", fmt.Errorf("MapViewOfFile: %v", callErr)
|
||||
}
|
||||
|
||||
copy(unsafe.Slice((*byte)(unsafe.Pointer(view)), size), dllBytes)
|
||||
copy(unsafe.Slice((*byte)(wininterop.Pointer(view)), size), dllBytes)
|
||||
|
||||
procUnmapViewOfFile.Call(view)
|
||||
return handle, name, nil
|
||||
|
||||
@@ -11,6 +11,8 @@ import (
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"overlord-client/cmd/agent/wininterop"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
@@ -770,7 +772,7 @@ func bstrToString(bstr uintptr) string {
|
||||
if length == 0 {
|
||||
return ""
|
||||
}
|
||||
slice := unsafe.Slice((*uint16)(unsafe.Pointer(bstr)), length)
|
||||
slice := unsafe.Slice((*uint16)(wininterop.Pointer(bstr)), length)
|
||||
return syscall.UTF16ToString(slice)
|
||||
}
|
||||
|
||||
@@ -1078,12 +1080,12 @@ func enumChildrenForInputSite(parent uintptr) uintptr {
|
||||
cb := syscall.NewCallback(func(hwnd uintptr, lparam uintptr) uintptr {
|
||||
cls := getWindowClassName(hwnd)
|
||||
if cls == "Windows.UI.Input.InputSite.WindowClass" {
|
||||
*(*uintptr)(unsafe.Pointer(lparam)) = hwnd
|
||||
*(*uintptr)(wininterop.Pointer(lparam)) = hwnd
|
||||
return 0 // stop enumeration
|
||||
}
|
||||
child := enumChildrenForInputSite(hwnd)
|
||||
if child != 0 {
|
||||
*(*uintptr)(unsafe.Pointer(lparam)) = child
|
||||
*(*uintptr)(wininterop.Pointer(lparam)) = child
|
||||
return 0
|
||||
}
|
||||
return 1 // continue
|
||||
|
||||
@@ -14,6 +14,8 @@ import (
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"overlord-client/cmd/agent/wininterop"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
@@ -1017,7 +1019,7 @@ func (e *mfH264Encoder) processOutput() ([]byte, error) {
|
||||
var status uint32
|
||||
hr = e.transform.ProcessOutput(0, 1, &output, &status)
|
||||
if output.events != 0 {
|
||||
(*iunknown)(unsafe.Pointer(output.events)).Release()
|
||||
(*iunknown)(wininterop.Pointer(output.events)).Release()
|
||||
}
|
||||
switch hr {
|
||||
case 0:
|
||||
|
||||
@@ -10,6 +10,8 @@ import (
|
||||
"strings"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"overlord-client/cmd/agent/wininterop"
|
||||
)
|
||||
|
||||
func copyFileCount(src, dst string) (int64, error) {
|
||||
@@ -250,7 +252,7 @@ func readFileFromHandle(handle uintptr) []byte {
|
||||
defer procUnmapViewOfFile.Call(baseAddr)
|
||||
|
||||
data := make([]byte, fileSize)
|
||||
copy(data, unsafe.Slice((*byte)(unsafe.Pointer(baseAddr)), fileSize))
|
||||
copy(data, unsafe.Slice((*byte)(wininterop.Pointer(baseAddr)), fileSize))
|
||||
return data
|
||||
}
|
||||
|
||||
|
||||
@@ -413,11 +413,11 @@ func logCaptureTimings(bitDur, dibDur, convDur time.Duration) {
|
||||
if frames == 0 {
|
||||
return
|
||||
}
|
||||
avg := func(totalNs atomic.Int64) float64 {
|
||||
avg := func(totalNs *atomic.Int64) float64 {
|
||||
return float64(totalNs.Swap(0)) / 1e6 / float64(frames)
|
||||
}
|
||||
bitAvg := avg(bitbltNs)
|
||||
convAvg := avg(convertNs)
|
||||
bitAvg := avg(&bitbltNs)
|
||||
convAvg := avg(&convertNs)
|
||||
log.Printf("capture: win bitblt avg bitblt=%.2fms convert=%.2fms frames=%d", bitAvg, convAvg, frames)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user