65 lines
2.3 KiB
Go
65 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
)
|
|
|
|
func profileSection(section func()) uint64 {
|
|
start := sdl.GetTicks64()
|
|
section()
|
|
end := sdl.GetTicks64()
|
|
return end - start
|
|
}
|
|
|
|
func logProfilingInfo(handleEventsTime, renderTime, scaleTime, frameTime, frameCount uint64) {
|
|
floatFrame := float64(frameCount)
|
|
fmt.Printf("Average handleEvents time: %f ms\n", float64(handleEventsTime)/floatFrame)
|
|
fmt.Printf("Average render time: %f ms\n", float64(renderTime)/floatFrame)
|
|
fmt.Printf("Average scaling time: %f ms\n", float64(scaleTime)/floatFrame)
|
|
fmt.Printf("Average frame time: %f ms\n", float64(frameTime)/floatFrame)
|
|
|
|
fmt.Print("\n")
|
|
}
|
|
|
|
func logMapProfilingInfo(renderTime, scaleTime, frameTime, totalGameLogicCatchUp, totalNormalGameLogic, totalTicking, totalRemotePlayerUpdate, tickCount, frameCount uint64) {
|
|
floatFrame := float64(frameCount)
|
|
floatTick := float64(tickCount)
|
|
fmt.Printf("Average map render time: %f ms\n", float64(renderTime)/floatFrame)
|
|
fmt.Printf("Average map scaling time: %f ms\n", float64(scaleTime)/floatFrame)
|
|
fmt.Printf("Average full render time: %f ms\n", float64(frameTime)/floatFrame)
|
|
fmt.Printf("Average total gamelogic catching up time: %f ms\n", float64(totalGameLogicCatchUp)/floatFrame)
|
|
fmt.Printf("Average normal gamelogic time: %f ms\n", float64(totalNormalGameLogic)/floatFrame)
|
|
fmt.Printf("Average ticking time: %f ms\n", float64(totalTicking)/floatTick)
|
|
fmt.Printf("Average remote player update time: %f ms\n", float64(totalRemotePlayerUpdate)/floatTick)
|
|
fmt.Print("\n")
|
|
}
|
|
|
|
func resetProfilingCounters(handleEventsTime, renderTime, scaleTime, frameTime *uint64, frameCount *uint64) {
|
|
*handleEventsTime = 0
|
|
*renderTime = 0
|
|
*scaleTime = 0
|
|
*frameTime = 0
|
|
*frameCount = 0
|
|
}
|
|
|
|
func resetMapProfilingCounters(renderTime, scaleTime, frameTime, totalGameLogicCatchUp, totalNormalGameLogic, totalTicking, totalRemotePlayerUpdate *uint64, frameCount, tickCount *uint64) {
|
|
*renderTime = 0
|
|
*scaleTime = 0
|
|
*frameTime = 0
|
|
*frameCount = 0
|
|
*totalGameLogicCatchUp = 0
|
|
*totalNormalGameLogic = 0
|
|
*totalTicking = 0
|
|
*totalRemotePlayerUpdate = 0
|
|
*tickCount = 0
|
|
}
|
|
|
|
func enforceFrameRate(frameStart uint64, targetFPS int) {
|
|
frameDuration := 1000 / targetFPS
|
|
elapsed := sdl.GetTicks64() - frameStart
|
|
if delay := frameDuration - int(elapsed); delay > 0 {
|
|
sdl.Delay(uint32(delay))
|
|
}
|
|
}
|