| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- /*
- * Trace Recorder for Tracealyzer v4.9.2
- * Copyright 2023 Percepio AB
- * www.percepio.com
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * The implementation of the diagnostics.
- */
- #include <trcRecorder.h>
- #if (TRC_USE_TRACEALYZER_RECORDER == 1) && (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
- static TraceDiagnosticsData_t *pxDiagnostics TRC_CFG_RECORDER_DATA_ATTRIBUTE;
- traceResult xTraceDiagnosticsInitialize(TraceDiagnosticsData_t *pxBuffer)
- {
- uint32_t i;
-
- /* This should never fail */
- TRC_ASSERT(pxBuffer != (void*)0);
- pxDiagnostics = pxBuffer;
- for (i = 0u; i < (TRC_DIAGNOSTICS_COUNT); i++)
- {
- pxDiagnostics->metrics[i] = 0;
- }
- xTraceSetComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS);
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsGet(TraceDiagnosticsType_t xType, TraceBaseType_t* pxValue)
- {
- /* This should never fail */
- TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS));
- /* This should never fail */
- TRC_ASSERT((TraceUnsignedBaseType_t)xType < TRC_DIAGNOSTICS_COUNT);
- /* This should never fail */
- TRC_ASSERT(pxValue != (void*)0);
- *pxValue = pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType];
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsSet(TraceDiagnosticsType_t xType, TraceBaseType_t xValue)
- {
- /* This should never fail */
- TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS));
- /* This should never fail */
- TRC_ASSERT((TraceUnsignedBaseType_t)xType < TRC_DIAGNOSTICS_COUNT);
- pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType] = xValue;
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsAdd(TraceDiagnosticsType_t xType, TraceBaseType_t xValue)
- {
- /* This should never fail */
- TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS));
- /* This should never fail */
- TRC_ASSERT((TraceUnsignedBaseType_t)xType < TRC_DIAGNOSTICS_COUNT);
- pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType] += xValue;
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsIncrease(TraceDiagnosticsType_t xType)
- {
- return xTraceDiagnosticsAdd(xType, 1);
- }
- traceResult xTraceDiagnosticsDecrease(TraceDiagnosticsType_t xType)
- {
- return xTraceDiagnosticsAdd(xType, -1);
- }
- traceResult xTraceDiagnosticsSetIfHigher(TraceDiagnosticsType_t xType, TraceBaseType_t xValue)
- {
- /* This should never fail */
- TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS));
- /* This should never fail */
- TRC_ASSERT((TraceUnsignedBaseType_t)xType < TRC_DIAGNOSTICS_COUNT);
- if (xValue > pxDiagnostics->metrics[xType])
- {
- pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType] = xValue;
- }
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsSetIfLower(TraceDiagnosticsType_t xType, TraceBaseType_t xValue)
- {
- /* This should never fail */
- TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS));
- /* This should never fail */
- TRC_ASSERT((TraceUnsignedBaseType_t)xType < TRC_DIAGNOSTICS_COUNT);
- if (xValue < pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType])
- {
- pxDiagnostics->metrics[(TraceUnsignedBaseType_t)xType] = xValue;
- }
- return TRC_SUCCESS;
- }
- traceResult xTraceDiagnosticsCheckStatus(void)
- {
- /* It is probably good if we always check this */
- if (xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_DIAGNOSTICS) == 0U)
- {
- return TRC_FAIL;
- }
- if (pxDiagnostics->metrics[TRC_DIAGNOSTICS_ENTRY_SLOTS_NO_ROOM] > 0)
- {
- (void)xTraceWarning(TRC_WARNING_ENTRY_TABLE_SLOTS);
- pxDiagnostics->metrics[TRC_DIAGNOSTICS_ENTRY_SLOTS_NO_ROOM] = 0;
- }
- if (pxDiagnostics->metrics[TRC_DIAGNOSTICS_ENTRY_SYMBOL_LONGEST_LENGTH] > (TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH))
- {
- (void)xTraceWarning(TRC_WARNING_ENTRY_SYMBOL_MAX_LENGTH);
- pxDiagnostics->metrics[TRC_DIAGNOSTICS_ENTRY_SYMBOL_LONGEST_LENGTH] = 0;
- }
- if (pxDiagnostics->metrics[TRC_DIAGNOSTICS_BLOB_MAX_BYTES_TRUNCATED] > 0)
- {
- (void)xTraceWarning(TRC_WARNING_EVENT_SIZE_TRUNCATED);
- pxDiagnostics->metrics[TRC_DIAGNOSTICS_BLOB_MAX_BYTES_TRUNCATED] = 0;
- }
- if (pxDiagnostics->metrics[TRC_DIAGNOSTICS_STACK_MONITOR_NO_SLOTS] > 0)
- {
- (void)xTraceWarning(TRC_WARNING_STACKMON_NO_SLOTS);
- pxDiagnostics->metrics[TRC_DIAGNOSTICS_STACK_MONITOR_NO_SLOTS] = 0;
- }
- return TRC_SUCCESS;
- }
- #endif
|