Skip to content

[rocprofiler-systems] Add result<T, E> and use it in number parsers - #15053

Merged
adjordje-amd merged 4 commits into
developfrom
users/adjordje-amd/result-type
Nov 6, 2026
Merged

adjordje-amd merged 4 commits into
developfrom
users/adjordje-amd/result-type

Conversation

@adjordje-amd

@adjordje-amd adjordje-amd commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Motivation

std::optional means "the value may be absent". The number parsers used it for "parsing failed" instead, so three different failures (empty input, not a number, out of range) all became one nullopt and callers could not tell the user why a value was rejected. std::expected would fit, but it is C++23 and the project is C++20.

Technical Details

  • Add common/result.hpp with result<T, E> and failure<E>. It is a thin wrapper over std::variant, with explicit constructors, is_ok(), is_error(), value(), error() and value_or(). value() on an error and error() on a value throw std::logic_error. There is no dereference operator.
  • Change safe_from_chars, safe_stoi, safe_stol and safe_stod to return result<Tp, parse_error>, where parse_error is empty, not_a_number or out_of_range. Add a fmt::formatter<parse_error>.
  • Callers now report the reason: the CPU sampling frequency warning and the rocprof-sys-attach --pid and --detach-after errors. In json_config, set_json_int and set_json_double become one set_json_number<Number> constrained to integral or floating-point types.
  • to_bool is unchanged, since it cannot fail.
  • Not in this PR: bin/common still prints with std::cerr and gets fmt transitively through common-library. Moving it to LOG_* is a separate change.

Two commits: the type and its tests, then the parser change.

Issue Tracking

JIRA ID - AIPROFSYST-849

Test Plan

  • New result_test suite in common/tests/test_result.cpp (5 tests).
  • test_string_utility.cpp now asserts the specific parse_error for each rejected input, plus value_or and the formatter.
  • Whole-project debug build and the full rocprof-sys-unit-tests run. clang-tidy on the diff and pre-commit.

Test Result

Build succeeds, 2027 of 2027 unit tests pass, clang-tidy reports no issues on the changed files, and pre-commit passes.

Submission Checklist

Add result<T, E> and failure<E> to common/ for operations that can fail
with a reason the caller may need. std::optional stays for values that
are legitimately absent; result carries the error that optional drops.

std::expected is C++23, which the project does not allow. The type is a
thin wrapper over std::variant with explicit constructors, is_ok(),
is_error(), value(), error() and value_or(). Accessing the wrong side
throws std::logic_error. There is no dereference operator.
safe_from_chars, safe_stoi, safe_stol and safe_stod returned
std::optional, which collapsed three failures (empty input, not a number,
out of range) into one nullopt. They now return result<Tp, parse_error>,
so callers can report why a value was rejected.

Add a fmt::formatter for parse_error and use it in the CPU sampling
frequency warning and the rocprof-sys-attach --pid/--detach-after errors.
In json_config, replace set_json_int and set_json_double with a single
set_json_number<Number> constrained to integral or floating-point types.
to_bool is unchanged because it cannot fail.
@adjordje-amd
adjordje-amd requested review from a team and jrmadsen as code owners November 4, 2026 20:05
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

rocprofiler-systems CI Summary

Test Results (for commit 10b6f62)

Workflow jobs covered: 36

Workflow Runs Avg Test Time Tests Skipped Failed
Ubuntu 22.04 5 32m 23s 3,140 145 0
Ubuntu 24.04 5 34m 05s 3,020 145 0
Debian 4 40m 19s 2,512 110 0
RHEL 12 38m 06s 7,536 418 0
System deps 10 30m 12s 6,280 292 0
Total 36 34m 48s 22,488 1,110 0

Failed Tests

No failed tests reported.

Sanitizers

Thread Undefined Address
Passed Passed Passed

@therock-pr-bot

therock-pr-bot Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

✅ All Policy Checks Passed

Check Status Details
📝 PR Description ✅ Pass —
⛔ Forbidden Files ✅ Pass —
🧪 Unit Test ✅ Pass —
🚫 Draft PR 🔜 To Be Enabled —
🚩 Feature Flag 🔜 To Be Enabled —
📊 Code Coverage 🔜 To Be Enabled —

🎉 All policy checks passed!

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@therock-pr-bot

therock-pr-bot Bot commented Nov 4, 2026

Copy link
Copy Markdown

🚫 Please fix the failed policies before requesting reviews.

The following policy checks failed:

  • ❌ PR Description

The Not ready to Review label has been added to this PR.
Once all policies pass, the label will be removed automatically.

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Code Coverage Report

Code Coverage Report

Unit Tests

Lines: 🔴 27.0% (📉 -3.64% vs base) — 8,900/32,909 across 325 files
Functions: 🔴 25.8% — 877/3,397

🔴 0-20% (168 files)
Lines Functions File
0.0% 0/106 0/9 source/bin/common/argument_registration.hpp
0.0% 0/267 0/28 source/bin/common/tool_runner.cpp
0.0% 0/992 0/48 source/bin/rocprof-sys-avail/avail.cpp
0.0% 0/60 0/6 source/bin/rocprof-sys-avail/avail.hpp
0.0% 0/223 0/24 source/bin/rocprof-sys-avail/common.cpp
0.0% 0/18 0/3 source/bin/rocprof-sys-avail/component_categories.hpp
0.0% 0/274 0/12 source/bin/rocprof-sys-avail/generate_config.cpp
0.0% 0/39 0/2 source/bin/rocprof-sys-avail/get_availability.hpp
0.0% 0/11 0/1 source/bin/rocprof-sys-avail/get_categories.hpp
0.0% 0/106 0/6 source/bin/rocprof-sys-avail/hw_counter_query.cpp
0.0% 0/4 0/1 source/bin/rocprof-sys-avail/info_type.cpp
0.0% 0/9 0/1 source/bin/rocprof-sys-avail/info_type.hpp
0.0% 0/455 0/47 source/bin/rocprof-sys-causal/impl.cpp
0.0% 0/80 0/2 source/bin/rocprof-sys-causal/rocprof-sys-causal.cpp
0.0% 0/688 0/44 source/bin/rocprof-sys-instrument/details.cpp
0.0% 0/106 0/7 source/bin/rocprof-sys-instrument/function_signature.cpp
0.0% 0/20 0/5 source/bin/rocprof-sys-instrument/function_signature.hpp
0.0% 0/160 0/7 source/bin/rocprof-sys-instrument/info.hpp
0.0% 0/252 0/22 source/bin/rocprof-sys-instrument/internal_libs.cpp
0.0% 0/64 0/5 source/bin/rocprof-sys-instrument/log.cpp
0.0% 0/5 0/1 source/bin/rocprof-sys-instrument/log.hpp
0.0% 0/542 0/40 source/bin/rocprof-sys-instrument/module_function.cpp
0.0% 0/88 0/7 source/bin/rocprof-sys-instrument/module_function.hpp
0.0% 0/1593 0/87 source/bin/rocprof-sys-instrument/rocprof-sys-instrument.cpp
0.0% 0/165 0/12 source/bin/rocprof-sys-instrument/rocprof-sys-instrument.hpp
0.0% 0/2 0/1 source/bin/rocprof-sys-run/rocprof-sys-run.cpp
0.0% 0/2 0/1 source/bin/rocprof-sys-sample/rocprof-sys-sample.cpp
0.0% 0/57 0/5 source/bin/rocsys/rocsys.cpp
0.0% 0/24 0/1 source/lib/backends/amd_smi/wrapper.hpp
0.0% 0/20 0/3 source/lib/backends/posix/backend.hpp
0.0% 0/46 0/2 source/lib/backends/rocprofiler_sdk/wrapper.hpp
0.0% 0/16 0/4 source/lib/binary/address_multirange.cpp
0.0% 0/9 0/1 source/lib/binary/address_multirange.hpp
0.0% 0/126 0/5 source/lib/binary/analysis.cpp
0.0% 0/7 0/1 source/lib/binary/binary_info.hpp
0.0% 0/107 0/9 source/lib/binary/dwarf_entry.cpp
0.0% 0/1 0/1 source/lib/binary/dwarf_entry.hpp
0.0% 0/74 0/6 source/lib/binary/link_map.cpp
0.0% 0/3 0/1 source/lib/binary/link_map.hpp
0.0% 0/10 0/1 source/lib/binary/scope_filter.cpp
0.0% 0/6 0/2 source/lib/binary/scope_filter.hpp
0.0% 0/162 0/18 source/lib/binary/symbol.cpp
0.0% 0/8 0/8 source/lib/binary/symbol.hpp
0.0% 0/6 0/1 source/lib/common/env_vars.hpp
0.0% 0/40 0/3 source/lib/common/invoke.hpp
0.0% 0/22 0/2 source/lib/common/setup.hpp
0.0% 0/25 0/2 source/lib/core/amd_smi.cpp
0.0% 0/74 0/18 source/lib/core/binary/address_range.cpp
0.0% 0/9 0/3 source/lib/core/binary/address_range.hpp
0.0% 0/21 0/6 source/lib/core/categories.cpp
0.0% 0/11 0/11 source/lib/core/components/fwd.hpp
0.0% 0/29 0/3 source/lib/core/config.hpp
0.0% 0/88 0/11 source/lib/core/cpu.cpp
0.0% 0/1 0/1 source/lib/core/cpu.hpp
0.0% 0/61 0/6 source/lib/core/dynamic_library.cpp
0.0% 0/28 0/7 source/lib/core/exception.cpp
0.0% 0/242 0/29 source/lib/core/gpu.cpp
0.0% 0/162 0/12 source/lib/core/gpu_metrics.cpp
0.0% 0/33 0/6 source/lib/core/mpi.hpp
0.0% 0/59 0/4 source/lib/core/mproc.cpp
0.0% 0/78 0/5 source/lib/core/perf.cpp
0.0% 0/54 0/6 source/lib/core/perfetto/cached_perfetto_session.cpp
0.0% 0/33 0/4 source/lib/core/perfetto/counter_track.hpp
0.0% 0/42 0/9 source/lib/core/perfetto/emitter.cpp
0.0% 0/48 0/8 source/lib/core/perfetto/emitter.hpp
0.0% 0/9 0/1 source/lib/core/perfetto/sinks/append_mode.hpp
0.0% 0/1 0/1 source/lib/core/progress/bar.hpp
0.0% 0/8 0/3 source/lib/core/sdk/tracing-config-deps.hpp
0.0% 0/53 0/3 source/lib/core/trace_cache/cache_manager.cpp
0.0% 0/7 0/2 source/lib/core/trace_cache/cache_manager.hpp
0.0% 0/818 0/104 source/lib/core/trace_cache/perfetto_processor.cpp
0.0% 0/1 0/1 source/lib/core/trace_cache/perfetto_processor.hpp
0.0% 0/129 0/13 source/lib/core/trace_cache/post_processor.cpp
0.0% 0/13 0/1 source/lib/core/trace_cache/sample_processor.hpp
0.0% 0/14 0/6 source/lib/rocprof-sys-causal-api/causal_api.cpp
0.0% 0/543 0/85 source/lib/rocprof-sys-dl/dl.cpp
0.0% 0/16 0/1 source/lib/rocprof-sys-dl/main.c
0.0% 0/280 0/31 source/lib/rocprof-sys-rt/src/RTcommon.c
0.0% 0/29 0/4 source/lib/rocprof-sys-rt/src/RTheap-linux.c
0.0% 0/65 0/4 source/lib/rocprof-sys-rt/src/RTheap.c
0.0% 0/212 0/22 source/lib/rocprof-sys-rt/src/RTlinux.c
0.0% 0/97 0/8 source/lib/rocprof-sys-rt/src/RTposix.c
0.0% 0/6 0/2 source/lib/rocprof-sys-rt/src/RTsignal.c
0.0% 0/11 0/2 source/lib/rocprof-sys-rt/src/RTthread-x86-64.c
0.0% 0/3 0/1 source/lib/rocprof-sys-rt/src/RTthread.c
0.0% 0/84 0/20 source/lib/rocprof-sys/api.cpp
0.0% 0/678 0/39 source/lib/rocprof-sys/library.cpp
0.0% 0/78 0/6 source/lib/rocprof-sys/library/causal/components/backtrace.cpp
0.0% 0/8 0/1 source/lib/rocprof-sys/library/causal/components/backtrace.hpp
0.0% 0/105 0/11 source/lib/rocprof-sys/library/causal/components/blocking_gotcha.cpp
0.0% 0/37 0/7 source/lib/rocprof-sys/library/causal/components/causal_gotcha.cpp
0.0% 0/86 0/22 source/lib/rocprof-sys/library/causal/components/progress_point.cpp
0.0% 0/23 0/3 source/lib/rocprof-sys/library/causal/components/progress_point.hpp
0.0% 0/50 0/8 source/lib/rocprof-sys/library/causal/components/unblocking_gotcha.cpp
0.0% 0/564 0/33 source/lib/rocprof-sys/library/causal/data.cpp
0.0% 0/91 0/16 source/lib/rocprof-sys/library/causal/delay.cpp
0.0% 0/391 0/29 source/lib/rocprof-sys/library/causal/experiment.cpp
0.0% 0/3 0/1 source/lib/rocprof-sys/library/causal/experiment.hpp
0.0% 0/24 0/5 source/lib/rocprof-sys/library/causal/sample_data.cpp
0.0% 0/296 0/25 source/lib/rocprof-sys/library/causal/sampling.cpp
0.0% 0/4 0/1 source/lib/rocprof-sys/library/causal/selected_entry.cpp
0.0% 0/5 0/3 source/lib/rocprof-sys/library/causal/selected_entry.hpp
0.0% 0/76 0/11 source/lib/rocprof-sys/library/components/backtrace.cpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/backtrace.hpp
0.0% 0/145 0/17 source/lib/rocprof-sys/library/components/backtrace_metrics.cpp
0.0% 0/9 0/3 source/lib/rocprof-sys/library/components/backtrace_timestamp.cpp
0.0% 0/4 0/2 source/lib/rocprof-sys/library/components/backtrace_timestamp.hpp
0.0% 0/74 0/10 source/lib/rocprof-sys/library/components/callchain.cpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/callchain.hpp
0.0% 0/321 0/29 source/lib/rocprof-sys/library/components/comm_data.cpp
0.0% 0/19 0/5 source/lib/rocprof-sys/library/components/comm_data.hpp
0.0% 0/8 0/2 source/lib/rocprof-sys/library/components/ensure_storage.hpp
0.0% 0/29 0/6 source/lib/rocprof-sys/library/components/exit_gotcha.cpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/exit_gotcha.hpp
0.0% 0/69 0/8 source/lib/rocprof-sys/library/components/fork_gotcha.cpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/fork_gotcha.hpp
0.0% 0/13 0/3 source/lib/rocprof-sys/library/components/kill_gotcha.cpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/kill_gotcha.hpp
0.0% 0/176 0/22 source/lib/rocprof-sys/library/components/mpi_gotcha.cpp
0.0% 0/2 0/1 source/lib/rocprof-sys/library/components/mpi_gotcha.hpp
0.0% 0/533 0/12 source/lib/rocprof-sys/library/components/mpip.hpp
0.0% 0/79 0/19 source/lib/rocprof-sys/library/components/numa_gotcha.cpp
0.0% 0/2 0/1 source/lib/rocprof-sys/library/components/numa_gotcha.hpp
0.0% 0/350 0/20 source/lib/rocprof-sys/library/components/pthread_create_gotcha.cpp
0.0% 0/5 0/1 source/lib/rocprof-sys/library/components/pthread_create_gotcha.hpp
0.0% 0/35 0/9 source/lib/rocprof-sys/library/components/pthread_gotcha.cpp
0.0% 0/24 0/2 source/lib/rocprof-sys/library/components/pthread_mutex_gotcha_policy.hpp
0.0% 0/165 0/31 source/lib/rocprof-sys/library/components/vaapi_gotcha.cpp
0.0% 0/2 0/1 source/lib/rocprof-sys/library/components/vaapi_gotcha.hpp
0.0% 0/147 0/10 source/lib/rocprof-sys/library/coverage.cpp
0.0% 0/29 0/5 source/lib/rocprof-sys/library/coverage.hpp
0.0% 0/66 0/16 source/lib/rocprof-sys/library/coverage/impl.hpp
0.0% 0/260 0/35 source/lib/rocprof-sys/library/kokkosp.cpp
0.0% 0/252 0/32 source/lib/rocprof-sys/library/perf.cpp
0.0% 0/11 0/3 source/lib/rocprof-sys/library/perf.hpp
0.0% 0/155 0/9 source/lib/rocprof-sys/library/pmc/collectors/common/settings.hpp
0.0% 0/69 0/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/cache_policy.hpp
0.0% 0/36 0/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/cpu_traits.hpp
0.0% 0/131 0/6 source/lib/rocprof-sys/library/pmc/collectors/gpu/cache_policy.hpp
0.0% 0/34 0/3 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/cache_policy.hpp
0.0% 0/14 0/2 source/lib/rocprof-sys/library/pmc/device_providers/procfs/provider.hpp
0.0% 0/167 0/20 source/lib/rocprof-sys/library/pmc/sampler.cpp
0.0% 0/125 0/11 source/lib/rocprof-sys/library/process_sampler.cpp
0.0% 0/15 0/3 source/lib/rocprof-sys/library/process_sampler.hpp
0.0% 0/588 0/43 source/lib/rocprof-sys/library/rocprofiler-sdk.cpp
0.0% 0/16 0/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/hip_stream.hpp
0.0% 0/102 0/10 source/lib/rocprof-sys/library/rocprofiler-sdk/counters.cpp
0.0% 0/17 0/6 source/lib/rocprof-sys/library/rocprofiler-sdk/counters.hpp
0.0% 0/53 0/6 source/lib/rocprof-sys/library/rocprofiler-sdk/fwd.cpp
0.0% 0/8 0/3 source/lib/rocprof-sys/library/rocprofiler-sdk/fwd.hpp
0.0% 0/122 0/20 source/lib/rocprof-sys/library/runtime.cpp
0.0% 0/2 0/1 source/lib/rocprof-sys/library/runtime.hpp
0.0% 0/805 0/50 source/lib/rocprof-sys/library/sampling.cpp
0.0% 0/148 0/31 source/lib/rocprof-sys/library/thread_data.hpp
0.0% 0/10 0/3 source/lib/rocprof-sys/library/thread_data_growth.hpp
0.0% 0/11 0/1 source/lib/rocprof-sys/library/thread_deleter.cpp
0.0% 0/5 0/1 source/lib/rocprof-sys/library/thread_deleter.hpp
0.0% 0/168 0/27 source/lib/rocprof-sys/library/thread_info.cpp
0.0% 0/2 0/1 source/lib/rocprof-sys/library/thread_info.hpp
0.0% 0/118 0/11 source/lib/rocprof-sys/library/tracing.cpp
0.0% 0/61 0/14 source/lib/rocprof-sys/library/tracing.hpp
0.0% 0/8 0/2 source/lib/rocprof-sys/progress.cpp
0.0% 0/74 0/16 source/lib/rocprof-sys/regions.cpp
0.0% 0/91 0/6 source/lib/rocprof-sys/timeout.cpp
0.0% 0/453 0/45 source/python/libpyrocprofsys.cpp
0.8% 7/838 1/70 source/lib/core/argparse.cpp
3.8% 69/1798 11/301 source/lib/core/config.cpp
18.8% 6/32 2/5 source/bin/common/common_utils.hpp
🟠 20-50% (4 files)
Lines Functions File
20.0% 1/5 0/2 source/lib/core/argparse.hpp
26.3% 5/19 1/3 source/lib/rocprof-sys/library/components/backtrace_metrics.hpp
31.2% 20/64 4/9 source/lib/core/utility.hpp
40.9% 18/44 1/7 source/lib/rocprof-sys/library/rocprofiler-sdk/types.hpp
🟡 50-80% (25 files)
Lines Functions File
50.0% 19/38 4/5 source/lib/common/static_object.hpp
50.0% 8/16 3/3 source/lib/core/perfetto/sinks/per_pid_file_sink.cpp
50.5% 209/414 23/35 source/bin/common/common_utils.cpp
52.1% 225/432 36/57 source/lib/core/trace_cache/metadata_registry.cpp
56.7% 17/30 2/15 source/lib/core/trace_cache/unified_memory_processor.hpp
58.4% 171/293 19/36 source/lib/rocprof-sys/library/components/category_region.hpp
60.0% 36/60 7/12 source/lib/core/agent_manager.cpp
61.4% 70/114 7/10 source/lib/core/progress/bar.cpp
62.9% 342/544 25/37 source/bin/common/json_config.cpp
64.0% 55/86 4/5 source/lib/core/trace_cache/discovery.cpp
65.7% 23/35 2/2 source/lib/core/perfetto/sinks/file_output.cpp
66.7% 22/33 3/8 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/types.hpp
68.7% 46/67 11/14 source/lib/core/trace_cache/data_types.cpp
70.0% 236/337 15/17 source/bin/common/preset_registry.cpp
71.4% 25/35 1/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/event_info.hpp
72.1% 88/122 15/18 source/lib/core/perfetto/engine.cpp
73.9% 130/176 18/21 source/lib/common/path.hpp
74.3% 78/105 9/10 source/lib/core/perfetto/engine_impl.hpp
74.5% 41/55 4/7 source/lib/core/config/trace_period_config.hpp
75.0% 3/4 0/1 source/lib/backends/amd_smi/nic_types.hpp
75.0% 6/8 1/2 source/lib/core/trace_cache/type_registry.hpp
75.8% 47/62 5/5 source/lib/rocprof-sys/library/pmc/collectors/gpu/gpu_traits.hpp
78.2% 61/78 9/10 source/lib/rocprof-sys/library/pmc/device_providers/rocprofiler_sdk/provider.hpp
78.6% 77/98 4/4 source/lib/core/perfetto/sinks/single_file_sink.cpp
79.2% 19/24 2/2 source/lib/core/node_info.cpp
🟢 80-100% (128 files)
Lines Functions File
80.0% 4/5 1/1 source/lib/core/agent.hpp
80.0% 20/25 2/6 source/lib/rocprof-sys/library/pmc/collectors/hipfile/types.hpp
80.6% 133/165 10/14 source/lib/backends/procfs/backend.hpp
80.8% 135/167 30/33 source/lib/backends/rocprofiler_sdk/backend.hpp
81.2% 13/16 2/3 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/gpu_perf_counter_traits.hpp
81.8% 36/44 3/6 source/lib/core/containers/static_vector.hpp
83.0% 39/47 1/3 source/lib/core/trace_cache/storage_parser.hpp
83.3% 55/66 4/4 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/page_migrate.hpp
83.7% 713/852 29/32 source/lib/core/trace_cache/rocpd_processor.cpp
83.9% 73/87 10/12 source/lib/logger/logger.hpp
85.2% 23/27 2/4 source/lib/rocprof-sys/library/rocprofiler-sdk/domain_registry.hpp
85.2% 213/250 20/33 source/lib/core/sdk/tracing-config.hpp
86.0% 49/57 4/4 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/device.hpp
86.3% 252/292 26/32 source/lib/common/environment.hpp
87.5% 7/8 0/3 source/lib/rocprof-sys/library/pmc/collectors/cpu/types.hpp
87.7% 50/57 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_page_migrate.hpp
88.6% 39/44 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_page_fault.hpp
88.6% 39/44 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_queue.hpp
88.9% 24/27 5/6 source/lib/rocprof-sys/library/rocprofiler-sdk/stream_stack_service.hpp
89.1% 106/119 8/8 source/lib/rocprof-sys/library/pmc/collectors/cpu/device.hpp
89.1% 41/46 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/queue.hpp
89.5% 51/57 8/8 source/lib/rocprof-sys/library/pmc/collectors/base/collector.hpp
89.8% 44/49 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_unmap_from_gpu.hpp
90.0% 54/60 4/4 source/lib/core/trace_cache/buffer_storage.cpp
90.4% 178/197 14/18 source/lib/rocprof-sys/library/components/shmem_gotcha.hpp
90.5% 248/274 19/20 source/lib/core/trace_cache/unified_memory_processor.cpp
91.5% 43/47 7/7 source/lib/core/control/triggers/time_window.hpp
91.5% 43/47 5/6 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered_domain.hpp
91.7% 11/12 2/2 source/lib/core/perfetto/session_backend.hpp
91.8% 67/73 7/8 source/lib/core/trace_cache/buffer_storage.hpp
91.8% 45/49 3/4 source/lib/rocprof-sys/library/pmc/collectors/nic/nic_traits.hpp
92.2% 47/51 7/7 source/lib/core/control/waitable_clocks/posix.hpp
92.3% 24/26 1/3 source/lib/core/containers/c_array.hpp
92.3% 36/39 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/scratch_memory.hpp
92.3% 12/13 1/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/transferred_bytes_tracker.hpp
92.5% 186/201 21/23 source/lib/rocprof-sys/library/rocprofiler-sdk/domain_service.hpp
92.6% 163/176 9/9 source/lib/rocprof-sys/library/pmc/collectors/gpu/device.hpp
92.7% 102/110 15/18 source/lib/common/string_utility.hpp
92.9% 13/14 0/1 source/lib/rocprof-sys/library/pmc/collectors/common/collector_slice.hpp
93.1% 54/58 6/8 source/lib/rocprof-sys/library/components/pthread_mutex_gotcha.hpp
94.1% 32/34 2/2 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_dropped_events.hpp
94.1% 16/17 1/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback_domain.hpp
94.4% 51/54 4/7 source/lib/core/containers/aligned_static_vector.hpp
94.7% 54/57 1/4 source/lib/core/trace_cache/cacheable.hpp
94.7% 36/38 4/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/sample.hpp
95.0% 38/40 6/7 source/lib/core/trace_cache/rocpd_helpers.hpp
95.2% 40/42 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/memory_copy.hpp
95.3% 162/170 19/22 source/lib/rocprof-sys/library/components/ucx_gotcha.hpp
95.4% 83/87 19/23 source/lib/core/containers/stable_vector.hpp
95.5% 21/22 1/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/memory_allocation.hpp
95.6% 43/45 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kernel_dispatch.hpp
95.7% 45/47 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/page_fault.hpp
95.8% 23/24 2/4 source/lib/common/pci_bdf.hpp
95.9% 142/148 19/20 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/ompt/ompt.hpp
96.1% 49/51 7/7 source/lib/core/process_environment_info.cpp
96.2% 126/131 10/10 source/lib/core/output/output_summary.cpp
96.2% 51/53 12/14 source/lib/core/trace_cache/metadata_registry.hpp
96.3% 26/27 1/2 source/lib/common/delimit.hpp
96.5% 82/85 11/12 source/lib/core/state.hpp
96.6% 84/87 15/16 source/lib/backends/amd_smi/backend.hpp
96.7% 148/153 9/10 source/lib/common/md5sum.hpp
97.4% 74/76 6/6 source/lib/core/common_types.hpp
97.4% 37/38 5/5 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/common_tracing_callbacks.hpp
97.5% 39/40 3/3 source/lib/core/utility.cpp
97.7% 42/43 7/9 source/lib/core/trace_cache/archive.hpp
97.7% 85/87 11/12 source/lib/core/control/triggers/roctx.cpp
97.8% 44/45 7/11 source/lib/core/demangler.hpp
98.0% 49/50 3/3 source/lib/rocprof-sys/library/pmc/collectors/nic/device.hpp
98.1% 53/54 7/7 source/lib/rocprof-sys/library/pmc/device_providers/amd_smi/provider.hpp
98.2% 56/57 7/8 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/ompt/decoder.hpp
98.5% 130/132 19/20 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/roctx/core_api.hpp
98.5% 67/68 9/9 source/bin/rocsys/cli_dispatcher.cpp
98.6% 68/69 5/5 source/bin/rocprof-sys-instrument/dynamic_dependency_listing.hpp
98.7% 76/77 3/3 source/lib/core/perfetto/packet_framing.hpp
99.1% 115/116 19/19 source/lib/core/control/session.cpp
100.0% 1/1 0/1 source/bin/common/json_config.hpp
100.0% 1/1 0/1 source/bin/rocsys/cli_dispatcher.hpp
100.0% 110/110 13/14 source/lib/backends/amd_smi/device.hpp
100.0% 7/7 0/1 source/lib/backends/amd_smi/gpu_types.hpp
100.0% 35/35 2/3 source/lib/backends/hipfile/backend.hpp
100.0% 1/1 0/1 source/lib/backends/rocprofiler_sdk/types.hpp
100.0% 12/12 2/2 source/lib/common/clocks.hpp
100.0% 12/12 1/1 source/lib/common/join.hpp
100.0% 3/3 0/1 source/lib/common/regex_utility.hpp
100.0% 19/19 3/5 source/lib/common/result.hpp
100.0% 24/24 5/6 source/lib/common/synchronized.hpp
100.0% 14/14 2/5 source/lib/common/units/data_size.hpp
100.0% 11/11 2/3 source/lib/common/units/frequency.hpp
100.0% 11/11 2/3 source/lib/common/units/power.hpp
100.0% 5/5 0/3 source/lib/common/units/quantity.hpp
100.0% 8/8 0/2 source/lib/common/version.hpp
100.0% 158/158 1/1 source/lib/core/agent_info.hpp
100.0% 2/2 1/2 source/lib/core/agent_manager.hpp
100.0% 22/22 0/2 source/lib/core/containers/operators.hpp
100.0% 15/15 3/5 source/lib/core/control/session.hpp
100.0% 3/3 0/2 source/lib/core/control/triggers/roctx.hpp
100.0% 19/19 4/4 source/lib/core/control/waitable_clocks/steady.cpp
100.0% 2/2 1/2 source/lib/core/control/waitable_clocks/steady.hpp
100.0% 2/2 2/2 source/lib/core/node_info.hpp
100.0% 3/3 1/2 source/lib/core/output/output_summary.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/category_registry.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/engine.hpp
100.0% 7/7 0/1 source/lib/core/perfetto/sinks/file_output.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/sinks/per_pid_file_sink.hpp
100.0% 2/2 0/1 source/lib/core/perfetto/sinks/single_file_sink.hpp
100.0% 2/2 0/1 source/lib/core/perfetto/sinks/trace_sink.hpp
100.0% 7/7 2/2 source/lib/core/progress/tracker.cpp
100.0% 1/1 0/1 source/lib/core/progress/tracker.hpp
100.0% 4/4 0/3 source/lib/core/trace_cache/data_types.hpp
100.0% 7/7 1/3 source/lib/core/trace_cache/record_header.hpp
100.0% 2/2 0/1 source/lib/core/trace_cache/sample_processor_interface.hpp
100.0% 152/152 0/8 source/lib/core/trace_cache/sample_type.hpp
100.0% 5/5 2/2 source/lib/core/track_registry.cpp
100.0% 4/4 0/2 source/lib/core/track_registry.hpp
100.0% 12/12 1/1 source/lib/logger/logger.cpp
100.0% 18/18 0/2 source/lib/rocprof-sys/library/pmc/collectors/gpu/sample.hpp
100.0% 11/11 0/3 source/lib/rocprof-sys/library/pmc/collectors/gpu/types.hpp
100.0% 8/8 0/1 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/sample.hpp
100.0% 55/55 4/4 source/lib/rocprof-sys/library/pmc/collectors/hipfile/device.hpp
100.0% 36/36 2/3 source/lib/rocprof-sys/library/pmc/collectors/hipfile/hipfile_traits.hpp
100.0% 7/7 0/2 source/lib/rocprof-sys/library/pmc/collectors/hipfile/sample.hpp
100.0% 10/10 0/1 source/lib/rocprof-sys/library/pmc/collectors/nic/sample.hpp
100.0% 9/9 0/1 source/lib/rocprof-sys/library/pmc/collectors/nic/types.hpp
100.0% 3/3 0/3 source/lib/rocprof-sys/library/pmc/common/types.hpp
100.0% 9/9 1/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/code_object.hpp
100.0% 17/17 2/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/device_resolver.hpp
100.0% 47/47 4/4 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/rccl.hpp
100.0% 10/10 0/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/roctx/control_api.hpp

Distribution

Range Files
0-20% 168
20-50% 4
50-80% 25
80-100% 128

Unit Tests (PR Diff Files Only)

Lines: 🟡 59.4% (📈 +1.72% vs base) — 463/779 across 4 files
Functions: 🟡 62.3% — 43/69

🔴 0-20% (1 files)
Lines Functions File
0.0% 0/106 0/9 source/bin/common/argument_registration.hpp
🟡 50-80% (1 files)
Lines Functions File
62.9% 342/544 (📈 +0.64%) 25/37 source/bin/common/json_config.cpp
🟢 80-100% (2 files)
Lines Functions File
92.7% 102/110 (📉 -2.17%) 15/18 source/lib/common/string_utility.hpp
100.0% 19/19 3/5 source/lib/common/result.hpp

Distribution

Range Files
0-20% 1
20-50% 0
50-80% 1
80-100% 2

E2E Tests

Lines: 🟡 73.5% — 24,178/32,909 across 325 files
Functions: 🟡 70.9% — 2,408/3,397

🔴 0-20% (30 files)
Lines Functions File
0.0% 0/106 0/6 source/bin/rocprof-sys-avail/hw_counter_query.cpp
0.0% 0/24 0/1 source/lib/backends/amd_smi/wrapper.hpp
0.0% 0/88 0/11 source/lib/core/cpu.cpp
0.0% 0/1 0/1 source/lib/core/cpu.hpp
0.0% 0/61 0/6 source/lib/core/dynamic_library.cpp
0.0% 0/28 0/7 source/lib/core/exception.cpp
0.0% 0/162 0/12 source/lib/core/gpu_metrics.cpp
0.0% 0/8 0/3 source/lib/core/sdk/tracing-config-deps.hpp
0.0% 0/6 0/2 source/lib/rocprof-sys-rt/src/RTsignal.c
0.0% 0/11 0/2 source/lib/rocprof-sys-rt/src/RTthread-x86-64.c
0.0% 0/3 0/1 source/lib/rocprof-sys-rt/src/RTthread.c
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/exit_gotcha.hpp
0.0% 0/1 0/1 source/lib/rocprof-sys/library/components/kill_gotcha.hpp
0.0% 0/131 0/6 source/lib/rocprof-sys/library/pmc/collectors/gpu/cache_policy.hpp
0.0% 0/34 0/3 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/cache_policy.hpp
0.0% 0/16 0/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/hip_stream.hpp
0.0% 0/102 0/10 source/lib/rocprof-sys/library/rocprofiler-sdk/counters.cpp
0.0% 0/17 0/6 source/lib/rocprof-sys/library/rocprofiler-sdk/counters.hpp
0.0% 0/53 0/6 source/lib/rocprof-sys/library/rocprofiler-sdk/fwd.cpp
0.0% 0/8 0/3 source/lib/rocprof-sys/library/rocprofiler-sdk/fwd.hpp
0.0% 0/453 0/45 source/python/libpyrocprofsys.cpp
4.8% 8/165 2/31 source/lib/rocprof-sys/library/components/vaapi_gotcha.cpp
8.5% 50/588 13/43 source/lib/rocprof-sys/library/rocprofiler-sdk.cpp
8.7% 4/46 0/2 source/lib/backends/rocprofiler_sdk/wrapper.hpp
12.0% 3/25 1/2 source/lib/core/amd_smi.cpp
13.2% 32/242 6/29 source/lib/core/gpu.cpp
13.6% 38/280 7/31 source/lib/rocprof-sys-rt/src/RTcommon.c
13.8% 4/29 1/4 source/lib/rocprof-sys-rt/src/RTheap-linux.c
14.2% 30/212 4/22 source/lib/rocprof-sys-rt/src/RTlinux.c
16.2% 12/74 4/16 source/lib/rocprof-sys/regions.cpp
🟠 20-50% (16 files)
Lines Functions File
24.4% 19/78 3/5 source/lib/core/perf.cpp
27.8% 27/97 4/8 source/lib/rocprof-sys-rt/src/RTposix.c
31.3% 256/818 34/104 source/lib/core/trace_cache/perfetto_processor.cpp
34.5% 10/29 3/6 source/lib/rocprof-sys/library/components/exit_gotcha.cpp
34.8% 54/155 4/9 source/lib/rocprof-sys/library/pmc/collectors/common/settings.hpp
35.7% 30/84 10/20 source/lib/rocprof-sys/api.cpp
37.1% 39/105 5/11 source/lib/rocprof-sys/library/causal/components/blocking_gotcha.cpp
38.5% 5/13 2/3 source/lib/rocprof-sys/library/components/kill_gotcha.cpp
40.0% 32/80 1/2 source/bin/rocprof-sys-causal/rocprof-sys-causal.cpp
40.9% 18/44 1/7 source/lib/rocprof-sys/library/rocprofiler-sdk/types.hpp
43.8% 21/48 6/8 source/lib/core/perfetto/emitter.hpp
44.4% 4/9 1/3 source/lib/rocprof-sys/library/components/backtrace_timestamp.cpp
45.0% 72/160 3/7 source/bin/rocprof-sys-instrument/info.hpp
45.5% 30/66 6/16 source/lib/rocprof-sys/library/coverage/impl.hpp
46.2% 42/91 2/6 source/lib/rocprof-sys/timeout.cpp
47.7% 31/65 3/4 source/lib/rocprof-sys-rt/src/RTheap.c
🟡 50-80% (56 files)
Lines Functions File
50.0% 8/16 2/4 source/lib/binary/address_multirange.cpp
50.0% 7/14 2/6 source/lib/rocprof-sys-causal-api/causal_api.cpp
50.0% 1/2 0/1 source/lib/rocprof-sys/library/components/numa_gotcha.hpp
50.0% 1/2 0/1 source/lib/rocprof-sys/library/components/vaapi_gotcha.hpp
50.0% 1/2 0/1 source/lib/rocprof-sys/library/thread_info.hpp
50.0% 4/8 1/2 source/lib/rocprof-sys/progress.cpp
50.9% 29/57 3/5 source/bin/rocsys/rocsys.cpp
52.1% 225/432 36/57 source/lib/core/trace_cache/metadata_registry.cpp
52.3% 168/321 15/29 source/lib/rocprof-sys/library/components/comm_data.cpp
54.6% 142/260 27/35 source/lib/rocprof-sys/library/kokkosp.cpp
56.7% 17/30 2/15 source/lib/core/trace_cache/unified_memory_processor.hpp
57.0% 45/79 8/19 source/lib/rocprof-sys/library/components/numa_gotcha.cpp
57.5% 23/40 1/3 source/lib/common/invoke.hpp
58.1% 97/167 15/20 source/lib/rocprof-sys/library/pmc/sampler.cpp
59.4% 63/106 5/9 source/bin/common/argument_registration.hpp
59.5% 44/74 13/18 source/lib/core/binary/address_range.cpp
61.4% 70/114 7/10 source/lib/core/progress/bar.cpp
61.9% 26/42 7/9 source/lib/core/perfetto/emitter.cpp
62.7% 37/59 3/4 source/lib/core/mproc.cpp
63.8% 44/69 5/8 source/lib/rocprof-sys/library/components/fork_gotcha.cpp
63.9% 161/252 24/32 source/lib/rocprof-sys/library/perf.cpp
65.0% 13/20 2/3 source/lib/backends/posix/backend.hpp
65.1% 56/86 4/5 source/lib/core/trace_cache/discovery.cpp
65.7% 23/35 2/2 source/lib/core/perfetto/sinks/file_output.cpp
66.0% 454/688 32/44 source/bin/rocprof-sys-instrument/details.cpp
66.4% 81/122 15/20 source/lib/rocprof-sys/library/runtime.cpp
66.7% 6/9 1/1 source/lib/core/perfetto/sinks/append_mode.hpp
66.7% 22/33 3/8 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/types.hpp
67.6% 25/37 5/7 source/lib/rocprof-sys/library/causal/components/causal_gotcha.cpp
69.1% 375/543 40/85 source/lib/rocprof-sys-dl/dl.cpp
70.0% 35/50 5/8 source/lib/rocprof-sys/library/causal/components/unblocking_gotcha.cpp
70.5% 124/176 16/22 source/lib/rocprof-sys/library/components/mpi_gotcha.cpp
71.4% 25/35 1/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/event_info.hpp
71.7% 390/544 27/37 source/bin/common/json_config.cpp
72.7% 245/337 16/17 source/bin/common/preset_registry.cpp
73.0% 54/74 5/6 source/lib/binary/link_map.cpp
73.6% 78/106 5/7 source/bin/rocprof-sys-instrument/function_signature.cpp
74.4% 308/414 33/35 source/bin/common/common_utils.cpp
74.6% 421/564 30/33 source/lib/rocprof-sys/library/causal/data.cpp
74.8% 1192/1593 51/87 source/bin/rocprof-sys-instrument/rocprof-sys-instrument.cpp
75.0% 15/20 5/5 source/bin/rocprof-sys-instrument/function_signature.hpp
75.0% 48/64 4/5 source/bin/rocprof-sys-instrument/log.cpp
75.0% 3/4 0/1 source/lib/backends/amd_smi/nic_types.hpp
75.0% 18/24 4/5 source/lib/rocprof-sys/library/causal/sample_data.cpp
75.3% 223/296 23/25 source/lib/rocprof-sys/library/causal/sampling.cpp
75.5% 409/542 39/40 source/bin/rocprof-sys-instrument/module_function.cpp
75.8% 47/62 5/5 source/lib/rocprof-sys/library/pmc/collectors/gpu/gpu_traits.hpp
76.3% 29/38 5/5 source/lib/common/static_object.hpp
76.7% 46/60 10/12 source/lib/core/agent_manager.cpp
76.7% 99/129 12/13 source/lib/core/trace_cache/post_processor.cpp
78.1% 82/105 10/10 source/lib/core/perfetto/engine_impl.hpp
78.2% 61/78 9/10 source/lib/rocprof-sys/library/pmc/device_providers/rocprofiler_sdk/provider.hpp
78.3% 209/267 24/28 source/bin/common/tool_runner.cpp
78.4% 116/148 26/31 source/lib/rocprof-sys/library/thread_data.hpp
79.2% 19/24 2/2 source/lib/core/node_info.cpp
79.8% 134/168 24/27 source/lib/rocprof-sys/library/thread_info.cpp
🟢 80-100% (223 files)
Lines Functions File
80.0% 4/5 0/1 source/bin/rocprof-sys-instrument/log.hpp
80.0% 4/5 1/1 source/lib/core/agent.hpp
80.0% 20/25 2/6 source/lib/rocprof-sys/library/pmc/collectors/hipfile/types.hpp
80.8% 135/167 30/33 source/lib/backends/rocprofiler_sdk/backend.hpp
81.2% 181/223 21/24 source/bin/rocprof-sys-avail/common.cpp
81.2% 13/16 1/1 source/lib/rocprof-sys-dl/main.c
81.2% 13/16 2/3 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/gpu_perf_counter_traits.hpp
81.3% 1462/1798 276/301 source/lib/core/config.cpp
81.4% 70/86 17/22 source/lib/rocprof-sys/library/causal/components/progress_point.cpp
81.5% 44/54 6/6 source/lib/core/perfetto/cached_perfetto_session.cpp
82.4% 136/165 12/12 source/bin/rocprof-sys-instrument/rocprof-sys-instrument.hpp
82.9% 209/252 20/22 source/bin/rocprof-sys-instrument/internal_libs.cpp
83.2% 89/107 8/9 source/lib/binary/dwarf_entry.cpp
83.3% 55/66 4/4 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/page_migrate.hpp
83.6% 327/391 18/29 source/lib/rocprof-sys/library/causal/experiment.cpp
84.1% 570/678 34/39 source/lib/rocprof-sys/library.cpp
84.2% 16/19 2/3 source/lib/rocprof-sys/library/components/backtrace_metrics.hpp
84.2% 16/19 3/5 source/lib/rocprof-sys/library/components/comm_data.hpp
84.2% 139/165 11/14 source/lib/backends/procfs/backend.hpp
84.6% 137/162 17/18 source/lib/binary/symbol.cpp
84.7% 83/98 4/4 source/lib/core/perfetto/sinks/single_file_sink.cpp
85.1% 74/87 10/12 source/lib/logger/logger.hpp
85.2% 23/27 2/4 source/lib/rocprof-sys/library/rocprofiler-sdk/domain_registry.hpp
85.7% 78/91 14/16 source/lib/rocprof-sys/library/causal/delay.cpp
86.0% 49/57 4/4 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/device.hpp
86.3% 735/852 29/32 source/lib/core/trace_cache/rocpd_processor.cpp
86.4% 76/88 5/7 source/bin/rocprof-sys-instrument/module_function.hpp
86.8% 46/53 3/3 source/lib/core/trace_cache/cache_manager.cpp
87.3% 255/292 28/32 source/lib/common/environment.hpp
87.5% 14/16 3/3 source/lib/core/perfetto/sinks/per_pid_file_sink.cpp
87.7% 50/57 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_page_migrate.hpp
88.2% 67/76 9/11 source/lib/rocprof-sys/library/components/backtrace.cpp
88.6% 403/455 36/47 source/bin/rocprof-sys-causal/impl.cpp
88.6% 39/44 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_page_fault.hpp
88.6% 39/44 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_queue.hpp
88.9% 24/27 5/6 source/lib/rocprof-sys/library/rocprofiler-sdk/stream_stack_service.hpp
89.0% 129/145 12/17 source/lib/rocprof-sys/library/components/backtrace_metrics.cpp
89.0% 105/118 10/11 source/lib/rocprof-sys/library/tracing.cpp
89.1% 717/805 47/50 source/lib/rocprof-sys/library/sampling.cpp
89.1% 41/46 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/queue.hpp
89.2% 66/74 7/10 source/lib/rocprof-sys/library/components/callchain.cpp
89.2% 223/250 23/33 source/lib/core/sdk/tracing-config.hpp
89.4% 749/838 57/70 source/lib/core/argparse.cpp
89.8% 132/147 10/10 source/lib/rocprof-sys/library/coverage.cpp
89.8% 44/49 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_unmap_from_gpu.hpp
90.0% 9/10 1/1 source/lib/binary/scope_filter.cpp
90.0% 54/60 4/4 source/lib/core/trace_cache/buffer_storage.cpp
90.1% 247/274 11/12 source/bin/rocprof-sys-avail/generate_config.cpp
90.5% 248/274 19/20 source/lib/core/trace_cache/unified_memory_processor.cpp
90.9% 318/350 18/20 source/lib/rocprof-sys/library/components/pthread_create_gotcha.cpp
90.9% 20/22 2/2 source/lib/common/setup.hpp
90.9% 10/11 1/1 source/lib/rocprof-sys/library/thread_deleter.cpp
91.2% 52/57 8/8 source/lib/rocprof-sys/library/pmc/collectors/base/collector.hpp
91.5% 43/47 5/6 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered_domain.hpp
91.6% 109/119 8/8 source/lib/rocprof-sys/library/pmc/collectors/cpu/device.hpp
91.7% 11/12 2/2 source/lib/core/perfetto/session_backend.hpp
91.8% 67/73 7/8 source/lib/core/trace_cache/buffer_storage.hpp
91.8% 45/49 3/4 source/lib/rocprof-sys/library/pmc/collectors/nic/nic_traits.hpp
92.1% 116/126 5/5 source/lib/binary/analysis.cpp
92.2% 47/51 7/7 source/lib/core/control/waitable_clocks/posix.hpp
92.3% 36/39 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/scratch_memory.hpp
92.3% 12/13 1/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/transferred_bytes_tracker.hpp
92.5% 186/201 21/23 source/lib/rocprof-sys/library/rocprofiler-sdk/domain_service.hpp
92.6% 163/176 9/9 source/lib/rocprof-sys/library/pmc/collectors/gpu/device.hpp
92.6% 113/122 17/18 source/lib/core/perfetto/engine.cpp
92.6% 919/992 41/48 source/bin/rocprof-sys-avail/avail.cpp
92.9% 13/14 2/2 source/lib/rocprof-sys/library/pmc/device_providers/procfs/provider.hpp
93.1% 27/29 3/5 source/lib/rocprof-sys/library/coverage.hpp
93.4% 57/61 10/14 source/lib/rocprof-sys/library/tracing.hpp
93.6% 117/125 11/11 source/lib/rocprof-sys/library/process_sampler.cpp
93.9% 31/33 6/6 source/lib/core/mpi.hpp
94.1% 32/34 2/2 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/event_dropped_events.hpp
94.1% 16/17 1/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback_domain.hpp
94.3% 33/35 7/9 source/lib/rocprof-sys/library/components/pthread_gotcha.cpp
94.3% 166/176 20/21 source/lib/common/path.hpp
94.4% 186/197 16/18 source/lib/rocprof-sys/library/components/shmem_gotcha.hpp
94.4% 17/18 3/3 source/bin/rocprof-sys-avail/component_categories.hpp
94.7% 54/57 1/4 source/lib/core/trace_cache/cacheable.hpp
94.7% 36/38 4/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/sample.hpp
94.9% 74/78 6/6 source/lib/rocprof-sys/library/causal/components/backtrace.cpp
95.0% 38/40 6/7 source/lib/core/trace_cache/rocpd_helpers.hpp
95.2% 40/42 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/memory_copy.hpp
95.3% 162/170 19/22 source/lib/rocprof-sys/library/components/ucx_gotcha.hpp
95.5% 21/22 1/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/memory_allocation.hpp
95.6% 43/45 2/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kernel_dispatch.hpp
95.7% 45/47 2/3 source/lib/core/trace_cache/storage_parser.hpp
95.7% 45/47 3/3 source/lib/rocprof-sys/library/rocprofiler-sdk/buffered/kfd/page_fault.hpp
95.8% 23/24 2/4 source/lib/common/pci_bdf.hpp
95.9% 142/148 19/20 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/ompt/ompt.hpp
96.1% 49/51 7/7 source/lib/core/process_environment_info.cpp
96.2% 126/131 10/10 source/lib/core/output/output_summary.cpp
96.3% 26/27 1/2 source/lib/common/delimit.hpp
96.3% 52/54 5/7 source/lib/core/containers/aligned_static_vector.hpp
96.4% 106/110 15/18 source/lib/common/string_utility.hpp
96.6% 84/87 15/16 source/lib/backends/amd_smi/backend.hpp
96.6% 28/29 3/3 source/lib/core/config.hpp
96.7% 148/153 9/10 source/lib/common/md5sum.hpp
96.9% 62/64 9/9 source/lib/core/utility.hpp
97.0% 32/33 4/4 source/lib/core/perfetto/counter_track.hpp
97.0% 65/67 14/14 source/lib/core/trace_cache/data_types.cpp
97.2% 35/36 4/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/cpu_traits.hpp
97.3% 285/293 35/36 source/lib/rocprof-sys/library/components/category_region.hpp
97.4% 74/76 6/6 source/lib/core/common_types.hpp
97.4% 37/38 5/5 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/common_tracing_callbacks.hpp
97.5% 39/40 3/3 source/lib/core/utility.cpp
97.7% 42/43 7/9 source/lib/core/trace_cache/archive.hpp
97.7% 85/87 11/12 source/lib/core/control/triggers/roctx.cpp
97.8% 44/45 7/11 source/lib/core/demangler.hpp
98.0% 49/50 3/3 source/lib/rocprof-sys/library/pmc/collectors/nic/device.hpp
98.1% 53/54 7/7 source/lib/rocprof-sys/library/pmc/device_providers/amd_smi/provider.hpp
98.2% 56/57 7/8 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/ompt/decoder.hpp
98.3% 57/58 6/8 source/lib/rocprof-sys/library/components/pthread_mutex_gotcha.hpp
98.5% 130/132 19/20 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/roctx/core_api.hpp
98.5% 67/68 9/9 source/bin/rocsys/cli_dispatcher.cpp
98.6% 68/69 5/5 source/bin/rocprof-sys-instrument/dynamic_dependency_listing.hpp
98.6% 68/69 5/5 source/lib/rocprof-sys/library/pmc/collectors/cpu/cache_policy.hpp
98.7% 76/77 3/3 source/lib/core/perfetto/packet_framing.hpp
99.1% 115/116 19/19 source/lib/core/control/session.cpp
100.0% 32/32 4/5 source/bin/common/common_utils.hpp
100.0% 1/1 0/1 source/bin/common/json_config.hpp
100.0% 60/60 6/6 source/bin/rocprof-sys-avail/avail.hpp
100.0% 39/39 2/2 source/bin/rocprof-sys-avail/get_availability.hpp
100.0% 11/11 1/1 source/bin/rocprof-sys-avail/get_categories.hpp
100.0% 4/4 1/1 source/bin/rocprof-sys-avail/info_type.cpp
100.0% 9/9 0/1 source/bin/rocprof-sys-avail/info_type.hpp
100.0% 2/2 1/1 source/bin/rocprof-sys-run/rocprof-sys-run.cpp
100.0% 2/2 1/1 source/bin/rocprof-sys-sample/rocprof-sys-sample.cpp
100.0% 1/1 0/1 source/bin/rocsys/cli_dispatcher.hpp
100.0% 110/110 13/14 source/lib/backends/amd_smi/device.hpp
100.0% 7/7 0/1 source/lib/backends/amd_smi/gpu_types.hpp
100.0% 35/35 2/3 source/lib/backends/hipfile/backend.hpp
100.0% 1/1 0/1 source/lib/backends/rocprofiler_sdk/types.hpp
100.0% 9/9 0/1 source/lib/binary/address_multirange.hpp
100.0% 7/7 1/1 source/lib/binary/binary_info.hpp
100.0% 1/1 0/1 source/lib/binary/dwarf_entry.hpp
100.0% 3/3 0/1 source/lib/binary/link_map.hpp
100.0% 6/6 1/2 source/lib/binary/scope_filter.hpp
100.0% 8/8 7/8 source/lib/binary/symbol.hpp
100.0% 12/12 2/2 source/lib/common/clocks.hpp
100.0% 6/6 1/1 source/lib/common/env_vars.hpp
100.0% 12/12 1/1 source/lib/common/join.hpp
100.0% 3/3 0/1 source/lib/common/regex_utility.hpp
100.0% 19/19 3/5 source/lib/common/result.hpp
100.0% 24/24 5/6 source/lib/common/synchronized.hpp
100.0% 14/14 3/5 source/lib/common/units/data_size.hpp
100.0% 11/11 2/3 source/lib/common/units/frequency.hpp
100.0% 11/11 2/3 source/lib/common/units/power.hpp
100.0% 5/5 0/3 source/lib/common/units/quantity.hpp
100.0% 8/8 0/2 source/lib/common/version.hpp
100.0% 158/158 1/1 source/lib/core/agent_info.hpp
100.0% 2/2 1/2 source/lib/core/agent_manager.hpp
100.0% 5/5 0/2 source/lib/core/argparse.hpp
100.0% 9/9 1/3 source/lib/core/binary/address_range.hpp
100.0% 21/21 6/6 source/lib/core/categories.cpp
100.0% 11/11 11/11 source/lib/core/components/fwd.hpp
100.0% 55/55 6/7 source/lib/core/config/trace_period_config.hpp
100.0% 26/26 1/3 source/lib/core/containers/c_array.hpp
100.0% 22/22 0/2 source/lib/core/containers/operators.hpp
100.0% 87/87 20/23 source/lib/core/containers/stable_vector.hpp
100.0% 44/44 3/6 source/lib/core/containers/static_vector.hpp
100.0% 15/15 3/5 source/lib/core/control/session.hpp
100.0% 3/3 0/2 source/lib/core/control/triggers/roctx.hpp
100.0% 47/47 7/7 source/lib/core/control/triggers/time_window.hpp
100.0% 19/19 4/4 source/lib/core/control/waitable_clocks/steady.cpp
100.0% 2/2 2/2 source/lib/core/control/waitable_clocks/steady.hpp
100.0% 2/2 2/2 source/lib/core/node_info.hpp
100.0% 3/3 1/2 source/lib/core/output/output_summary.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/category_registry.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/engine.hpp
100.0% 7/7 0/1 source/lib/core/perfetto/sinks/file_output.hpp
100.0% 1/1 0/1 source/lib/core/perfetto/sinks/per_pid_file_sink.hpp
100.0% 2/2 0/1 source/lib/core/perfetto/sinks/single_file_sink.hpp
100.0% 2/2 0/1 source/lib/core/perfetto/sinks/trace_sink.hpp
100.0% 1/1 0/1 source/lib/core/progress/bar.hpp
100.0% 7/7 2/2 source/lib/core/progress/tracker.cpp
100.0% 1/1 0/1 source/lib/core/progress/tracker.hpp
100.0% 85/85 11/12 source/lib/core/state.hpp
100.0% 7/7 1/2 source/lib/core/trace_cache/cache_manager.hpp
100.0% 4/4 0/3 source/lib/core/trace_cache/data_types.hpp
100.0% 53/53 12/14 source/lib/core/trace_cache/metadata_registry.hpp
100.0% 1/1 1/1 source/lib/core/trace_cache/perfetto_processor.hpp
100.0% 7/7 1/3 source/lib/core/trace_cache/record_header.hpp
100.0% 13/13 0/1 source/lib/core/trace_cache/sample_processor.hpp
100.0% 2/2 0/1 source/lib/core/trace_cache/sample_processor_interface.hpp
100.0% 152/152 0/8 source/lib/core/trace_cache/sample_type.hpp
100.0% 8/8 2/2 source/lib/core/trace_cache/type_registry.hpp
100.0% 5/5 2/2 source/lib/core/track_registry.cpp
100.0% 4/4 0/2 source/lib/core/track_registry.hpp
100.0% 12/12 1/1 source/lib/logger/logger.cpp
100.0% 8/8 0/1 source/lib/rocprof-sys/library/causal/components/backtrace.hpp
100.0% 23/23 2/3 source/lib/rocprof-sys/library/causal/components/progress_point.hpp
100.0% 3/3 0/1 source/lib/rocprof-sys/library/causal/experiment.hpp
100.0% 4/4 1/1 source/lib/rocprof-sys/library/causal/selected_entry.cpp
100.0% 5/5 2/3 source/lib/rocprof-sys/library/causal/selected_entry.hpp
100.0% 1/1 0/1 source/lib/rocprof-sys/library/components/backtrace.hpp
100.0% 4/4 0/2 source/lib/rocprof-sys/library/components/backtrace_timestamp.hpp
100.0% 1/1 0/1 source/lib/rocprof-sys/library/components/callchain.hpp
100.0% 8/8 2/2 source/lib/rocprof-sys/library/components/ensure_storage.hpp
100.0% 1/1 0/1 source/lib/rocprof-sys/library/components/fork_gotcha.hpp
100.0% 2/2 0/1 source/lib/rocprof-sys/library/components/mpi_gotcha.hpp
100.0% 533/533 12/12 source/lib/rocprof-sys/library/components/mpip.hpp
100.0% 5/5 0/1 source/lib/rocprof-sys/library/components/pthread_create_gotcha.hpp
100.0% 24/24 1/2 source/lib/rocprof-sys/library/components/pthread_mutex_gotcha_policy.hpp
100.0% 11/11 0/3 source/lib/rocprof-sys/library/perf.hpp
100.0% 14/14 0/1 source/lib/rocprof-sys/library/pmc/collectors/common/collector_slice.hpp
100.0% 8/8 0/3 source/lib/rocprof-sys/library/pmc/collectors/cpu/types.hpp
100.0% 18/18 0/2 source/lib/rocprof-sys/library/pmc/collectors/gpu/sample.hpp
100.0% 11/11 0/3 source/lib/rocprof-sys/library/pmc/collectors/gpu/types.hpp
100.0% 8/8 0/1 source/lib/rocprof-sys/library/pmc/collectors/gpu_perf_counter/sample.hpp
100.0% 55/55 4/4 source/lib/rocprof-sys/library/pmc/collectors/hipfile/device.hpp
100.0% 36/36 2/3 source/lib/rocprof-sys/library/pmc/collectors/hipfile/hipfile_traits.hpp
100.0% 7/7 0/2 source/lib/rocprof-sys/library/pmc/collectors/hipfile/sample.hpp
100.0% 10/10 0/1 source/lib/rocprof-sys/library/pmc/collectors/nic/sample.hpp
100.0% 9/9 0/1 source/lib/rocprof-sys/library/pmc/collectors/nic/types.hpp
100.0% 3/3 0/3 source/lib/rocprof-sys/library/pmc/common/types.hpp
100.0% 15/15 2/3 source/lib/rocprof-sys/library/process_sampler.hpp
100.0% 9/9 1/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/code_object.hpp
100.0% 17/17 2/2 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/device_resolver.hpp
100.0% 47/47 4/4 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/rccl/rccl.hpp
100.0% 10/10 0/1 source/lib/rocprof-sys/library/rocprofiler-sdk/callback/roctx/control_api.hpp
100.0% 2/2 0/1 source/lib/rocprof-sys/library/runtime.hpp
100.0% 10/10 3/3 source/lib/rocprof-sys/library/thread_data_growth.hpp
100.0% 5/5 1/1 source/lib/rocprof-sys/library/thread_deleter.hpp

Distribution

Range Files
0-20% 30
20-50% 16
50-80% 56
80-100% 223

@mradosav-amd mradosav-amd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@peymanr

peymanr commented Nov 5, 2026

Copy link
Copy Markdown

PR Pundit review

(Testing PR Pundit Code Review agent. Not all comments may be relevant. This is a one-time automated pass: please address what is useful, no need to request a re-review. Please reply to each point, whether it applies or not: we harvest these replies, and both kinds are enormously helpful for tuning the agent. Reach out to @peymanr for suggestions.)

# Finding Where
1 🟠 Overflowing-with-garbage input reported as 'out of range' not 'not a number': this PR checks out_of_range first projects/rocprofiler-systems/source/lib/common/string_utility.hpp:185

1. 🟠 Should fix: Overflowing-with-garbage input reported as 'out of range' not 'not a number': this PR checks out_of_range first

projects/rocprofiler-systems/source/lib/common/string_utility.hpp:185

safe_from_chars returns parse_error::out_of_range as soon as std::from_chars reports result_out_of_range, before checking parsed.ptr != end. So input that both overflows and has trailing characters (99999999999x for int, 1e999x for double) is reported as "out of range" rather than "not a number". The input is still rejected; only the reason in the new diagnostics (parse_pid, --detach-after, the CPU sampling frequency warning) is debatable. Consider checking ptr != end first, or documenting the precedence, and add a test for the mixed case.

Who is affected: Users of rocprof-sys-attach or the CPU-frequency option who pass an overflowing number with trailing junk see "out of range" instead of "not a number" in the error message.

Checked against the code by an independent pass.

Related past reviews: #6203 on projects/rocprofiler-systems/source/lib/common/environment.hpp, #3494 on projects/rocprofiler-systems/source/lib/rocprof-sys/library/rocprofiler-sdk.cpp

Shared from a pilot of PR Pundit, an agentic code reviewer that builds and tests the change and reads the project's past reviews. Reviewed at 5adc024f; findings checked and posted by @peymanr; points already raised on this PR are left out.

Removed example usage and additional comments from the result class documentation.

@dgaliffiAMD dgaliffiAMD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.
The clang-tidy test failure looks like a false positive.
One note, there is no longer a caller to safe_stod. However, I have no concerns. You still have tests for it, and it could be a helpful wrapper.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A throwing cross-alternative move assignment can leave m_data valueless, causing both status checks to return false and making an is_error() guard unsafe before accessing value().

1 open issue
What changed in this PR

Adds a C++20-compatible result<T, E> type to rocprofiler-systems and uses it to distinguish numeric parsing failures, enabling clearer user-facing diagnostics.

Changes:

  • Introduces result<T, E> and failure<E> with unit tests.
  • Migrates numeric parsers to explicit error results and adds error formatting.
  • Updates callers and consolidates JSON numeric conversion.
File Description
projects/​rocprofiler-systems/​source/​lib/​common/​tests/​test_string_utility.cpp Tests specific parsing errors, fallback values, and formatting.
projects/​rocprofiler-systems/​source/​lib/​common/​tests/​test_result.cpp Tests result states, accessors, and fallback behavior.
projects/​rocprofiler-systems/​source/​lib/​common/​tests/​CMakeLists.txt Registers the result tests.
projects/​rocprofiler-systems/​source/​lib/​common/​string_utility.hpp Returns structured parsing errors and provides their formatter.
projects/​rocprofiler-systems/​source/​lib/​common/​result.hpp Defines the variant-backed result and failure types.
projects/​rocprofiler-systems/​source/​bin/​rocprof-sys-attach/​rocprof-sys-attach.cpp Includes parsing failure reasons in argument errors.
projects/​rocprofiler-systems/​source/​bin/​common/​json_config.cpp Consolidates numeric conversion into a constrained template.
projects/​rocprofiler-systems/​source/​bin/​common/​argument_registration.hpp Includes the parsing failure reason in CPU sampling warnings.

Review effort: Balanced

- require nothrow move-constructible T and E in result so a cross-alternative
  assignment cannot leave the variant valueless
- report trailing garbage as not_a_number before out_of_range in
  safe_from_chars
- remove unused safe_stod and its tests
@adjordje-amd
adjordje-amd merged commit de35882 into develop Nov 6, 2026
115 of 118 checks passed
@adjordje-amd
adjordje-amd deleted the users/adjordje-amd/result-type branch November 6, 2026 10:08
@systems-assistant

Copy link
Copy Markdown
Contributor

TheRock Submodule Bump Activity

Newest first

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants