GCC Code Coverage Report


Directory: ./
File: firmware/controllers/core/big_buffer.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 76.5% 26 0 34
Functions: 85.7% 6 0 7
Branches: 50.0% 5 0 10
Decisions: 50.0% 5 - 10

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "big_buffer.h"
4
5 static BigBufferUser s_currentUser;
6 // uint32_t type to get 4-byte alignment
7 // alignment is required since we sometimes allocate objects in the buffer (like Timer of CompositeBuffer)
8 // we've only observed issue on F7 in -Os compiler configuration but technically all processors care
9 static uint32_t s_bigBuffer[BIG_BUFFER_SIZE / sizeof(uint32_t)];
10
11 #if EFI_UNIT_TEST
12 2 BigBufferUser getBigBufferCurrentUser() {
13 2 return s_currentUser;
14 }
15 #endif // EFI_UNIT_TEST
16
17 1 static void releaseBuffer(void* bufferPtr, BigBufferUser user) {
18
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1/2
✓ Decision 'true' taken 1 time.
✗ Decision 'false' not taken.
1 if (bufferPtr != &s_bigBuffer || user != s_currentUser) {
19 // todo: panic!
20 }
21
22 1 s_currentUser = BigBufferUser::None;
23 1 }
24
25 1 BigBufferHandle::BigBufferHandle(void* buffer, BigBufferUser user)
26 1 : m_bufferPtr(buffer)
27 1 , m_user(user)
28 {
29 1 }
30
31 BigBufferHandle::BigBufferHandle(BigBufferHandle&& other) {
32 // swap contents of the two objects
33 m_bufferPtr = other.m_bufferPtr;
34 other.m_bufferPtr = nullptr;
35
36 m_user = other.m_user;
37 other.m_user = BigBufferUser::None;
38 }
39
40 1 BigBufferHandle& BigBufferHandle::operator= (BigBufferHandle&& other) {
41
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1/2
✓ Decision 'true' taken 1 time.
✗ Decision 'false' not taken.
1 if (this != &other) {
42
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
1/2
✓ Decision 'true' taken 1 time.
✗ Decision 'false' not taken.
1 if (m_bufferPtr) {
43 1 releaseBuffer(m_bufferPtr, m_user);
44 }
45 // swap contents of the two objects
46 1 m_bufferPtr = other.m_bufferPtr;
47 1 other.m_bufferPtr = nullptr;
48
49 1 m_user = other.m_user;
50 1 other.m_user = BigBufferUser::None;
51 }
52 1 return *this;
53 }
54
55 2 BigBufferHandle::~BigBufferHandle() {
56
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
1/2
✗ Decision 'true' not taken.
✓ Decision 'false' taken 2 times.
2 if (m_bufferPtr) {
57 releaseBuffer(m_bufferPtr, m_user);
58 }
59 2 }
60
61 1 BigBufferHandle getBigBuffer(BigBufferUser user) {
62
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
1/2
✗ Decision 'true' not taken.
✓ Decision 'false' taken 1 time.
1 if (s_currentUser != BigBufferUser::None) {
63 // fatal
64 return {};
65 }
66
67 1 s_currentUser = user;
68
69 1 return BigBufferHandle(s_bigBuffer, user);
70 }
71