파일

.git-blame-ignore-revs에 있는 리비전을 무시합니다. 일반 blame 보기를 보려면 여기를 클릭하여 우회하세요.

206 라인
5.8 KiB
Python
Raw 고유링크 일반 보기 히스토리

# 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],
)