mirror of
https://github.com/jwetzell/psn-go.git
synced 2026-08-04 15:07:49 +00:00
95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/jwetzell/psn-go"
|
|
)
|
|
|
|
func getNTrackers(n int) []psn.Tracker {
|
|
trackers := []psn.Tracker{}
|
|
|
|
for index := 0; index < n; index++ {
|
|
tracker := psn.Tracker{Id: uint16(index), Name: "Tracker"}
|
|
tracker.SetPos(0, 0, 0)
|
|
tracker.SetSpeed(0, 0, 0)
|
|
tracker.SetOri(0, 0, 0)
|
|
tracker.SetAccel(0, 0, 0)
|
|
tracker.SetTrgtPos(0, 0, 0)
|
|
tracker.SetStatus(1.0)
|
|
tracker.SetTimestamp(uint64(time.Now().UnixMilli()))
|
|
trackers = append(trackers, tracker)
|
|
}
|
|
return trackers
|
|
}
|
|
|
|
func main() {
|
|
testSizes := []int{1, 10, 100, 1000}
|
|
encoder := psn.Encoder{
|
|
SystemName: "test encoder",
|
|
VersionHigh: 2,
|
|
VersionLow: 3,
|
|
}
|
|
decoder := psn.NewDecoder()
|
|
|
|
for _, iterations := range testSizes {
|
|
for _, trackerCount := range testSizes {
|
|
benchmark(trackerCount, iterations, encoder, *decoder)
|
|
}
|
|
}
|
|
}
|
|
|
|
type BenchmarkResults struct {
|
|
data DataBenchmarkResults
|
|
info DataBenchmarkResults
|
|
}
|
|
|
|
type DataBenchmarkResults struct {
|
|
encode float64
|
|
decode float64
|
|
}
|
|
|
|
func benchmark(trackerCount int, iterations int, encoder psn.Encoder, decoder psn.Decoder) {
|
|
fmt.Printf("processing %d trackers %d times\n", trackerCount, iterations)
|
|
benchmarkResults := BenchmarkResults{}
|
|
trackers := getNTrackers(trackerCount)
|
|
|
|
timestamp := time.Now().UnixMilli()
|
|
// DATA
|
|
dataEncoderStart := time.Now().UnixMicro()
|
|
|
|
latestEncodedPackets := [][]byte{}
|
|
|
|
for index := 0; index < iterations; index++ {
|
|
latestEncodedPackets = encoder.GetDataPackets(uint64(timestamp), trackers)
|
|
}
|
|
benchmarkResults.data.encode = float64(time.Now().UnixMicro()-dataEncoderStart) / 1000.0
|
|
|
|
_ = latestEncodedPackets
|
|
dataDecodedStart := time.Now().UnixMicro()
|
|
for index := 0; index < iterations; index++ {
|
|
for _, packet := range latestEncodedPackets {
|
|
decoder.Decode(packet)
|
|
}
|
|
}
|
|
benchmarkResults.data.decode = float64(time.Now().UnixMicro()-dataDecodedStart) / 1000.0
|
|
|
|
// INFO
|
|
infoEncoderStart := time.Now().UnixMicro()
|
|
for index := 0; index < iterations; index++ {
|
|
latestEncodedPackets = encoder.GetInfoPackets(uint64(timestamp), trackers)
|
|
}
|
|
benchmarkResults.info.encode = float64(time.Now().UnixMicro()-infoEncoderStart) / 1000.0
|
|
|
|
infoDecodeStart := time.Now().UnixMicro()
|
|
for index := 0; index < iterations; index++ {
|
|
for _, packet := range latestEncodedPackets {
|
|
decoder.Decode(packet)
|
|
}
|
|
}
|
|
benchmarkResults.info.decode = float64(time.Now().UnixMicro()-infoDecodeStart) / 1000.0
|
|
|
|
fmt.Printf("%+v\n", benchmarkResults)
|
|
}
|