ArmNN
 21.02
BufferTests.cpp File Reference
#include "BufferManager.hpp"
#include "PacketBuffer.hpp"
#include "ProfilingUtils.hpp"
#include <common/include/SwTrace.hpp>
#include <armnn/Exceptions.hpp>
#include <boost/test/unit_test.hpp>

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_CASE (PacketBufferTest0)
 
 BOOST_AUTO_TEST_CASE (PacketBufferTest1)
 
 BOOST_AUTO_TEST_CASE (PacketBufferReleaseTest)
 
 BOOST_AUTO_TEST_CASE (PacketBufferCommitErrorTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveExceedingSpaceTest)
 
 BOOST_AUTO_TEST_CASE (BufferExhaustionTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveMultipleTest)
 
 BOOST_AUTO_TEST_CASE (BufferReleaseTest)
 
 BOOST_AUTO_TEST_CASE (BufferCommitTest)
 
 BOOST_AUTO_TEST_CASE (BufferMarkReadTest)
 
 BOOST_AUTO_TEST_CASE (ReadSwTraceMessageExceptionTest0)
 
 BOOST_AUTO_TEST_CASE (ReadSwTraceMessageExceptionTest1)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/13]

BOOST_AUTO_TEST_CASE ( PacketBufferTest0  )

Definition at line 20 of file BufferTests.cpp.

References armnn::profiling::ReadUint32(), and armnn::profiling::WriteUint32().

21 {
22  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
23 
24  BOOST_TEST(packetBuffer->GetSize() == 0);
25 
26  // Write data to the buffer
27  WriteUint32(packetBuffer, 0, 10);
28  WriteUint32(packetBuffer, 4, 20);
29  WriteUint32(packetBuffer, 8, 30);
30  WriteUint32(packetBuffer, 12, 40);
31 
32  // Commit
33  packetBuffer->Commit(16);
34 
35  // Size of buffer is equal to committed data
36  BOOST_TEST(packetBuffer->GetSize() == 16);
37 
38  // Read data from the buffer
39  auto readBuffer = packetBuffer->GetReadableData();
40  uint32_t readData0 = ReadUint32(readBuffer, 0);
41  uint32_t readData1 = ReadUint32(readBuffer, 4);
42  uint32_t readData2 = ReadUint32(readBuffer, 8);
43  uint32_t readData3 = ReadUint32(readBuffer, 12);
44 
45  // Check that data is correct
46  BOOST_TEST(readData0 == 10);
47  BOOST_TEST(readData1 == 20);
48  BOOST_TEST(readData2 == 30);
49  BOOST_TEST(readData3 == 40);
50 
51  // Mark read
52  packetBuffer->MarkRead();
53 
54  // Size of buffer become 0 after marked read
55  BOOST_TEST(packetBuffer->GetSize() == 0);
56 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [2/13]

BOOST_AUTO_TEST_CASE ( PacketBufferTest1  )

Definition at line 58 of file BufferTests.cpp.

References armnn::profiling::ReadUint32(), and armnn::profiling::WriteUint32().

59 {
60  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
61 
62  BOOST_TEST(packetBuffer->GetSize() == 0);
63 
64  // Write data to the buffer using GetWritableData
65  auto writeBuffer = packetBuffer->GetWritableData();
66  WriteUint32(writeBuffer, 0, 10);
67  WriteUint32(writeBuffer, 4, 20);
68  WriteUint32(writeBuffer, 8, 30);
69  WriteUint32(writeBuffer, 12, 40);
70 
71  packetBuffer->Commit(16);
72 
73  BOOST_TEST(packetBuffer->GetSize() == 16);
74 
75  // Read data from the buffer
76  auto readBuffer = packetBuffer->GetReadableData();
77  uint32_t readData0 = ReadUint32(readBuffer, 0);
78  uint32_t readData1 = ReadUint32(readBuffer, 4);
79  uint32_t readData2 = ReadUint32(readBuffer, 8);
80  uint32_t readData3 = ReadUint32(readBuffer, 12);
81 
82  BOOST_TEST(readData0 == 10);
83  BOOST_TEST(readData1 == 20);
84  BOOST_TEST(readData2 == 30);
85  BOOST_TEST(readData3 == 40);
86 
87  packetBuffer->MarkRead();
88 
89  BOOST_TEST(packetBuffer->GetSize() == 0);
90 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [3/13]

BOOST_AUTO_TEST_CASE ( PacketBufferReleaseTest  )

Definition at line 92 of file BufferTests.cpp.

References armnn::profiling::WriteUint32().

92  {
93  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
94 
95  BOOST_TEST(packetBuffer->GetSize() == 0);
96 
97  auto writeBuffer = packetBuffer->GetWritableData();
98 
99  WriteUint32(writeBuffer, 0, 10);
100  WriteUint32(writeBuffer, 4, 20);
101  WriteUint32(writeBuffer, 8, 30);
102  WriteUint32(writeBuffer, 12, 40);
103 
104  packetBuffer->Release();
105 
106  // Size of buffer become 0 after release
107  BOOST_TEST(packetBuffer->GetSize() == 0);
108 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [4/13]

BOOST_AUTO_TEST_CASE ( PacketBufferCommitErrorTest  )

Definition at line 110 of file BufferTests.cpp.

111 {
112  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(8);
113 
114  // Cannot commit data bigger than the max size of the buffer
115  BOOST_CHECK_THROW(packetBuffer->Commit(16);, armnn::RuntimeException);
116 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [5/13]

BOOST_AUTO_TEST_CASE ( BufferReserveTest  )

Definition at line 118 of file BufferTests.cpp.

References BufferManager::Reserve().

119 {
120  BufferManager bufferManager(1, 512);
121  unsigned int reservedSize = 0;
122  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
123 
124  // Successfully reserved the buffer with requested size
125  BOOST_TEST(reservedSize == 512);
126  BOOST_TEST(packetBuffer.get());
127 }

◆ BOOST_AUTO_TEST_CASE() [6/13]

BOOST_AUTO_TEST_CASE ( BufferReserveExceedingSpaceTest  )

Definition at line 129 of file BufferTests.cpp.

References BufferManager::Reserve().

130 {
131  BufferManager bufferManager(1, 512);
132  unsigned int reservedSize = 0;
133 
134  // Cannot reserve buffer bigger than maximum buffer size
135  auto reservedBuffer = bufferManager.Reserve(1024, reservedSize);
136  BOOST_TEST(reservedSize == 0);
137  BOOST_TEST(!reservedBuffer.get());
138 }

◆ BOOST_AUTO_TEST_CASE() [7/13]

BOOST_AUTO_TEST_CASE ( BufferExhaustionTest  )

Definition at line 140 of file BufferTests.cpp.

References BufferManager::Reserve().

141 {
142  BufferManager bufferManager(1, 512);
143  unsigned int reservedSize = 0;
144  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
145 
146  // Successfully reserved the buffer with requested size
147  BOOST_TEST(reservedSize == 512);
148  BOOST_TEST(packetBuffer.get());
149 
150  // Cannot reserve buffer when buffer is not available
151  // NOTE: because the buffer manager now has surge capacity of
152  // initial size * 3 we should be able to reserve three
153  // buffers before exhaustion
154  packetBuffer = bufferManager.Reserve(512, reservedSize);
155 
156  // Successfully reserved the second buffer with requested size
157  BOOST_TEST(reservedSize == 512);
158  BOOST_TEST(packetBuffer.get());
159 
160  packetBuffer = bufferManager.Reserve(512, reservedSize);
161 
162  // Successfully reserved the third buffer with requested size
163  BOOST_TEST(reservedSize == 512);
164  BOOST_TEST(packetBuffer.get());
165 
166  auto reservedBuffer = bufferManager.Reserve(512, reservedSize);
167  BOOST_TEST(reservedSize == 0);
168  BOOST_TEST(!reservedBuffer.get());
169 }

◆ BOOST_AUTO_TEST_CASE() [8/13]

BOOST_AUTO_TEST_CASE ( BufferReserveMultipleTest  )

Definition at line 171 of file BufferTests.cpp.

References BufferManager::Reserve().

172 {
173  BufferManager bufferManager(3, 512);
174  unsigned int reservedSize0 = 0;
175  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
176 
177  // Successfully reserved the buffer with requested size
178  BOOST_TEST(reservedSize0 == 512);
179  BOOST_TEST(packetBuffer0.get());
180 
181  unsigned int reservedSize1 = 0;
182  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
183 
184  // Successfully reserved the buffer with requested size
185  BOOST_TEST(reservedSize1 == 128);
186  BOOST_TEST(packetBuffer1.get());
187 
188  unsigned int reservedSize2 = 0;
189  auto packetBuffer2 = bufferManager.Reserve(512, reservedSize2);
190 
191  // Successfully reserved the buffer with requested size
192  BOOST_TEST(reservedSize2 == 512);
193  BOOST_TEST(packetBuffer2.get());
194 
195  // NOTE: the buffer now has a surge capacity of initial size * 3
196  // so we can grab 9 of them prior to exhaustion now
197  for (unsigned int i = 0; i < 6 ; ++i)
198  {
199  // grab another six buffers to exhaust the surge capacity
200  unsigned int reservedSize = 0;
201  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
202 
203  // Successfully reserved the third buffer with requested size
204  BOOST_TEST(reservedSize == 512);
205  BOOST_TEST(packetBuffer.get());
206  }
207 
208  // Cannot reserve when buffer is not available
209  unsigned int reservedSize3 = 0;
210  auto reservedBuffer = bufferManager.Reserve(512, reservedSize3);
211  BOOST_TEST(reservedSize3 == 0);
212  BOOST_TEST(!reservedBuffer.get());
213 }

◆ BOOST_AUTO_TEST_CASE() [9/13]

BOOST_AUTO_TEST_CASE ( BufferReleaseTest  )

Definition at line 215 of file BufferTests.cpp.

References BufferManager::Release(), and BufferManager::Reserve().

216 {
217  BufferManager bufferManager(2, 512);
218  unsigned int reservedSize0 = 0;
219  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
220 
221  // Successfully reserved the buffer with requested size
222  BOOST_TEST(reservedSize0 == 512);
223  BOOST_TEST(packetBuffer0.get());
224 
225  unsigned int reservedSize1 = 0;
226  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
227 
228  // Successfully reserved the buffer with requested size
229  BOOST_TEST(reservedSize1 == 128);
230  BOOST_TEST(packetBuffer1.get());
231 
232  // NOTE: now that we have a surge capacity of up to
233  // initial size * 3 we need to allocate four more
234  // buffers to exhaust the manager
235  for (unsigned int i = 0; i < 4 ; ++i)
236  {
237  // grab another six buffers to exhaust the surge capacity
238  unsigned int reservedSize = 0;
239  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
240 
241  // Successfully reserved the third buffer with requested size
242  BOOST_TEST(reservedSize == 512);
243  BOOST_TEST(packetBuffer.get());
244  }
245 
246  // Cannot reserve when buffer is not available
247  unsigned int reservedSize2 = 0;
248  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
249  BOOST_TEST(reservedSize2 == 0);
250  BOOST_TEST(!reservedBuffer.get());
251 
252  bufferManager.Release(packetBuffer0);
253 
254  // Buffer should become available after release
255  auto packetBuffer2 = bufferManager.Reserve(128, reservedSize2);
256 
257  BOOST_TEST(reservedSize2 == 128);
258  BOOST_TEST(packetBuffer2.get());
259 }

◆ BOOST_AUTO_TEST_CASE() [10/13]

BOOST_AUTO_TEST_CASE ( BufferCommitTest  )

Definition at line 261 of file BufferTests.cpp.

References BufferManager::Commit(), BufferManager::GetReadableBuffer(), and BufferManager::Reserve().

262 {
263  BufferManager bufferManager(2, 512);
264  unsigned int reservedSize0 = 0;
265  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
266 
267  BOOST_TEST(reservedSize0 == 512);
268  BOOST_TEST(packetBuffer0.get());
269 
270  unsigned int reservedSize1 = 0;
271  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
272 
273  BOOST_TEST(reservedSize1 == 128);
274  BOOST_TEST(packetBuffer1.get());
275 
276  // NOTE: now that we have a surge capacity of up to
277  // initial size * 3 we need to allocate four more
278  // buffers to exhaust the manager
279  for (unsigned int i = 0; i < 4 ; ++i)
280  {
281  // grab another six buffers to exhaust the surge capacity
282  unsigned int reservedSize = 0;
283  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
284 
285  // Successfully reserved the third buffer with requested size
286  BOOST_TEST(reservedSize == 512);
287  BOOST_TEST(packetBuffer.get());
288  }
289 
290  unsigned int reservedSize2 = 0;
291  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
292  BOOST_TEST(reservedSize2 == 0);
293  BOOST_TEST(!reservedBuffer.get());
294 
295  bufferManager.Commit(packetBuffer0, 256);
296 
297  // Buffer should become readable after commit
298  auto packetBuffer2 = bufferManager.GetReadableBuffer();
299  BOOST_TEST(packetBuffer2.get());
300  BOOST_TEST(packetBuffer2->GetSize() == 256);
301 
302  // Buffer not set back to available list after commit
303  unsigned int reservedSize = 0;
304  reservedBuffer = bufferManager.Reserve(512, reservedSize);
305  BOOST_TEST(reservedSize == 0);
306  BOOST_TEST(!reservedBuffer.get());
307 }

◆ BOOST_AUTO_TEST_CASE() [11/13]

BOOST_AUTO_TEST_CASE ( BufferMarkReadTest  )

Definition at line 309 of file BufferTests.cpp.

References BufferManager::Commit(), BufferManager::GetReadableBuffer(), BufferManager::MarkRead(), and BufferManager::Reserve().

310 {
311  BufferManager bufferManager(2, 512);
312  unsigned int reservedSize0 = 0;
313  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
314 
315  BOOST_TEST(reservedSize0 == 512);
316  BOOST_TEST(packetBuffer0.get());
317 
318  unsigned int reservedSize1 = 0;
319  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
320 
321  BOOST_TEST(reservedSize1 == 128);
322  BOOST_TEST(packetBuffer1.get());
323 
324  // NOTE: now that we have a surge capacity of up to
325  // initial size * 3 we need to allocate four more
326  // buffers to exhaust the manager
327  for (unsigned int i = 0; i < 4 ; ++i)
328  {
329  // grab another six buffers to exhaust the surge capacity
330  unsigned int reservedSize = 0;
331  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
332 
333  // Successfully reserved the third buffer with requested size
334  BOOST_TEST(reservedSize == 512);
335  BOOST_TEST(packetBuffer.get());
336  }
337 
338  // Cannot reserve when buffer is not available
339  unsigned int reservedSize2 = 0;
340  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
341  BOOST_TEST(reservedSize2 == 0);
342  BOOST_TEST(!reservedBuffer.get());
343 
344  bufferManager.Commit(packetBuffer0, 256);
345 
346  // Buffer should become readable after commit
347  auto packetBuffer2 = bufferManager.GetReadableBuffer();
348  BOOST_TEST(packetBuffer2.get());
349  BOOST_TEST(packetBuffer2->GetSize() == 256);
350 
351  // Buffer not set back to available list after commit
352  reservedBuffer = bufferManager.Reserve(512, reservedSize2);
353  BOOST_TEST(reservedSize2 == 0);
354  BOOST_TEST(!reservedBuffer.get());
355 
356  bufferManager.MarkRead(packetBuffer2);
357 
358  //Buffer should set back to available list after marked read and can be reserved
359  auto readBuffer = bufferManager.GetReadableBuffer();
360  BOOST_TEST(!readBuffer);
361  unsigned int reservedSize3 = 0;
362  auto packetBuffer3 = bufferManager.Reserve(56, reservedSize3);
363 
364  BOOST_TEST(reservedSize3 == 56);
365  BOOST_TEST(packetBuffer3.get());
366 }

◆ BOOST_AUTO_TEST_CASE() [12/13]

BOOST_AUTO_TEST_CASE ( ReadSwTraceMessageExceptionTest0  )

Definition at line 368 of file BufferTests.cpp.

References armnn::profiling::uint32_t_size, and armnn::profiling::WriteUint32().

369 {
370  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
371 
372  BOOST_TEST(packetBuffer->GetSize() == 0);
373 
374  // Write zero data to the buffer
375  WriteUint32(packetBuffer, 0, 0);
376  WriteUint32(packetBuffer, 4, 0);
377  WriteUint32(packetBuffer, 8, 0);
378  WriteUint32(packetBuffer, 12, 0);
379 
380  // Commit
381  packetBuffer->Commit(16);
382 
383  unsigned int uint32_t_size = sizeof(uint32_t);
384  unsigned int offset = uint32_t_size;
385  BOOST_CHECK_THROW(arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(), offset, packetBuffer->GetSize()),
386  arm::pipe::ProfilingException);
387 
388 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [13/13]

BOOST_AUTO_TEST_CASE ( ReadSwTraceMessageExceptionTest1  )

Definition at line 390 of file BufferTests.cpp.

References BOOST_AUTO_TEST_SUITE_END(), armnn::profiling::uint32_t_size, and armnn::profiling::WriteUint32().

391 {
392  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
393 
394  BOOST_TEST(packetBuffer->GetSize() == 0);
395 
396  // Write data to the buffer
397  WriteUint32(packetBuffer, 0, 10);
398  WriteUint32(packetBuffer, 4, 20);
399  WriteUint32(packetBuffer, 8, 30);
400  WriteUint32(packetBuffer, 12, 40);
401 
402  // Commit
403  packetBuffer->Commit(16);
404 
405  unsigned int uint32_t_size = sizeof(uint32_t);
406  unsigned int offset = uint32_t_size;
407  BOOST_CHECK_THROW(arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(), offset, packetBuffer->GetSize()),
408  arm::pipe::ProfilingException);
409 
410 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr