PpmHvSnapPerformanceAccumulation
char __fastcall PpmHvSnapPerformanceAccumulation(_QWORD *a1, __int64 a2, __int64 a3, _QWORD *a4){
char v4;
unsigned int v6;
_HVLP_LPCB *LpcbByLpIndex;
__int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
_QWORD *v12;
__int64 v13;
char *v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
unsigned __int64 v19;
__int64 v20;
unsigned int v22;
__int64 v23;
__int64 v24;
char v27;
v4 = 0;
v6 = *(_DWORD *)(a1[1] + 20i64);
v22 = v6;
v23 = 2i64;
while( 1 )
{
while( HvlGetStatsUpdateCounter(v6) )
;
HvlGetReferenceTime();
LpcbByLpIndex = HvlpGetLpcbByLpIndex(v6);
if( LpcbByLpIndex )
{
v9 = *((_QWORD *)LpcbByLpIndex + 4);
v8 = *(_QWORD *)(v9 + 8i64 * (unsigned int)qword_140CED110);
v24 = *(_QWORD *)(v9 + 8i64 * HIDWORD(qword_140CED110));
}
else
{
v8 = 0i64;
v24 = 0i64;
}
if( !HvlGetStatsUpdateCounter(v22) )
break;
v6 = v22;
}
if( !a3 )
{
a1[9] = 0i64;
v10 = -v8;
v11 = -v8 - a1[10];
a1[10] = v10;
if( v11 )
{
v12 = a1 + 14;
v13 = 2i64;
v14 = &v27;
do
{
v15 = *(v12 - 3);
if( v15 )
{
if( *(_BYTE *)(v15 + 33) )
{
v16 = *((_QWORD *)v14 - 2);
v17 = *(_QWORD *)(v15 + 16);
if( v16 == v17 )
{
LODWORD(v19) = *(_DWORD *)(v15 + 24);
}
else
{
v18 = *((_QWORD *)v14 - 1) - *(_QWORD *)(v15 + 8);
*(_QWORD *)(v15 + 16) = v16;
*(_QWORD *)(v15 + 8) = *((_QWORD *)v14 - 1);
v19 = v18 * (unsigned __int64)*(unsigned __int8 *)(v15 + 35) / (v16 - v17);
*(_DWORD *)(v15 + 24) = v19;
}
*(_DWORD *)v14 = v19;
}
else
{
LODWORD(v19) = *(_DWORD *)v14;
}
v13 = v23;
*v12 += v11 * (unsigned int)v19;
}
++v12;
v14 += 24;
v23 = --v13;
}
while( v13 );
}
if( a1[11] )
{
v20 = a1[14];
}
else if( a1[12] )
{
v20 = a1[15];
}
else
{
v20 = 100i64 * a1[13];
}
a4[3] = v20;
if( a1[12] )
v20 = a1[15];
a4[4] = v20;
v4 = 1;
a4[6] = v24;
*a4 = 0i64;
a4[1] = v10;
}
return v4;
}Referenced by:
PpmCheckSnapAllDeliveredPerformance
PpmPerfSnapDeliveredPerformance
PpmResetPerfTimes