GCC Code Coverage Report


Directory: Svc/DpManager/
File: DpManager.cpp
Date: 2026-11-03 21:18:44
Exec Total Coverage
Lines: 45 49 91.8%
Functions: 9 10 90.0%
Branches: 25 26 96.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 16 DpManager::DpManager(const char* const compName)
17 : DpManagerComponentBase(compName),
18 16 numSuccessfulAllocations(0),
19 16 numFailedAllocations(0),
20 16 numDataProducts(0),
21 16 numBytes(0),
22 32 m_schedInQueued(false) {}
23
24 32 DpManager::~DpManager() {}
25
26 // ----------------------------------------------------------------------
27 // Handler implementations for user-defined typed input ports
28 // ----------------------------------------------------------------------
29
30 4 Fw::Success DpManager::productGetIn_handler(const FwIndexType portNum,
31 FwDpIdType id,
32 FwSizeType size,
33 Fw::Buffer& buffer) {
34 4 return this->getBuffer(portNum, id, size, buffer);
35 }
36
37 2021 void DpManager::productRequestIn_handler(const FwIndexType portNum, FwDpIdType id, FwSizeType size) {
38 // Get a buffer
39
1/1
✓ Branch 2 taken 2021 times.
2021 Fw::Buffer buffer;
40
1/1
✓ Branch 2 taken 2021 times.
2021 const Fw::Success status = this->getBuffer(portNum, id, size, buffer);
41 // Send buffer on productResponseOut
42
1/1
✓ Branch 5 taken 2021 times.
2021 this->productResponseOut_out(portNum, id, buffer, status);
43 4042 }
44
45 1948 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 1948 ++this->numDataProducts;
50
1/1
✓ Branch 4 taken 1948 times.
1948 this->numBytes += buffer.getSize();
51 // Send the buffer on productSendOut
52
1/1
✓ Branch 2 taken 1948 times.
1948 Fw::Buffer sendBuffer = buffer;
53
1/1
✓ Branch 5 taken 1948 times.
1948 this->productSendOut_out(portNum, sendBuffer);
54 3896 }
55
56 2050 void DpManager::schedIn_handler(const FwIndexType portNum, U32 context) {
57 2050 bool expected = false;
58
1/2
✓ Branch 4 taken 2050 times.
✗ Branch 5 not taken.
2050 if (this->m_schedInQueued.compare_exchange_strong(expected, true)) {
59
1/1
✓ Branch 5 taken 2050 times.
2050 this->schedInInternal_internalInterfaceInvoke();
60 }
61 2050 }
62
63 ✗ void DpManager::schedInInternal_overflowHook() {
64 ✗ this->m_schedInQueued = false;
65 ✗ }
66
67 2050 void DpManager::schedInInternal_internalInterfaceHandler() {
68 2050 this->m_schedInQueued = false;
69 // Emit telemetry
70
2/2
✓ Branch 6 taken 2050 times.
✓ Branch 13 taken 2050 times.
2050 this->tlmWrite_NumSuccessfulAllocations(this->numSuccessfulAllocations);
71
2/2
✓ Branch 6 taken 2050 times.
✓ Branch 13 taken 2050 times.
2050 this->tlmWrite_NumFailedAllocations(this->numFailedAllocations);
72
2/2
✓ Branch 6 taken 2050 times.
✓ Branch 13 taken 2050 times.
2050 this->tlmWrite_NumDataProducts(this->numDataProducts);
73
2/2
✓ Branch 6 taken 2050 times.
✓ Branch 13 taken 2050 times.
2050 this->tlmWrite_NumBytes(this->numBytes);
74 2050 }
75
76 // ----------------------------------------------------------------------
77 // Handler implementations for commands
78 // ----------------------------------------------------------------------
79
80 1972 void DpManager ::CLEAR_EVENT_THROTTLE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq) {
81 1972 this->log_WARNING_HI_BufferAllocationFailed_ThrottleClear();
82
2/2
✓ Branch 6 taken 1972 times.
✓ Branch 9 taken 1972 times.
1972 this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
83 1972 }
84
85 // ----------------------------------------------------------------------
86 // Private helper functions
87 // ----------------------------------------------------------------------
88
89 2025 Fw::Success DpManager::getBuffer(FwIndexType portNum, FwDpIdType id, FwSizeType size, Fw::Buffer& buffer) {
90 // Set status
91 2025 Fw::Success status(Fw::Success::FAILURE);
92 // Get a buffer
93
2/2
✓ Branch 3 taken 2025 times.
✓ Branch 10 taken 2025 times.
2025 buffer = this->bufferGetOut_out(portNum, static_cast<U32>(size));
94
3/3
✓ Branch 4 taken 2025 times.
✓ Branch 6 taken 1005 times.
✓ Branch 7 taken 1020 times.
2025 if (buffer.isValid()) {
95 // Buffer is valid
96 1005 ++this->numSuccessfulAllocations;
97
1/1
✓ Branch 3 taken 1005 times.
1005 status = Fw::Success::SUCCESS;
98 } else {
99 // Buffer is invalid
100 1020 ++this->numFailedAllocations;
101
1/1
✓ Branch 5 taken 1020 times.
1020 this->log_WARNING_HI_BufferAllocationFailed(id);
102 }
103 2025 return status;
104 ✗ }
105
106 } // end namespace Svc
107