2
0
Ficheiros
rocm-systems/projects/rocprofiler-systems/tests/pytest/test_time_window.py
T
Kian Cossettini 0eac446cb0 [rocprofiler-systems] - Implement subset of CTests into PyTests (#2666)
Convert a subset of the ctest to pytest to be used in TheRock CI.
Create a new cmake flag `ROCPROFSYS_INSTALL_TESTING` to control test suite installation.
- pytest package will be installed to share/rocprofiler-systems/tests
- all compiled examples are put in share/rocprofiler-systems/examples
- all test relevant scripts are put in share/rocprofiler-systems/tests
- see README.md in share/rocprofiler-systems/tests
2026-01-26 23:10:01 -05:00

206 linhas
5.8 KiB
Python

# Copyright (c) Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
"""
Tests for the trace time window example.
Equivalent to rocprof-sys-time-window-tests.cmake
"""
from __future__ import annotations
import pytest
pytestmark = [pytest.mark.time_window]
# ============================================================================
# Time Window Fixtures
# ============================================================================
@pytest.fixture
def time_window_env() -> dict[str, str]:
"""Environment variables for time window tests."""
return {
"ROCPROFSYS_USE_SAMPLING": "OFF",
"ROCPROFSYS_USE_PROCESS_SAMPLING": "OFF",
"ROCPROFSYS_VERBOSE": "2",
}
# ============================================================================
# Test Class: Trace Time Window Tests
# ============================================================================
class TestTraceTimeWindow:
REWRITE_ARGS = ["-e", "-v", "2", "--caller-include", "inner", "-i", "4096"]
RUNTIME_ARGS = ["-e", "-v", "1", "--caller-include", "inner", "-i", "4096"]
def test_binary_rewrite(
self,
run_test,
time_window_env: dict[str, str],
assert_perfetto,
assert_timemory,
assert_regex,
):
env = time_window_env.copy()
env.update({"ROCPROFSYS_TRACE_DURATION": "1.25"})
result = run_test(
"binary_rewrite",
target="trace-time-window",
rewrite_args=self.REWRITE_ARGS,
env=env,
timeout=120,
)
assert_regex(result)
assert_timemory(
result,
file_name="wall_clock.json",
metric="wall_clock",
labels=["trace-time-window.inst", "outer_a", "outer_b", "outer_c"],
counts=[1, 1, 1, 1],
depths=[0, 1, 1, 1],
fail_regex=["outer_d"], # time window should exclude this
)
assert_perfetto(
result,
labels=["trace-time-window.inst", "outer_a", "outer_b", "outer_c"],
counts=[1, 1, 1, 1],
depths=[0, 1, 1, 1],
fail_regex=["outer_d"], # time window should exclude this
)
def test_runtime_instrument(
self,
run_test,
time_window_env: dict[str, str],
assert_regex,
assert_perfetto,
assert_timemory,
):
env = time_window_env.copy()
env.update({"ROCPROFSYS_TRACE_DURATION": "1.25"})
result = run_test(
"runtime_instrument",
target="trace-time-window",
instrument_args=self.RUNTIME_ARGS,
env=env,
timeout=400, # In xdist, it can take much longer
)
assert_regex(result)
assert_timemory(
result,
file_name="wall_clock.json",
metric="wall_clock",
labels=["trace-time-window", "outer_a", "outer_b", "outer_c"],
counts=[1, 1, 1, 1],
depths=[0, 1, 1, 1],
fail_regex=["outer_d"], # time window should exclude this
)
assert_perfetto(
result,
categories=["host"],
labels=["trace-time-window", "outer_a", "outer_b", "outer_c"],
counts=[1, 1, 1, 1],
depths=[0, 1, 1, 1],
fail_regex=["outer_d"], # time window should exclude this
)
# ============================================================================
# Test Class: Trace Time Window Delay Tests
# ============================================================================
class TestTraceTimeWindowDelay:
"""Tests for trace time window with delay."""
REWRITE_ARGS = ["-e", "-v", "2", "--caller-include", "inner", "-i", "4096"]
RUNTIME_ARGS = ["-e", "-v", "1", "--caller-include", "inner", "-i", "4096"]
def test_binary_rewrite(
self,
run_test,
time_window_env: dict[str, str],
assert_perfetto,
assert_timemory,
assert_regex,
):
env = time_window_env.copy()
env.update(
{
"ROCPROFSYS_TRACE_DELAY": "0.75",
"ROCPROFSYS_TRACE_DURATION": "0.75",
}
)
result = run_test(
"binary_rewrite",
target="trace-time-window",
rewrite_args=self.REWRITE_ARGS,
env=env,
timeout=120,
)
assert_regex(result)
assert_timemory(
result,
file_name="wall_clock.json",
metric="wall_clock",
labels=["outer_c", "outer_d"],
counts=[1, 1],
depths=[0, 0],
)
assert_perfetto(
result,
categories=["host"],
labels=["outer_c", "outer_d"],
counts=[1, 1],
depths=[0, 0],
)
def test_runtime_instrument(
self,
run_test,
time_window_env: dict[str, str],
assert_perfetto,
assert_timemory,
assert_regex,
):
"""Test trace time window delay with runtime instrumentation."""
env = time_window_env.copy()
env.update(
{
"ROCPROFSYS_TRACE_DELAY": "0.75",
"ROCPROFSYS_TRACE_DURATION": "0.75",
}
)
result = run_test(
"runtime_instrument",
target="trace-time-window",
instrument_args=self.RUNTIME_ARGS,
env=env,
)
assert_regex(result)
assert_timemory(
result,
file_name="wall_clock.json",
metric="wall_clock",
labels=["outer_c", "outer_d"],
counts=[1, 1],
depths=[0, 0],
)
assert_perfetto(
result,
categories=["host"],
labels=["outer_c", "outer_d"],
counts=[1, 1],
depths=[0, 0],
)