1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2019 Arm Ltd. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include "PacketBuffer.hpp" 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <common/include/ProfilingException.hpp> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker namespace arm 11*89c4ff92SAndroid Build Coastguard Worker { 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker namespace pipe 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker PacketBuffer(unsigned int maxSize)16*89c4ff92SAndroid Build Coastguard WorkerPacketBuffer::PacketBuffer(unsigned int maxSize) 17*89c4ff92SAndroid Build Coastguard Worker : m_MaxSize(maxSize) 18*89c4ff92SAndroid Build Coastguard Worker , m_Size(0) 19*89c4ff92SAndroid Build Coastguard Worker { 20*89c4ff92SAndroid Build Coastguard Worker m_Data = std::make_unique<unsigned char[]>(m_MaxSize); 21*89c4ff92SAndroid Build Coastguard Worker } 22*89c4ff92SAndroid Build Coastguard Worker GetReadableData() const23*89c4ff92SAndroid Build Coastguard Workerconst unsigned char* PacketBuffer::GetReadableData() const 24*89c4ff92SAndroid Build Coastguard Worker { 25*89c4ff92SAndroid Build Coastguard Worker return m_Data.get(); 26*89c4ff92SAndroid Build Coastguard Worker } 27*89c4ff92SAndroid Build Coastguard Worker GetSize() const28*89c4ff92SAndroid Build Coastguard Workerunsigned int PacketBuffer::GetSize() const 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker return m_Size; 31*89c4ff92SAndroid Build Coastguard Worker } 32*89c4ff92SAndroid Build Coastguard Worker MarkRead()33*89c4ff92SAndroid Build Coastguard Workervoid PacketBuffer::MarkRead() 34*89c4ff92SAndroid Build Coastguard Worker { 35*89c4ff92SAndroid Build Coastguard Worker m_Size = 0; 36*89c4ff92SAndroid Build Coastguard Worker } 37*89c4ff92SAndroid Build Coastguard Worker Commit(unsigned int size)38*89c4ff92SAndroid Build Coastguard Workervoid PacketBuffer::Commit(unsigned int size) 39*89c4ff92SAndroid Build Coastguard Worker { 40*89c4ff92SAndroid Build Coastguard Worker if (size > m_MaxSize) 41*89c4ff92SAndroid Build Coastguard Worker { 42*89c4ff92SAndroid Build Coastguard Worker throw arm::pipe::ProfilingException("Cannot commit [" + std::to_string(size) + 43*89c4ff92SAndroid Build Coastguard Worker "] bytes which is more than the maximum size of the buffer [" + std::to_string(m_MaxSize) + "]"); 44*89c4ff92SAndroid Build Coastguard Worker } 45*89c4ff92SAndroid Build Coastguard Worker m_Size = size; 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker Release()48*89c4ff92SAndroid Build Coastguard Workervoid PacketBuffer::Release() 49*89c4ff92SAndroid Build Coastguard Worker { 50*89c4ff92SAndroid Build Coastguard Worker m_Size = 0; 51*89c4ff92SAndroid Build Coastguard Worker } 52*89c4ff92SAndroid Build Coastguard Worker GetWritableData()53*89c4ff92SAndroid Build Coastguard Workerunsigned char* PacketBuffer::GetWritableData() 54*89c4ff92SAndroid Build Coastguard Worker { 55*89c4ff92SAndroid Build Coastguard Worker return m_Data.get(); 56*89c4ff92SAndroid Build Coastguard Worker } 57*89c4ff92SAndroid Build Coastguard Worker Destroy()58*89c4ff92SAndroid Build Coastguard Workervoid PacketBuffer::Destroy() 59*89c4ff92SAndroid Build Coastguard Worker { 60*89c4ff92SAndroid Build Coastguard Worker m_Data.reset(nullptr); 61*89c4ff92SAndroid Build Coastguard Worker m_Size = 0; 62*89c4ff92SAndroid Build Coastguard Worker m_MaxSize = 0; 63*89c4ff92SAndroid Build Coastguard Worker } 64*89c4ff92SAndroid Build Coastguard Worker 65*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 66*89c4ff92SAndroid Build Coastguard Worker 67*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 68