RVS - Report test progress in realtime

Change-Id: Id9fea71f242f372f408ecd777c030465b7ef9989
Signed-off-by: Galantsev, Dmitrii <dmitrii.galantsev@amd.com>
This commit is contained in:
Galantsev, Dmitrii
2024-10-24 23:11:05 -05:00
committed by Galantsev, Dmitrii
parent 9c77312c51
commit 37ddd5bf50
4 changed files with 70 additions and 41 deletions
+47 -2
View File
@@ -23,15 +23,60 @@ THE SOFTWARE.
#define RDC_MODULES_RDC_RVS_RVSBASE_H_
#include <cstddef>
#include <cstdio>
#include <string>
#include "rdc/rdc.h"
#include "rvs/rvs.h"
namespace amd {
namespace rdc {
void session_callback(rvs_session_id_t session_id, const rvs_results_t* results);
class RdcRVSBase {
public:
RdcRVSBase() { s_instance = this; };
~RdcRVSBase() {
if (s_instance == this) {
s_instance = nullptr;
}
};
rvs_status_t run_rvs_app(const char* config, size_t config_size);
// only one instance allowed
RdcRVSBase(const RdcRVSBase&) = delete;
RdcRVSBase& operator=(const RdcRVSBase&) = delete;
// no moving allowed
RdcRVSBase(RdcRVSBase&&) = delete;
RdcRVSBase& operator=(RdcRVSBase&&) = delete;
rvs_status_t run_rvs_app(const char* config, size_t config_size, cookie_t* cookie);
private:
static RdcRVSBase* s_instance;
volatile rvs_session_state_t _state = RVS_SESSION_STATE_IDLE;
cookie_t* _cookie = nullptr;
rvs_session_callback _rvs_callback = nullptr;
// Static callback function that the C API will call
static void static_callback(rvs_session_id_t session_id, const rvs_results_t* results) {
// Forward the call to the current instance if it exists
if (s_instance) {
s_instance->session_callback(session_id, results);
}
}
void session_callback(rvs_session_id_t session_id, const rvs_results_t* results) {
_state = results->state;
// std::string output = "\n";
// output += "session id -> " + std::to_string(session_id) + "\n";
// output += " state -> " + std::to_string(results->state) + "\n";
// output += " status -> " + std::to_string(results->status) + "\n";
// output += " output -> " + std::string(results->output_log);
std::string output = std::string(results->output_log);
if (_cookie != nullptr && _cookie->callback != nullptr && _cookie->writer != nullptr) {
_cookie->callback(_cookie->writer, output.data());
}
}
};
} // namespace rdc
} // namespace amd