0eac446cb0
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
206 linhas
5.8 KiB
Python
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],
|
|
)
|