GCC Code Coverage Report


Directory: ./
File: Svc/DpManager/DpManager.cpp
Date: 2026-11-03 22:10:14
Exec Total Coverage
Lines: 34 49 69.4%
Functions: 7 10 70.0%
Branches: 18 26 69.2%

Line Branch Exec Source
1 // ======================================================================
2 // \title DpManager.cpp
3 // \author bocchino
4 // \brief cpp file for DpManager component implementation class
5 // ======================================================================
6
7 #include "Svc/DpManager/DpManager.hpp"
8 #include "Fw/FPrimeBasicTypes.hpp"
9
10 namespace Svc {
11
12 // ----------------------------------------------------------------------
13 // Construction, initialization, and destruction
14 // ----------------------------------------------------------------------
15
16 1 DpManager::DpManager(const char* const compName)
17 : DpManagerComponentBase(compName),
18 1 numSuccessfulAllocations(0),
19 1 numFailedAllocations(0),
20 1 numDataProducts(0),
21 1 numBytes(0),
22 2 m_schedInQueued(false) {}
23
24 2 DpManager::~DpManager() {}
25
26 // ----------------------------------------------------------------------
27 // Handler implementations for user-defined typed input ports
28 // ----------------------------------------------------------------------
29
30 5 Fw::Success DpManager::productGetIn_handler(const FwIndexType portNum,
31 FwDpIdType id,
32 FwSizeType size,
33 Fw::Buffer& buffer) {
34 5 return this->getBuffer(portNum, id, size, buffer);
35 }
36
37 ✗ void DpManager::productRequestIn_handler(const FwIndexType portNum, FwDpIdType id, FwSizeType size) {
38 // Get a buffer
39 ✗ Fw::Buffer buffer;
40 ✗ const Fw::Success status = this->getBuffer(portNum, id, size, buffer);
41 // Send buffer on productResponseOut
42 ✗ this->productResponseOut_out(portNum, id, buffer, status);
43 ✗ }
44
45 5 void DpManager::productSendIn_handler(const FwIndexType portNum, FwDpIdType id, const Fw::Buffer& buffer) {
46 // id is unused
47 (void)id;
48 // Update state variables
49 5 ++this->numDataProducts;
50
1/1
✓ Branch 1 taken 5 times.
5 this->numBytes += buffer.getSize();
51 // Send the buffer on productSendOut
52
1/1
✓ Branch 1 taken 5 times.
5 Fw::Buffer sendBuffer = buffer;
53
1/1
✓ Branch 1 taken 5 times.
5 this->productSendOut_out(portNum, sendBuffer);
54 5 }
55
56 66 void DpManager::schedIn_handler(const FwIndexType portNum, U32 context) {
57 66 bool expected = false;
58
1/2
✓ Branch 1 taken 66 times.
✗ Branch 2 not taken.
66 if (this->m_schedInQueued.compare_exchange_strong(expected, true)) {
59
1/1
✓ Branch 1 taken 66 times.
66 this->schedInInternal_internalInterfaceInvoke();
60 }
61 66 }
62
63 ✗ void DpManager::schedInInternal_overflowHook() {
64 ✗ this->m_schedInQueued = false;
65 ✗ }
66
67 66 void DpManager::schedInInternal_internalInterfaceHandler() {
68 66 this->m_schedInQueued = false;
69 // Emit telemetry
70
2/2
✓ Branch 1 taken 66 times.
✓ Branch 5 taken 66 times.
66 this->tlmWrite_NumSuccessfulAllocations(this->numSuccessfulAllocations);
71
2/2
✓ Branch 1 taken 66 times.
✓ Branch 5 taken 66 times.
66 this->tlmWrite_NumFailedAllocations(this->numFailedAllocations);
72
2/2
✓ Branch 1 taken 66 times.
✓ Branch 4 taken 66 times.
66 this->tlmWrite_NumDataProducts(this->numDataProducts);
73
2/2
✓ Branch 1 taken 66 times.
✓ Branch 4 taken 66 times.
66 this->tlmWrite_NumBytes(this->numBytes);
74 66 }
75
76 // ----------------------------------------------------------------------
77 // Handler implementations for commands
78 // ----------------------------------------------------------------------
79
80 ✗ void DpManager ::CLEAR_EVENT_THROTTLE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq) {
81 ✗ this->log_WARNING_HI_BufferAllocationFailed_ThrottleClear();
82 ✗ this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
83 ✗ }
84
85 // ----------------------------------------------------------------------
86 // Private helper functions
87 // ----------------------------------------------------------------------
88
89 5 Fw::Success DpManager::getBuffer(FwIndexType portNum, FwDpIdType id, FwSizeType size, Fw::Buffer& buffer) {
90 // Set status
91 5 Fw::Success status(Fw::Success::FAILURE);
92 // Get a buffer
93
2/2
✓ Branch 1 taken 5 times.
✓ Branch 4 taken 5 times.
5 buffer = this->bufferGetOut_out(portNum, static_cast<U32>(size));
94
2/3
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
5 if (buffer.isValid()) {
95 // Buffer is valid
96 5 ++this->numSuccessfulAllocations;
97
1/1
✓ Branch 1 taken 5 times.
5 status = Fw::Success::SUCCESS;
98 } else {
99 // Buffer is invalid
100 ✗ ++this->numFailedAllocations;
101 ✗ this->log_WARNING_HI_BufferAllocationFailed(id);
102 }
103 5 return status;
104 ✗ }
105
106 } // end namespace Svc
107