1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00
tracy/public/common/TracyNameBuffer.cpp
Arnim Balzer 9e4af3aca0
Add name buffer to tracy client library
To be used by Python and Go bindings to store const char * accessible via a lookup
2024-05-04 14:52:32 +01:00

45 lines
1.3 KiB
C++

#include "TracyNameBuffer.hpp"
using namespace tracy;
#include "TracyApi.h"
#ifndef TRACY_BUFFER_SIZE
#define TRACY_BUFFER_SIZE = 128
#endif
#ifndef TRACY_NAME_LENGTH
#define TRACY_NAME_LENGTH = 128
#endif
NameBuffer::NameBuffer() : m_buffer(TRACY_BUFFER_SIZE, nullptr), m_index(0ul) {
for (std::size_t index = 0ul, end = m_buffer.size(); index < end; ++index)
m_buffer[index] = new char[TRACY_NAME_LENGTH];
}
BufferEntry NameBuffer::add( const std::string& name ) {
std::lock_guard<std::mutex> lock(m_mutex);
if (m_index >= TRACY_BUFFER_SIZE || name.size() > TRACY_NAME_LENGTH)
return std::make_pair(std::nullopt, nullptr);
auto index = m_index++;
name.copy(m_buffer[index], name.size());
return std::make_pair(index, m_buffer[index]);
}
const char* NameBuffer::get( uint16_t index ) {
std::lock_guard<std::mutex> lock(m_mutex);
if (index >= TRACY_BUFFER_SIZE) return nullptr;
return m_buffer[index];
}
#ifdef TRACY_NAME_BUFFER
TRACY_API const char* ___tracy_name_buffer_add( const char* name, uint16_t* id ) {
auto entry = NameBuffer::Add(name);
if (!entry.first) return nullptr;
if (id != nullptr) *id = *entry.first;
return entry.second;
}
TRACY_API const char* ___tracy_name_buffer_get( uint16_t id ) { return NameBuffer::Get(id); }
#endif