c4e7302567
- Introduced `civilization_benchmark.gd` and `legacy_quantity_math.gd` for benchmarking and legacy quantity calculations. - Created `test_dynamic_math.gd`, `test_frame_evolution.gd`, and `test_sparse_batches.gd` to validate mathematical operations and frame evolution logic. - Implemented `frame_budget.gd` to manage cooperative work on the main thread, ensuring no partially calculated state is published. - Added UID files for all new scripts to maintain unique identifiers.
23 lines
775 B
GDScript
23 lines
775 B
GDScript
extends RefCounted
|
|
## Cooperative work on the main thread. No partially calculated state is published.
|
|
var tree: SceneTree
|
|
var slice_usec: int = 40000
|
|
var deadline: int
|
|
var cancelled: bool = false
|
|
var waiting_usec: int = 0
|
|
|
|
func _init(scene_tree: SceneTree, milliseconds: int = 40):
|
|
tree = scene_tree
|
|
slice_usec = milliseconds * 1000
|
|
deadline = Time.get_ticks_usec() + slice_usec
|
|
|
|
func pause() -> bool:
|
|
var keep_alive: RefCounted = self
|
|
if cancelled: return false
|
|
if Time.get_ticks_usec() >= deadline:
|
|
var waiting_from: int = Time.get_ticks_usec()
|
|
await tree.process_frame
|
|
keep_alive.waiting_usec += Time.get_ticks_usec() - waiting_from
|
|
deadline = Time.get_ticks_usec() + slice_usec
|
|
return not keep_alive.cancelled
|