Files
2026-07-13 13:05:14 +08:00

78 lines
2.3 KiB
Python

"""Per-call overhead micro-benchmarks for the rr.log() pipeline.
See README.md for usage.
"""
from __future__ import annotations
from typing import Any
import numpy as np
import pytest
import rerun as rr
import rerun_bindings as bindings
from rerun._log import _log_components
ARCHETYPE_CASES = [
pytest.param(lambda: rr.Scalars(42.0), id="Scalars"),
pytest.param(
lambda: rr.Points3D([[1, 2, 3]], colors=[0xFF0000FF], radii=[0.1]),
id="Points3D",
),
pytest.param(
lambda: rr.Transform3D(translation=[1, 2, 3], mat3x3=np.eye(3, dtype=np.float32)),
id="Transform3D",
),
pytest.param(
lambda: rr.Boxes3D(half_sizes=[[1, 2, 3]], colors=[0xFF0000FF]),
id="Boxes3D",
),
]
def _init() -> None:
"""Common setup: init rerun + memory recording."""
rr.init("rerun_example_micro_benchmark", spawn=False)
rr.memory_recording()
@pytest.mark.parametrize("make_archetype", ARCHETYPE_CASES)
def test_bench_micro_construct(benchmark: Any, make_archetype: Any) -> None:
_init()
benchmark(make_archetype)
@pytest.mark.parametrize("make_archetype", ARCHETYPE_CASES)
def test_bench_micro_as_component_batches(benchmark: Any, make_archetype: Any) -> None:
_init()
archetype = make_archetype()
benchmark(archetype.as_component_batches)
@pytest.mark.parametrize("make_archetype", ARCHETYPE_CASES)
def test_bench_micro_log_components(benchmark: Any, make_archetype: Any) -> None:
_init()
batches = make_archetype().as_component_batches()
benchmark(_log_components, "test_entity", batches)
@pytest.mark.parametrize("make_archetype", ARCHETYPE_CASES)
def test_bench_micro_log_arrow_msg(benchmark: Any, make_archetype: Any) -> None:
_init()
batches = make_archetype().as_component_batches()
instanced = {b.component_descriptor(): b.as_arrow_array() for b in batches if b.as_arrow_array() is not None}
benchmark(bindings.log_arrow_msg, "test_entity", components=instanced, static_=False, recording=None)
@pytest.mark.parametrize("make_archetype", ARCHETYPE_CASES)
def test_bench_micro_log(benchmark: Any, make_archetype: Any) -> None:
_init()
archetype = make_archetype()
benchmark(rr.log, "test_entity", archetype)
def test_bench_micro_set_time(benchmark: Any) -> None:
_init()
benchmark(rr.set_time, "frame", sequence=42)