diff options
Diffstat (limited to 'profiling/client/src/PacketBuffer.cpp')
-rw-r--r-- | profiling/client/src/PacketBuffer.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/profiling/client/src/PacketBuffer.cpp b/profiling/client/src/PacketBuffer.cpp new file mode 100644 index 0000000000..3b5fd3570b --- /dev/null +++ b/profiling/client/src/PacketBuffer.cpp @@ -0,0 +1,67 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "PacketBuffer.hpp" + +#include <common/include/ProfilingException.hpp> + +namespace arm +{ + +namespace pipe +{ + +PacketBuffer::PacketBuffer(unsigned int maxSize) + : m_MaxSize(maxSize) + , m_Size(0) +{ + m_Data = std::make_unique<unsigned char[]>(m_MaxSize); +} + +const unsigned char* PacketBuffer::GetReadableData() const +{ + return m_Data.get(); +} + +unsigned int PacketBuffer::GetSize() const +{ + return m_Size; +} + +void PacketBuffer::MarkRead() +{ + m_Size = 0; +} + +void PacketBuffer::Commit(unsigned int size) +{ + if (size > m_MaxSize) + { + throw arm::pipe::ProfilingException("Cannot commit [" + std::to_string(size) + + "] bytes which is more than the maximum size of the buffer [" + std::to_string(m_MaxSize) + "]"); + } + m_Size = size; +} + +void PacketBuffer::Release() +{ + m_Size = 0; +} + +unsigned char* PacketBuffer::GetWritableData() +{ + return m_Data.get(); +} + +void PacketBuffer::Destroy() +{ + m_Data.reset(nullptr); + m_Size = 0; + m_MaxSize = 0; +} + +} // namespace pipe + +} // namespace arm |