Update correlation id definition + status strings + const active contexts (#127)
* Update include/rocprofiler
- remove rocprofiler_external_correlation_id_t
- redefine rocprofiler_correlation_id_t to include internal id and external user data
- associate rocprofiler_push_external_correlation_id and rocprofiler_pop_external_correlation_id with a context
* Update include/rocprofiler/rocprofiler.h
- rocprofiler_get_status_name
- rocprofiler_get_status_string
* Update lib/rocprofiler/rocprofiler.cpp
- implement rocprofiler_get_status_name and rocprofiler_get_status_string
* Update lib/rocprofiler/tests/status.cpp
- unit test for status string and name
* Update lib/rocprofiler/tests/registration.cpp
- update to new rocprofiler_correlation_id_t
* Update samples
- update to new rocprofiler_correlation_id_t
* Add lib/rocprofiler/external_correlation.cpp
- placeholder for external correlation push/pop
* Update lib/rocprofiler/hsa/agent_cache.cpp
- slight tweak to when HSA_AMD_AGENT_INFO_NEAREST_CPU is defined
* Update context implementation and hsa.cpp
- get_active_contexts is array of const context pointers
- update hsa_api_impl<Idx>::functor to new rocprofiler_correlation_id_t
* Update include/rocprofiler/fwd.h
- add ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT
- reorder enum for consistency
* Update include/rocprofiler/external_correlation.h
- doxygen comments
- thread id parameter
* Update include/rocprofiler/rocprofiler.h
- add rocprofiler_get_thread_id function (needed for external corr id)
* Update lib/common/synchronized.hpp
- explicit LockedType
- define all copy/move ctor and assignment
- update rlock/wlock/ulock to support arguments and return values
- Support additional template parameter for special case of synchronized instance which is the mapped type of a sychronized map
* Update lib/rocprofiler/external_correlation.cpp
- implement rocprofiler_{push,pop}_external_correlation_id
* Update lib/rocprofiler/CMakeLists.txt
- external_correlation.hpp
* Update lib/rocprofiler/rocprofiler.cpp
- status string for ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT
- implement rocprofiler_get_thread_id
* Update lib/rocprofiler/tests (external correlation)
- add external_correlation unit tests
* Update include/rocprofiler/callback_tracing.h
- doxygen comments
- callback invoked in callback tracing has user_data pointer passed to it
* Update samples/api_callback_tracing/client.cpp
- add rocprofiler_user_data_t* to tool_tracing_callback
* Update lib/rocprofiler/tests/registration.cpp
- add rocprofiler_user_data_t* to tool_tracing_callback
* Update lib/rocprofiler/context/context.{hpp,cpp}
- update correlation_tracing_service
- external_correlation instance
- rename get_unique_record_id to get_unique_internal_id
* Update lib/tests/common/demangling.cpp
- tweak mangled definitions due to changing function get_unique_record_id to get_unique_internal_id
* Update lib/rocprofiler/hsa/hsa.cpp
- handle updates to external correlation id
- handle updates to callback signature in callback tracing
* Update CMakeLists.txt
- CMAKE_BUILD_TYPE=Coverage defines CODECOV=1
* Update samples/api_callback_tracing/client.cpp
[ROCm/rocprofiler-sdk commit: 6a3f79e626]
This commit is contained in:
committed by
GitHub
parent
343f8679e7
commit
267954fdd3
@@ -25,6 +25,77 @@
|
||||
|
||||
#include "lib/common/utility.hpp"
|
||||
|
||||
namespace rocprofiler
|
||||
{
|
||||
namespace
|
||||
{
|
||||
#define ROCPROFILER_STATUS_STRING(CODE, MSG) \
|
||||
template <> \
|
||||
struct status_string<CODE> \
|
||||
{ \
|
||||
static constexpr auto name = #CODE; \
|
||||
static constexpr auto value = MSG; \
|
||||
};
|
||||
|
||||
template <size_t Idx>
|
||||
struct status_string;
|
||||
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_SUCCESS, "Success")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR, "General error")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUND, "Context ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_BUFFER_NOT_FOUND, "Buffer ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_DOMAIN_NOT_FOUND, "Domain ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_OPERATION_NOT_FOUND, "Operation ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_THREAD_NOT_FOUND, "Thread ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_CONTEXT_ERROR, "General context error")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_AGENT_NOT_FOUND, "Agent ID not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_COUNTER_NOT_FOUND, "HW counter not found")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_CONTEXT_INVALID,
|
||||
"Context configuration is not valid")
|
||||
ROCPROFILER_STATUS_STRING(
|
||||
ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_STARTED,
|
||||
"Context failed to be started (may be already started or atomic swap may have failed)")
|
||||
ROCPROFILER_STATUS_STRING(
|
||||
ROCPROFILER_STATUS_ERROR_BUFFER_BUSY,
|
||||
"Buffer operation failed because it is currently busy handling another request")
|
||||
ROCPROFILER_STATUS_STRING(
|
||||
ROCPROFILER_STATUS_ERROR_SERVICE_ALREADY_CONFIGURED,
|
||||
"Service configuration request would overwrite existing service configuration values")
|
||||
ROCPROFILER_STATUS_STRING(
|
||||
ROCPROFILER_STATUS_ERROR_CONFIGURATION_LOCKED,
|
||||
"Configuration request occurred outside of valid rocprofiler configuration period")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_NOT_IMPLEMENTED,
|
||||
"API function is defined but not implemented")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_INCOMPATIBLE_ABI,
|
||||
"Data structure provided by user has a incompatible binary interface "
|
||||
"with this version of rocprofiler")
|
||||
ROCPROFILER_STATUS_STRING(ROCPROFILER_STATUS_ERROR_INVALID_ARGUMENT,
|
||||
"Function invoked with one or more invalid arguments")
|
||||
|
||||
template <size_t Idx, size_t... Tail>
|
||||
const char*
|
||||
get_status_name(rocprofiler_status_t status, std::index_sequence<Idx, Tail...>)
|
||||
{
|
||||
if(status == Idx) return status_string<Idx>::name;
|
||||
// recursion until tail empty
|
||||
if constexpr(sizeof...(Tail) > 0)
|
||||
return get_status_name(status, std::index_sequence<Tail...>{});
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <size_t Idx, size_t... Tail>
|
||||
const char*
|
||||
get_status_string(rocprofiler_status_t status, std::index_sequence<Idx, Tail...>)
|
||||
{
|
||||
if(status == Idx) return status_string<Idx>::value;
|
||||
// recursion until tail empty
|
||||
if constexpr(sizeof...(Tail) > 0)
|
||||
return get_status_string(status, std::index_sequence<Tail...>{});
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace
|
||||
} // namespace rocprofiler
|
||||
|
||||
extern "C" {
|
||||
rocprofiler_status_t
|
||||
rocprofiler_get_version(uint32_t* major, uint32_t* minor, uint32_t* patch)
|
||||
@@ -41,4 +112,25 @@ rocprofiler_get_timestamp(rocprofiler_timestamp_t* ts)
|
||||
*ts = rocprofiler::common::timestamp_ns();
|
||||
return ROCPROFILER_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
rocprofiler_status_t
|
||||
rocprofiler_get_thread_id(rocprofiler_thread_id_t* tid)
|
||||
{
|
||||
*tid = rocprofiler::common::get_tid();
|
||||
return ROCPROFILER_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
const char*
|
||||
rocprofiler_get_status_name(rocprofiler_status_t status)
|
||||
{
|
||||
return rocprofiler::get_status_name(status,
|
||||
std::make_index_sequence<ROCPROFILER_STATUS_LAST>{});
|
||||
}
|
||||
|
||||
const char*
|
||||
rocprofiler_get_status_string(rocprofiler_status_t status)
|
||||
{
|
||||
return rocprofiler::get_status_string(status,
|
||||
std::make_index_sequence<ROCPROFILER_STATUS_LAST>{});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user