Optimised failed test

This commit is contained in:
Martino Ferrari
2026-02-25 21:07:27 +01:00
parent dfb399bbba
commit f8f04856ed
17 changed files with 1842 additions and 557 deletions

View File

@@ -14,20 +14,44 @@
namespace MARTe {
class MemoryMapBroker;
class DebugService;
struct SignalAlias {
StreamString name;
uint32 signalIndex;
/**
* @brief Interface for instrumented brokers to allow service adoption.
*/
class DebugBrokerI {
public:
virtual ~DebugBrokerI() {}
virtual void SetService(DebugService* service) = 0;
virtual bool IsLinked() const = 0;
};
struct SignalExecuteInfo {
void* memoryAddress;
void* forcedValue;
uint32 internalID;
uint32 size;
};
struct BrokerActiveSet {
SignalExecuteInfo* forcedSignals;
uint32 numForced;
SignalExecuteInfo* tracedSignals;
uint32 numTraced;
};
struct BrokerInfo {
DebugSignalInfo** signalPointers;
uint32 numSignals;
MemoryMapBroker* broker;
BrokerActiveSet sets[2];
volatile uint32 currentSetIdx;
volatile bool* anyActiveFlag;
Vector<uint32>* activeIndices;
Vector<uint32>* activeSizes;
FastPollingMutexSem* activeMutex;
};
struct SignalAlias {
StreamString name;
uint32 signalIndex;
};
class DebugService : public ReferenceContainer, public MessageI, public EmbeddedServiceMethodBinderI {
@@ -41,12 +65,23 @@ public:
virtual bool Initialise(StructuredDataI & data);
DebugSignalInfo* RegisterSignal(void* memoryAddress, TypeDescriptor type, const char8* name);
static inline void CopySignal(void* dst, const void* src, const uint32 size) {
if (size == 4u) *static_cast<uint32*>(dst) = *static_cast<const uint32*>(src);
else if (size == 8u) *static_cast<uint64*>(dst) = *static_cast<const uint64*>(src);
else if (size == 1u) *static_cast<uint8*>(dst) = *static_cast<const uint8*>(src);
else if (size == 2u) *static_cast<uint16*>(dst) = *static_cast<const uint16*>(src);
else MemoryOperationsHelper::Copy(dst, src, size);
}
void ProcessSignal(DebugSignalInfo* signalInfo, uint32 size, uint64 timestamp);
void RegisterBroker(DebugSignalInfo** signalPointers, uint32 numSignals, MemoryMapBroker* broker, volatile bool* anyActiveFlag, Vector<uint32>* activeIndices, Vector<uint32>* activeSizes, FastPollingMutexSem* activeMutex);
void RegisterBroker(DebugSignalInfo** signalPointers, uint32 numSignals, MemoryMapBroker* broker, volatile bool* anyActiveFlag);
virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info);
static DebugService* Instance();
bool IsPaused() const { return isPaused; }
void SetPaused(bool paused) { isPaused = paused; }
@@ -56,12 +91,32 @@ public:
uint32 UnforceSignal(const char8* name);
uint32 TraceSignal(const char8* name, bool enable, uint32 decimation = 1);
void Discover(BasicTCPSocket *client);
void ListNodes(const char8* path, BasicTCPSocket *client);
void InfoNode(const char8* path, BasicTCPSocket *client);
void UpdateBrokersActiveStatus();
BrokerInfo* GetBrokerInfo(uint32 index) {
if (index < numberOfBrokers) return &brokers[index];
return NULL_PTR(BrokerInfo*);
}
// PERFORMANCE-CRITICAL MEMBERS
static const uint32 MAX_BROKERS = 256;
BrokerInfo brokers[MAX_BROKERS];
uint32 numberOfBrokers;
TraceRingBuffer traceBuffer;
static const uint32 MAX_SIGNALS = 512;
DebugSignalInfo signals[MAX_SIGNALS];
uint32 numberOfSignals;
static const uint32 MAX_ALIASES = 1024;
SignalAlias aliases[MAX_ALIASES];
uint32 numberOfAliases;
private:
void HandleCommand(StreamString cmd, BasicTCPSocket *client);
void UpdateBrokersActiveStatus();
uint32 ExportTree(ReferenceContainer *container, StreamString &json);
void PatchRegistry();
@@ -100,28 +155,15 @@ private:
ThreadIdentifier serverThreadId;
ThreadIdentifier streamerThreadId;
static const uint32 MAX_SIGNALS = 4096;
DebugSignalInfo signals[MAX_SIGNALS];
uint32 numberOfSignals;
static const uint32 MAX_ALIASES = 8192;
SignalAlias aliases[MAX_ALIASES];
uint32 numberOfAliases;
static const uint32 MAX_BROKERS = 1024;
BrokerInfo brokers[MAX_BROKERS];
uint32 numberOfBrokers;
FastPollingMutexSem mutex;
TraceRingBuffer traceBuffer;
static const uint32 MAX_CLIENTS = 16;
BasicTCPSocket* activeClients[MAX_CLIENTS];
FastPollingMutexSem clientsMutex;
static DebugService* instance;
};
extern DebugService* GlobalDebugServiceInstance;
}
#endif