// Copyright (c) Advanced Micro Devices, Inc. // SPDX-License-Identifier: MIT #pragma once #include "common/defines.h" #include "core/common.hpp" #include "core/components/fwd.hpp" #include "core/state.hpp" #include "library/thread_data.hpp" #include #include #include #include #include #include #include #include namespace rocprofsys { namespace process_sampler { struct instance { std::function setup = []() {}; std::function shutdown = []() {}; std::function config = []() {}; std::function sample = []() {}; std::function post_process = []() {}; std::function pause = []() {}; }; // struct sampler { using msec_t = std::chrono::milliseconds; using usec_t = std::chrono::microseconds; using nsec_t = std::chrono::nanoseconds; using promise_t = std::promise; using future_t = std::future; using state_t = State; using timestamp_t = std::int64_t; template requires(!std::is_same_v, nsec_t>) static void poll(std::atomic* _state, Tp&& _interval, promise_t* _prom) { poll(_state, std::chrono::duration_cast(_interval), _prom); } static void setup(); static void shutdown(); static void post_process(); static void pause(); static void resume(); static void set_state(state_t); static void poll(std::atomic* _state, nsec_t _interval, promise_t*); }; // inline void setup() { sampler::setup(); } inline void shutdown() { sampler::shutdown(); } inline void post_process() { sampler::post_process(); } inline void pause() { sampler::pause(); } inline void resume() { sampler::resume(); } // } // namespace process_sampler } // namespace rocprofsys