perf: add resolution and overdraw scenarios
Co-authored-by: codegirl007 <s.raide@gmail.com>
This commit is contained in:
@@ -21,8 +21,10 @@ PERF_FRAME_SPRITES ?= 128
|
|||||||
PERF_FRAME_FRAMES ?= 400
|
PERF_FRAME_FRAMES ?= 400
|
||||||
PERF_FRAME_WARMUP ?= 100
|
PERF_FRAME_WARMUP ?= 100
|
||||||
PERF_FRAME_TRIALS ?= 10
|
PERF_FRAME_TRIALS ?= 10
|
||||||
# 0=visible, 1=half offscreen, 2=alternating textures
|
# 0=visible, 1=half offscreen, 2=alternating textures, 3=stacked
|
||||||
PERF_FRAME_SCENARIO ?= 0
|
PERF_FRAME_SCENARIO ?= 0
|
||||||
|
PERF_FRAME_WIDTH ?= 800
|
||||||
|
PERF_FRAME_HEIGHT ?= 600
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Targets:"
|
@echo "Targets:"
|
||||||
@@ -44,7 +46,7 @@ help:
|
|||||||
@echo " flame-svg Convert perf.data -> $(FLAME_PREFIX).svg/.jpg"
|
@echo " flame-svg Convert perf.data -> $(FLAME_PREFIX).svg/.jpg"
|
||||||
@echo " flame-report Convert perf.data -> $(FLAME_PREFIX)-report.txt"
|
@echo " flame-report Convert perf.data -> $(FLAME_PREFIX)-report.txt"
|
||||||
@echo " perf-draw Deterministic CPU draw benchmark"
|
@echo " perf-draw Deterministic CPU draw benchmark"
|
||||||
@echo " perf-frame Deterministic SDL GPU frame benchmark (scenario 0/1/2)"
|
@echo " perf-frame Deterministic SDL GPU frame benchmark (scenario 0/1/2/3)"
|
||||||
|
|
||||||
bake:
|
bake:
|
||||||
./scripts/bake_all.sh
|
./scripts/bake_all.sh
|
||||||
@@ -89,7 +91,9 @@ perf-frame:
|
|||||||
-define:PERF_FRAMES=$(PERF_FRAME_FRAMES) \
|
-define:PERF_FRAMES=$(PERF_FRAME_FRAMES) \
|
||||||
-define:PERF_WARMUP_FRAMES=$(PERF_FRAME_WARMUP) \
|
-define:PERF_WARMUP_FRAMES=$(PERF_FRAME_WARMUP) \
|
||||||
-define:PERF_TRIALS=$(PERF_FRAME_TRIALS) \
|
-define:PERF_TRIALS=$(PERF_FRAME_TRIALS) \
|
||||||
-define:PERF_SCENARIO=$(PERF_FRAME_SCENARIO)
|
-define:PERF_SCENARIO=$(PERF_FRAME_SCENARIO) \
|
||||||
|
-define:PERF_WIDTH=$(PERF_FRAME_WIDTH) \
|
||||||
|
-define:PERF_HEIGHT=$(PERF_FRAME_HEIGHT)
|
||||||
|
|
||||||
toad:
|
toad:
|
||||||
odin run examples/toad -collection:pkg=.
|
odin run examples/toad -collection:pkg=.
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ PERF_FRAMES :: #config(PERF_FRAMES, 400)
|
|||||||
PERF_WARMUP_FRAMES :: #config(PERF_WARMUP_FRAMES, 100)
|
PERF_WARMUP_FRAMES :: #config(PERF_WARMUP_FRAMES, 100)
|
||||||
PERF_TRIALS :: #config(PERF_TRIALS, 10)
|
PERF_TRIALS :: #config(PERF_TRIALS, 10)
|
||||||
PERF_SCENARIO :: #config(PERF_SCENARIO, 0)
|
PERF_SCENARIO :: #config(PERF_SCENARIO, 0)
|
||||||
|
PERF_WIDTH :: #config(PERF_WIDTH, 800)
|
||||||
WINDOW_WIDTH :: 800
|
PERF_HEIGHT :: #config(PERF_HEIGHT, 600)
|
||||||
WINDOW_HEIGHT :: 600
|
|
||||||
|
|
||||||
Scenario :: enum {
|
Scenario :: enum {
|
||||||
Visible,
|
Visible,
|
||||||
Half_Offscreen,
|
Half_Offscreen,
|
||||||
Alternating_Textures,
|
Alternating_Textures,
|
||||||
|
Stacked,
|
||||||
}
|
}
|
||||||
|
|
||||||
@(private)
|
@(private)
|
||||||
@@ -46,6 +46,8 @@ scenario_name :: proc(scenario: Scenario) -> string {
|
|||||||
return "half_offscreen"
|
return "half_offscreen"
|
||||||
case .Alternating_Textures:
|
case .Alternating_Textures:
|
||||||
return "alternating_textures"
|
return "alternating_textures"
|
||||||
|
case .Stacked:
|
||||||
|
return "stacked"
|
||||||
}
|
}
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
@@ -80,12 +82,14 @@ main :: proc() {
|
|||||||
#assert(PERF_FRAMES > 0)
|
#assert(PERF_FRAMES > 0)
|
||||||
#assert(PERF_WARMUP_FRAMES > 0)
|
#assert(PERF_WARMUP_FRAMES > 0)
|
||||||
#assert(PERF_TRIALS > 0)
|
#assert(PERF_TRIALS > 0)
|
||||||
#assert(PERF_SCENARIO >= 0 && PERF_SCENARIO <= 2)
|
#assert(PERF_SCENARIO >= 0 && PERF_SCENARIO <= 3)
|
||||||
|
#assert(PERF_WIDTH > 0)
|
||||||
|
#assert(PERF_HEIGHT > 0)
|
||||||
|
|
||||||
scenario := Scenario(PERF_SCENARIO)
|
scenario := Scenario(PERF_SCENARIO)
|
||||||
|
|
||||||
app: eng.App
|
app: eng.App
|
||||||
if !eng.init(&app, "sprite frame benchmark", WINDOW_WIDTH, WINDOW_HEIGHT) {
|
if !eng.init(&app, "sprite frame benchmark", PERF_WIDTH, PERF_HEIGHT) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer eng.shutdown(&app)
|
defer eng.shutdown(&app)
|
||||||
@@ -113,6 +117,8 @@ main :: proc() {
|
|||||||
}
|
}
|
||||||
if scenario == .Half_Offscreen && (i & 1) == 1 {
|
if scenario == .Half_Offscreen && (i & 1) == 1 {
|
||||||
position = {-10_000, -10_000}
|
position = {-10_000, -10_000}
|
||||||
|
} else if scenario == .Stacked {
|
||||||
|
position = {f32(PERF_WIDTH / 2), f32(PERF_HEIGHT / 2)}
|
||||||
}
|
}
|
||||||
sprites[i] = eng.spawn_sprite(data, position, "walk", i % 17)
|
sprites[i] = eng.spawn_sprite(data, position, "walk", i % 17)
|
||||||
}
|
}
|
||||||
@@ -129,8 +135,8 @@ main :: proc() {
|
|||||||
"benchmark=sprite_frame scenario=%s sprites=%d resolution=%dx%d frames=%d warmup=%d trials=%d backend=%v driver=%s present=%s",
|
"benchmark=sprite_frame scenario=%s sprites=%d resolution=%dx%d frames=%d warmup=%d trials=%d backend=%v driver=%s present=%s",
|
||||||
scenario_name(scenario),
|
scenario_name(scenario),
|
||||||
PERF_SPRITES,
|
PERF_SPRITES,
|
||||||
WINDOW_WIDTH,
|
PERF_WIDTH,
|
||||||
WINDOW_HEIGHT,
|
PERF_HEIGHT,
|
||||||
PERF_FRAMES,
|
PERF_FRAMES,
|
||||||
PERF_WARMUP_FRAMES,
|
PERF_WARMUP_FRAMES,
|
||||||
PERF_TRIALS,
|
PERF_TRIALS,
|
||||||
|
|||||||
Reference in New Issue
Block a user