PopDripsWatchdogUpdateMetrics

INT64 __fastcall PopDripsWatchdogUpdateMetrics(INT64 a1, INT64 a2, INT64 a3, _DWORD *a4, _QWORD *a5, _DWORD *a6){
  int v7; 
  unsigned int v8; 
  __int64 v9; 
  int v10; 
  int v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  _QWORD *v14; 
  unsigned __int64 v15; 
  bool v16; 
  unsigned int v17; 
  int v18; 
  unsigned int v19; 
  unsigned int v20; 
  INT64 result; 
  UINT64 CpuBusyTime; 
  v7 = *(_DWORD *)(a3 + 28);
  v8 = HIDWORD(qword_140C23560);
  v9 = *(_QWORD *)(a3 + 8);
  v10 = *(_DWORD *)(a3 + 24);
  CpuBusyTime = 0i64;
  *(_BYTE *)(a1 + 592) = byte_140C4FD00 & 1;
  v11 = v7 - *(_DWORD *)(a1 + 636);
  v12 = v9 - *(_QWORD *)(a1 + 616);
  v13 = a2 - *(_QWORD *)(a1 + 560);
  v14 = a5;
  *a4 = v11;
  *v14 = v12;
  LODWORD(v12) = v10 - *(_DWORD *)(a1 + 632);
  *a6 = v12;
  v15 = v13 / 0x2710;
  *(_DWORD *)(a1 + 576) = v13 / 0x2710;
  if( (_DWORD)v12 )
  {
    *(_DWORD *)(a1 + 568) = 0;
    *(_DWORD *)(a1 + 588) = 0;
    *(_DWORD *)(a1 + 632) = v10;
    *(_QWORD *)(a1 + 616) = v9;
    *(_DWORD *)(a1 + 596) = v8;
  }
  else
  {
    v16 = (_DWORD)v15 + *(_DWORD *)(a1 + 568) == 0;
    *(_DWORD *)(a1 + 568) += v15;
    if( !v16 && (unk_140C23574 & 0x40000000) == 0 )
    {
      v17 = *(_DWORD *)(a1 + 596);
      if( v8 < v17 )
        *(_DWORD *)(a1 + 588) = PopBatteryCapacityToRate(v17 - v8, 1000i64 * *(unsigned int *)(a1 + 568));
    }
  }
  if( v11 || !PopDeepSleepEnabled() )
  {
    *(_DWORD *)(a1 + 572) = 0;
    *(_DWORD *)(a1 + 636) = v7;
  }
  else
  {
    *(_DWORD *)(a1 + 572) += v18;
  }
  PopAccumulateNonActivatedCpuTime(0, (UINT64 *)(a1 + 600), &CpuBusyTime);
  v19 = PpmConvertTimeTo(CpuBusyTime, 0x3E8ui64);
  v20 = *(_DWORD *)(a1 + 576);
  *(_DWORD *)(a1 + 580) = v19;
  if( v19 <= v20 )
    result = 100 * v19 / v20;
  else
    result = 100i64;
  *(_DWORD *)(a1 + 584) = result;
  return result;
}

Referenced by:

PopDripsWatchdogDiagnosticWorker