Skip to content

Commit 3712f51

Browse files
committed
Update Idle task runtime calculations
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
1 parent 6d040eb commit 3712f51

File tree

1 file changed

+40
-23
lines changed

1 file changed

+40
-23
lines changed

tasks.c

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8415,7 +8415,7 @@ TickType_t uxTaskResetEventItemValue( void )
84158415
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask )
84168416
{
84178417
TCB_t * pxTCB;
8418-
configRUN_TIME_COUNTER_TYPE ulCurrentRunTimeCounter = 0, ulTimeSinceLastSwitchedIn = 0, ulTotalRunTime = 0;
8418+
configRUN_TIME_COUNTER_TYPE ulTotalTime = 0, ulTimeSinceLastSwitchedIn = 0, ulTaskRunTime = 0;
84198419

84208420
traceENTER_ulTaskGetRunTimeCounter( xTask );
84218421

@@ -8427,25 +8427,25 @@ TickType_t uxTaskResetEventItemValue( void )
84278427
if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )
84288428
{
84298429
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8430-
portALT_GET_RUN_TIME_COUNTER_VALUE( ulCurrentRunTimeCounter );
8430+
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
84318431
#else
8432-
ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE();
8432+
ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
84338433
#endif
84348434

84358435
#if ( configNUMBER_OF_CORES == 1 )
8436-
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ 0 ];
8436+
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ 0 ];
84378437
#else
8438-
ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime[ pxTCB->xTaskRunState ];
8438+
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ pxTCB->xTaskRunState ];
84398439
#endif
84408440
}
84418441

8442-
ulTotalRunTime = pxTCB->ulRunTimeCounter + ulTimeSinceLastSwitchedIn;
8442+
ulTaskRunTime = pxTCB->ulRunTimeCounter + ulTimeSinceLastSwitchedIn;
84438443
}
84448444
taskEXIT_CRITICAL();
84458445

8446-
traceRETURN_ulTaskGetRunTimeCounter( ulTotalRunTime );
8446+
traceRETURN_ulTaskGetRunTimeCounter( ulTaskRunTime );
84478447

8448-
return ulTotalRunTime;
8448+
return ulTaskRunTime;
84498449
}
84508450

84518451
#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
@@ -8456,11 +8456,11 @@ TickType_t uxTaskResetEventItemValue( void )
84568456
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )
84578457
{
84588458
TCB_t * pxTCB;
8459-
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn, ulTaskRunTimeCounter;
8459+
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn, ulTaskRunTime;
84608460

84618461
traceENTER_ulTaskGetRunTimePercent( xTask );
84628462

8463-
ulTaskRunTimeCounter = ulTaskGetRunTimeCounter( xTask );
8463+
ulTaskRunTime = ulTaskGetRunTimeCounter( xTask );
84648464

84658465
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
84668466
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
@@ -8477,7 +8477,7 @@ TickType_t uxTaskResetEventItemValue( void )
84778477
pxTCB = prvGetTCBFromHandle( xTask );
84788478
configASSERT( pxTCB != NULL );
84798479

8480-
ulReturn = ulTaskRunTimeCounter / ulTotalTime;
8480+
ulReturn = ulTaskRunTime / ulTotalTime;
84818481
}
84828482
else
84838483
{
@@ -8496,19 +8496,41 @@ TickType_t uxTaskResetEventItemValue( void )
84968496

84978497
configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void )
84988498
{
8499-
configRUN_TIME_COUNTER_TYPE ulReturn = 0;
8499+
configRUN_TIME_COUNTER_TYPE ulTotalTime = 0, ulTimeSinceLastSwitchedIn = 0, ulIdleTaskRunTime = 0;
85008500
BaseType_t i;
85018501

85028502
traceENTER_ulTaskGetIdleRunTimeCounter();
85038503

8504-
for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )
8504+
taskENTER_CRITICAL();
85058505
{
8506-
ulReturn += xIdleTaskHandles[ i ]->ulRunTimeCounter;
8506+
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8507+
portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalTime );
8508+
#else
8509+
ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
8510+
#endif
8511+
8512+
for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )
8513+
{
8514+
if( taskTASK_IS_RUNNING( xIdleTaskHandles[ i ] ) == pdTRUE )
8515+
{
8516+
#if ( configNUMBER_OF_CORES == 1 )
8517+
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ 0 ];
8518+
#else
8519+
ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime[ xIdleTaskHandles[ i ]->xTaskRunState ];
8520+
#endif
8521+
}
8522+
else
8523+
{
8524+
ulTimeSinceLastSwitchedIn = 0;
8525+
}
8526+
ulIdleTaskRunTime += ( xIdleTaskHandles[ i ]->ulRunTimeCounter + ulTimeSinceLastSwitchedIn );
8527+
}
85078528
}
8529+
taskEXIT_CRITICAL();
85088530

8509-
traceRETURN_ulTaskGetIdleRunTimeCounter( ulReturn );
8531+
traceRETURN_ulTaskGetIdleRunTimeCounter( ulIdleTaskRunTime );
85108532

8511-
return ulReturn;
8533+
return ulIdleTaskRunTime;
85128534
}
85138535

85148536
#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
@@ -8520,7 +8542,6 @@ TickType_t uxTaskResetEventItemValue( void )
85208542
{
85218543
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;
85228544
configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0;
8523-
BaseType_t i;
85248545

85258546
traceENTER_ulTaskGetIdleRunTimePercent();
85268547

@@ -8530,19 +8551,15 @@ TickType_t uxTaskResetEventItemValue( void )
85308551
ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();
85318552
#endif
85328553

8533-
ulTotalTime = ulTotalTime * configNUMBER_OF_CORES;
8554+
ulTotalTime *= configNUMBER_OF_CORES;
85348555

85358556
/* For percentage calculations. */
85368557
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
85378558

85388559
/* Avoid divide by zero errors. */
85398560
if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
85408561
{
8541-
for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )
8542-
{
8543-
ulRunTimeCounter += xIdleTaskHandles[ i ]->ulRunTimeCounter;
8544-
}
8545-
8562+
ulRunTimeCounter = ulTaskGetIdleRunTimeCounter();
85468563
ulReturn = ulRunTimeCounter / ulTotalTime;
85478564
}
85488565
else

0 commit comments

Comments
 (0)