Update Idle task runtime calculations

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
Gaurav Aggarwal 2025-02-12 09:24:19 +00:00
parent 6d040ebf0f
commit 3712f5191a

61
tasks.c
View file

@ -8415,7 +8415,7 @@ TickType_t uxTaskResetEventItemValue( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask )
{ {
TCB_t * pxTCB; TCB_t * pxTCB;
configRUN_TIME_COUNTER_TYPE ulCurrentRunTimeCounter = 0, ulTimeSinceLastSwitchedIn = 0, ulTotalRunTime = 0; configRUN_TIME_COUNTER_TYPE ulTotalTime = 0, ulTimeSinceLastSwitchedIn = 0, ulTaskRunTime = 0;
traceENTER_ulTaskGetRunTimeCounter( xTask ); traceENTER_ulTaskGetRunTimeCounter( xTask );
@ -8427,25 +8427,25 @@ TickType_t uxTaskResetEventItemValue( void )
if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE ) if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )
{ {
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulCurrentRunTimeCounter ); portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
#else #else
ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE(); ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
#endif #endif
#if ( configNUMBER_OF_CORES == 1 ) #if ( configNUMBER_OF_CORES == 1 )
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ 0 ]; ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ 0 ];
#else #else
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ pxTCB->xTaskRunState ]; ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ pxTCB->xTaskRunState ];
#endif #endif
} }
ulTotalRunTime = pxTCB->ulRunTimeCounter + ulTimeSinceLastSwitchedIn; ulTaskRunTime = pxTCB->ulRunTimeCounter + ulTimeSinceLastSwitchedIn;
} }
taskEXIT_CRITICAL(); taskEXIT_CRITICAL();
traceRETURN_ulTaskGetRunTimeCounter( ulTotalRunTime ); traceRETURN_ulTaskGetRunTimeCounter( ulTaskRunTime );
return ulTotalRunTime; return ulTaskRunTime;
} }
#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */ #endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
@ -8456,11 +8456,11 @@ TickType_t uxTaskResetEventItemValue( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask ) configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )
{ {
TCB_t * pxTCB; TCB_t * pxTCB;
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn, ulTaskRunTimeCounter; configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn, ulTaskRunTime;
traceENTER_ulTaskGetRunTimePercent( xTask ); traceENTER_ulTaskGetRunTimePercent( xTask );
ulTaskRunTimeCounter = ulTaskGetRunTimeCounter( xTask ); ulTaskRunTime = ulTaskGetRunTimeCounter( xTask );
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime ); portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
@ -8477,7 +8477,7 @@ TickType_t uxTaskResetEventItemValue( void )
pxTCB = prvGetTCBFromHandle( xTask ); pxTCB = prvGetTCBFromHandle( xTask );
configASSERT( pxTCB != NULL ); configASSERT( pxTCB != NULL );
ulReturn = ulTaskRunTimeCounter / ulTotalTime; ulReturn = ulTaskRunTime / ulTotalTime;
} }
else else
{ {
@ -8496,19 +8496,41 @@ TickType_t uxTaskResetEventItemValue( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void ) configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void )
{ {
configRUN_TIME_COUNTER_TYPE ulReturn = 0; configRUN_TIME_COUNTER_TYPE ulTotalTime = 0, ulTimeSinceLastSwitchedIn = 0, ulIdleTaskRunTime = 0;
BaseType_t i; BaseType_t i;
traceENTER_ulTaskGetIdleRunTimeCounter(); traceENTER_ulTaskGetIdleRunTimeCounter();
taskENTER_CRITICAL();
{
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
#else
ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
#endif
for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ ) for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )
{ {
ulReturn += xIdleTaskHandles[ i ]->ulRunTimeCounter; if( taskTASK_IS_RUNNING( xIdleTaskHandles[ i ] ) == pdTRUE )
{
#if ( configNUMBER_OF_CORES == 1 )
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ 0 ];
#else
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ xIdleTaskHandles[ i ]->xTaskRunState ];
#endif
} }
else
{
ulTimeSinceLastSwitchedIn = 0;
}
ulIdleTaskRunTime += ( xIdleTaskHandles[ i ]->ulRunTimeCounter + ulTimeSinceLastSwitchedIn );
}
}
taskEXIT_CRITICAL();
traceRETURN_ulTaskGetIdleRunTimeCounter( ulReturn ); traceRETURN_ulTaskGetIdleRunTimeCounter( ulIdleTaskRunTime );
return ulReturn; return ulIdleTaskRunTime;
} }
#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */ #endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
@ -8520,7 +8542,6 @@ TickType_t uxTaskResetEventItemValue( void )
{ {
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn; configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;
configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0; configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0;
BaseType_t i;
traceENTER_ulTaskGetIdleRunTimePercent(); traceENTER_ulTaskGetIdleRunTimePercent();
@ -8530,7 +8551,7 @@ TickType_t uxTaskResetEventItemValue( void )
ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE(); ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();
#endif #endif
ulTotalTime = ulTotalTime * configNUMBER_OF_CORES; ulTotalTime *= configNUMBER_OF_CORES;
/* For percentage calculations. */ /* For percentage calculations. */
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100; ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
@ -8538,11 +8559,7 @@ TickType_t uxTaskResetEventItemValue( void )
/* Avoid divide by zero errors. */ /* Avoid divide by zero errors. */
if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 ) if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
{ {
for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ ) ulRunTimeCounter = ulTaskGetIdleRunTimeCounter();
{
ulRunTimeCounter += xIdleTaskHandles[ i ]->ulRunTimeCounter;
}
ulReturn = ulRunTimeCounter / ulTotalTime; ulReturn = ulRunTimeCounter / ulTotalTime;
} }
else else