diff --git a/client/benchmark/Benchmark.gd b/client/benchmark/Benchmark.gd new file mode 100644 index 0000000..e42ed6c --- /dev/null +++ b/client/benchmark/Benchmark.gd @@ -0,0 +1,63 @@ +extends Node + +var n := 1000000 +var benchmarks = [ + "pass", + "get_node", + "find_child", + "get_child", + "get_parent", + "get_viewport", + "get_tree", + "create_timer", +] + +func _ready(): + for b in benchmarks: + print("%s:" % b) + bench(self["_%s" % b]) + + await get_tree().create_timer(0.5).timeout + get_tree().quit() + +func bench(callable: Callable): + var t := now() + callable.call() + prints(round((now() - t) / n * 1000000000), "ns") + +func now() -> float: + return Time.get_unix_time_from_system() + +func _pass(): + for i in range(n): + pass + +func _get_node(): + for i in range(n): + get_node("Child") + +func _find_child(): + for i in range(n): + find_child("Child") + +func _get_child(): + for i in range(n): + get_child(0) + +func _get_parent(): + for i in range(n): + get_parent() + +func _get_viewport(): + for i in range(n): + get_viewport() + +func _get_tree(): + for i in range(n): + get_tree() + +func _create_timer(): + var tree := get_tree() + + for i in range(n): + tree.create_timer(0) \ No newline at end of file diff --git a/client/benchmark/Benchmark.tscn b/client/benchmark/Benchmark.tscn new file mode 100644 index 0000000..cb831c8 --- /dev/null +++ b/client/benchmark/Benchmark.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://bk5p5w2gxxuq5"] + +[ext_resource type="Script" path="res://benchmark/Benchmark.gd" id="1_363x2"] + +[node name="Benchmark" type="Node"] + +[node name="Node" type="Node" parent="."] +script = ExtResource("1_363x2") + +[node name="Child" type="Node" parent="Node"]