Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Include current task runtime in ulTaskGetRunTimeCounter #1234

Merged
merged 9 commits into from
Feb 12, 2025
46 changes: 40 additions & 6 deletions tasks.c
Original file line number Diff line number Diff line change
Expand Up @@ -8411,15 +8411,37 @@ TickType_t uxTaskResetEventItemValue( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask )
{
TCB_t * pxTCB;
configRUN_TIME_COUNTER_TYPE ulCurrentRunTimeCounter = 0, ulTimeSinceLastSwitchedIn = 0, ulTotalRunTime = 0;
aggarg marked this conversation as resolved.
Show resolved Hide resolved

traceENTER_ulTaskGetRunTimeCounter( xTask );

pxTCB = prvGetTCBFromHandle( xTask );
configASSERT( pxTCB != NULL );

traceRETURN_ulTaskGetRunTimeCounter( pxTCB->ulRunTimeCounter );
taskENTER_CRITICAL();
{
if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )
{
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulCurrentRunTimeCounter );
#else
ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE();
#endif

#if ( configNUMBER_OF_CORES == 1 )
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ 0 ];
#else
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ pxTCB->xTaskRunState ];
#endif
}

return pxTCB->ulRunTimeCounter;
ulTotalRunTime = pxTCB->ulRunTimeCounter + ulTimeSinceLastSwitchedIn;
}
taskEXIT_CRITICAL();

traceRETURN_ulTaskGetRunTimeCounter( ulTotalRunTime );

return ulTotalRunTime;
}

#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
Expand All @@ -8430,11 +8452,17 @@ TickType_t uxTaskResetEventItemValue( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )
{
TCB_t * pxTCB;
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn, ulTaskRunTimeCounter;

traceENTER_ulTaskGetRunTimePercent( xTask );

ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();
ulTaskRunTimeCounter = ulTaskGetRunTimeCounter( xTask );

#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
#else
ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();
#endif

/* For percentage calculations. */
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
Expand All @@ -8445,7 +8473,7 @@ TickType_t uxTaskResetEventItemValue( void )
pxTCB = prvGetTCBFromHandle( xTask );
configASSERT( pxTCB != NULL );

ulReturn = pxTCB->ulRunTimeCounter / ulTotalTime;
ulReturn = ulTaskRunTimeCounter / ulTotalTime;
}
else
{
Expand Down Expand Up @@ -8492,7 +8520,13 @@ TickType_t uxTaskResetEventItemValue( void )

traceENTER_ulTaskGetIdleRunTimePercent();

ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE() * configNUMBER_OF_CORES;
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
#else
ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();
#endif

ulTotalTime = ulTotalTime * configNUMBER_OF_CORES;
aggarg marked this conversation as resolved.
Show resolved Hide resolved

/* For percentage calculations. */
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
Expand Down