78 lines
2.3 KiB
Python
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)
|