Skip to content

Instantly share code, notes, and snippets.

@Zhentar
Created May 26, 2018 21:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Zhentar/d65a0bbdcd489719cbec7b0b00761f85 to your computer and use it in GitHub Desktop.
Save Zhentar/d65a0bbdcd489719cbec7b0b00761f85 to your computer and use it in GitHub Desktop.
HRESULT __fastcall XPerfAddIn::CFramesInfoSource::OnHtmlEvent(XPerfAddIn::CFramesInfoSource *this, XPerfCore::ICursor *a2, const struct _EVENT_RECORD *event_record, const struct _GUID *provider_guid)
{
XPerfAddIn::SHtmlThreadState *v7; // rax
XPerfAddIn::SHtmlThreadState *v8; // rbx
unsigned int v9; // er15
char *v10; // r13
_EVENT_DESCRIPTOR *event_desc; // r12 MAPDST
_EVENT_DESCRIPTOR *v12; // rdx
EDVersionCheckType no; // er9 MAPDST
HRESULT result; // eax
unsigned __int64 v16; // r8
unsigned __int64 v17; // r9
XPerfAddIn::SHtmlDocState *v18; // rbx
__int64 v19; // rax MAPDST
_QWORD *v20; // rax
XPerfAddIn::SHtmlFrame *v21; // rax
__int64 v22; // r13
__int64 v23; // rcx
__int64 v24; // rdx
__int64 v25; // rax
TimeStamp v26; // r13
TimeStamp v27; // rbx
_DWORD *v28; // r8
const unsigned __int16 *v29; // rdx
XPerfAddIn::SHtmlThreadState *v30; // rcx
XPerfAddIn::SHtmlThreadState *v34; // rax
XPerfAddIn::SHtmlThreadState *v35; // r13
__int64 v36; // rax
__int64 v37; // rdx
const _GUID *v38; // rdi
struct_v39_1 *v39; // rbx
__int64 v40; // rax
__int64 v41; // rbx
__int64 v42; // rax
unsigned __int64 v43; // r8
unsigned __int64 v44; // r9
__int64 v45; // rax
unsigned __int64 v46; // rax
_QWORD **v47; // rcx
_QWORD *v48; // r14
_QWORD *v49; // rbx
TimeStamp v50; // rax
__int64 v51; // rsi
_QWORD *v52; // rax
_QWORD *v53; // rdi
const _GUID *v54; // rcx
TimeStamp v55; // r13
signed __int64 v56; // rax
_QWORD *v57; // rcx
_QWORD *v58; // rdx
unsigned __int64 v59; // rax
TimeStamp v60; // rcx
_QWORD *v61; // r8
_QWORD *v62; // r8
__int64 v63; // rcx
struct_iterator *i; // rax
struct_iterator *v65; // r14
_QWORD *v66; // rax
_QWORD *v67; // rbx
__int64 v68; // rax
signed __int64 v69; // rcx
XPerfAddIn::SHtmlPaintLayer *v70; // rsi
__int64 v71; // rcx
__int64 v72; // rax
__int64 v73; // rax
__int64 v74; // rax
_EVENT_DESCRIPTOR *v75; // rdx
_EVENT_DESCRIPTOR *v78; // rdx
_EVENT_DESCRIPTOR *v81; // rdx
_EVENT_DESCRIPTOR *v84; // rdx
_EVENT_DESCRIPTOR *v87; // rdx
_EVENT_DESCRIPTOR *v90; // rdx
__int64 v93; // rbx
__int64 v94; // rax
_EVENT_DESCRIPTOR *v95; // rdx
XPerfAddIn::SHtmlThreadState *v98; // rax
XPerfAddIn::SHtmlThreadState *v99; // rbx
__int64 v100; // rax
signed int v101; // er12
__int64 v102; // rcx
XPerfAddIn::SHtmlPaintLayer *v103; // r13
_DWORD *v104; // r8
unsigned __int64 *v105; // r8
_DWORD *v106; // r8
_GUID *v107; // r8
_DWORD *v108; // r8
const _GUID *v109; // rax
unsigned __int64 *v110; // r8
const _GUID *v111; // r14
__int64 v112; // rdx
__int64 v113; // rdx
const wchar_t *v114; // rcx
wchar_t *v115; // rax
XPerfAddIn::SHtmlProcessState *v116; // rbx
_EVENT_DESCRIPTOR *v117; // rdx
XPerfAddIn::SHtmlThreadState *v120; // rax
XPerfAddIn::SHtmlThreadState *v121; // rbx
__int64 v122; // rax
__int64 v123; // rcx
XPerfAddIn::SHtmlPaintLayer *v124; // rsi
unsigned int v125; // edx
XPerfCore::CFIRect *cfirect; // rbx
_EVENT_DESCRIPTOR *v127; // rdx
XPerfAddIn::SHtmlThreadState *v130; // rax
XPerfAddIn::SHtmlThreadState *v131; // rbx
__int64 v132; // rax
XPerfAddIn::SHtmlThreadState *v133; // r8
__int64 v134; // r11
__int64 v135; // rdx
__int64 v136; // rax
_QWORD *v137; // rax
__int64 v138; // rcx
unsigned __int64 v139; // r9
__int64 v140; // rcx
XPerfAddIn::SHtmlPaintLayer *v141; // rbx
_EVENT_DESCRIPTOR *v142; // rdx
XPerfAddIn::SHtmlThreadState *v145; // rax
XPerfAddIn::SHtmlThreadState *v146; // rbx
__int64 v147; // rax
__int64 v148; // rcx
XPerfAddIn::SHtmlPaintLayer *v149; // rbx
_EVENT_DESCRIPTOR *v150; // rdx
XPerfAddIn::SHtmlThreadState *v153; // rax
XPerfAddIn::SHtmlThreadState *v154; // rbx
__int64 v155; // rax
__int64 v156; // rcx
XPerfAddIn::SHtmlPaintLayer *v157; // rbx
_EVENT_DESCRIPTOR *v158; // rdx
XPerfAddIn::SHtmlProcessState *v161; // rbx
XPerfAddIn::SHtmlSBLayerObject *v162; // rbx
_EVENT_DESCRIPTOR *v163; // rdx
XPerfAddIn::SHtmlProcessState *v166; // r13
XPerfAddIn::SHtmlSBLayerObject *v167; // rbx
_EVENT_DESCRIPTOR *v168; // rdx
XPerfAddIn::SHtmlProcessState *v171; // rbx
unsigned __int64 v172; // rcx
XPerfAddIn::SHtmlSBLayerObject *v173; // rbx
__int64 v174; // r13
__int64 v175; // rdx
__int64 v176; // rax
signed __int64 v177; // rbx
XPerfAddIn::SHtmlThreadState *v178; // rcx
_EVENT_DESCRIPTOR *v179; // rdx
__int64 v182; // rax
XPerfAddIn::SHtmlThreadState *v183; // rbx
_EVENT_DESCRIPTOR *v184; // rdx
XPerfAddIn::SHtmlThreadState *v187; // rbx
const wchar_t *v188; // rdx
_EVENT_DESCRIPTOR *v189; // rdx
_EVENT_DESCRIPTOR *v192; // rdx
_EVENT_DESCRIPTOR *v195; // rdx
_EVENT_DESCRIPTOR *v198; // rdx
_EVENT_DESCRIPTOR *v201; // rdx
signed int v204; // ebx
__int64 v205; // rax
__int64 v206; // rdi
signed __int64 v207; // rbx
__int64 v208; // rax
__int64 v209; // rax
void *v210; // rcx
signed __int64 v211; // rdx
_EVENT_DESCRIPTOR *v212; // rdx
_EVENT_DESCRIPTOR *v215; // rdx
_EVENT_DESCRIPTOR *v218; // rdx
unsigned __int64 v221; // r14
unsigned __int64 v222; // rbx
__int64 v223; // r12
__int64 v224; // rbx
__int64 v225; // rax
__int64 v226; // rax
XPerfAddIn::SHtmlThreadState **v227; // rax
XPerfAddIn::SHtmlThreadState *v229; // rsi
__int64 v230; // rbx
XPerfAddIn::SHtmlThreadState *v231; // rax
_QWORD *v232; // rax
_QWORD *v233; // rdi
_QWORD *j; // rbx
__int64 v235; // rax
const unsigned __int16 **v236; // r9
const unsigned __int16 *v237; // r14
__int64 v238; // rbx
struct XPerfAddIn::SHtmlElement *v240; // rbx
bool v241; // zf
void (__fastcall *v242)(XPerfCore::ICursor *, void *); // rax
struct XPerfAddIn::SHtmlWork *v243; // rax
__int64 v244; // rdi
__int64 v245; // rax
XPerfAddIn::SHtmlThreadState *v246; // rbx
unsigned __int64 v247; // [rsp+48h] [rbp-80h]
TimeStamp time_1; // [rsp+50h] [rbp-78h]
TimeStamp time; // [rsp+58h] [rbp-70h]
const _GUID *a3a; // [rsp+60h] [rbp-68h]
unsigned __int64 a5; // [rsp+68h] [rbp-60h]
XPerfAddIn::SHtmlThreadState *v252; // [rsp+70h] [rbp-58h]
__int64 v253; // [rsp+78h] [rbp-50h]
wchar_t a4a[8]; // [rsp+1A8h] [rbp+E0h]
XPerfAddIn *v255; // [rsp+1B8h] [rbp+F0h]
unsigned __int64 v256; // [rsp+1C0h] [rbp+F8h]
int v257; // [rsp+1C8h] [rbp+100h]
int v258; // [rsp+1CCh] [rbp+104h]
__int64 v259; // [rsp+1D0h] [rbp+108h]
int v260; // [rsp+1D8h] [rbp+110h]
int v261; // [rsp+1DCh] [rbp+114h]
int v262; // [rsp+1E0h] [rbp+118h]
int v263; // [rsp+1E4h] [rbp+11Ch]
v253 = -2i64;
a3a = provider_guid;
a2->vtable->GetCurrentTimestamp(a2, &time);
v7 = (XPerfAddIn::SHtmlThreadState *)this->processInfoSource->vtable->QueryThread(this->processInfoSource, &time, event_record->EventHeader.ThreadId, 0i64);
v8 = v7;
v252 = v7;
v9 = 0;
if ( !v7 )
return 262400;
v10 = &v7->gap4[28];
if ( !*(_QWORD *)&v7->gap4[28] )
return 262400;
event_desc = &event_record->EventHeader.EventDescriptor;
if ( a3a->Data1 != 0x4614CA5D9E3B3947i64 || a3a->Data2 != 0x44720E4E627BA291i64 )
return 262400;
if ( !XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(
(XPerfAddIn::CFramesInfoSource *)EDVersionCheckType_None,
&event_record->EventHeader.EventDescriptor,
&MSHTML_CDOC_ONPAINT_START_V1,
EDVersionCheckType_None) )
{
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v12, &MSHTML_CDOC_ONPAINT_STOP_V1, no) )
{
v34 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v35 = v34;
v252 = v34;
v36 = (v34->field_68 - v34->field_60) >> 3;
if ( v36 )
v37 = *(_QWORD *)(v35->field_68 - 8i64);
else
v37 = 0i64;
if ( v37 )
{
if ( v36 )
v38 = *(const _GUID **)(v35->field_68 - 8i64);
else
v38 = 0i64;
a3a = v38;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v38[1].Data2 = time_1;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
if ( (v35->field_88 - v35->field_80) & 0xFFFFFFFFFFFFFFF8ui64 )
{
v39 = *(struct_v39_1 **)(v35->field_88 - 8);
if ( !wcscmp_0(v39->pwchar20, L"Painting") )
{
v40 = v35->field_88;
if ( v35->field_80 != v40 )
v35->field_88 = v40 - 8;
v39->timestamp8 = time_1;
}
}
while ( (v35->field_88 - v35->field_80) & 0xFFFFFFFFFFFFFFF8ui64 )
{
v41 = *(_QWORD *)(v35->field_88 - 8);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
*(_QWORD *)(v41 + 8) = time_1;
v42 = v35->field_88;
if ( v35->field_80 != v42 )
v35->field_88 = v42 - 8;
}
std::list<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>::_Assign_rv((__int64 **)&v38[19].Data2, &v35->html_work_list_A0);
v45 = v35->field_58;
if ( v45 )
{
v38[4].Data2 = v45;
v35->field_58 = 0i64;
}
else
{
v38[4].Data2 = v38[1].Data1;
}
v46 = (unsigned __int64)stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlDocState,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlDocState>>>::operator[](
v35,
(__int64 *)&v38[4],
v43,
v44);
a5 = v46;
*(_QWORD *)(v46 + 8) = 0i64;
v47 = (_QWORD **)v38[10].Data1;
v48 = *v47;
if ( *v47 != v47 )
{
do
{
v49 = v48;
v48 = (_QWORD *)*v48;
v49[3] = v49[2];
if ( v49[5] && (v50 = v49[50], (time_1 = v50) != 0) )
{
v51 = 0i64;
v52 = *(_QWORD **)(v50 + 48);
v53 = (_QWORD *)*v52;
if ( (_QWORD *)*v52 != v52 )
{
v54 = a3a;
v55 = time_1;
do
{
if ( v53[2] > (signed __int64)v54[1].Data2 )
break;
v56 = v53[3];
if ( !v56 || v56 >= (signed __int64)v54[1].Data1 )
{
time_1 = (TimeStamp)(v53 + 2);
std::vector<XPerfAddIn::CDxDmaPacket *,std::allocator<XPerfAddIn::CDxDmaPacket *>>::push_back(v49 + 46, &time_1);
v57 = v53 + 4;
time = (TimeStamp)(v53 + 4);
v58 = v49 + 42;
v59 = v49[43];
if ( (unsigned __int64)(v53 + 4) >= v59 || *v58 > (unsigned __int64)v57 )
{
if ( v59 == v49[44] )
{
std::vector<unsigned __int64,std::allocator<unsigned __int64>>::_Reserve(v49 + 42);
v58 = v49 + 42;
v57 = (_QWORD *)time;
}
v62 = (_QWORD *)v58[1];
if ( v62 )
*v62 = *v57;
}
else
{
v60 = ((signed __int64)v57 - *v58) >> 3;
time = v60;
if ( v59 == v49[44] )
{
std::vector<unsigned __int64,std::allocator<unsigned __int64>>::_Reserve(v49 + 42);
v58 = v49 + 42;
v60 = time;
}
v61 = (_QWORD *)v58[1];
if ( v61 )
*v61 = *(_QWORD *)(*v58 + 8 * v60);
}
v58[1] += 8i64;
if ( v51 < v53[2] )
v51 = v53[2];
v54 = a3a;
}
v53 = (_QWORD *)*v53;
}
while ( v53 != *(_QWORD **)(v55 + 48) );
}
v49[7] = v51;
v38 = a3a;
}
else
{
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>,0>>::erase(
&v38[9].Data2,
&v247,
v49);
}
}
while ( v48 != (_QWORD *)v38[10].Data1 );
v35 = v252;
v46 = a5;
}
v63 = *(_QWORD *)(v46 + 16);
if ( (const _GUID *)(*(_QWORD *)v63 + 16i64) != v38 )
{
for ( i = *(struct_iterator **)(v63 + 8); &i->char10 != (char *)v38; i = i->next )
;
v65 = i->next;
v66 = *(_QWORD **)&v65[10].gap0[6];
v67 = (_QWORD *)*v66;
if ( (_QWORD *)*v66 != v66 )
{
do
{
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
&v38[9].Data2,
&time_1,
v67 + 3);
if ( time_1 == v38[10].Data1 )
{
v68 = v67[50];
if ( v68 )
{
v69 = *(_QWORD *)(v68 + 32);
if ( !v69 || v69 >= (signed __int64)v38[1].Data1 )
{
v70 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
(__int64)&v38[9].Data2,
v67 + 3);
XPerfAddIn::SHtmlPaintLayer::operator=(v70, (XPerfAddIn::SHtmlPaintLayer *)(v67 + 3));
v70->field_A8 |= 0x80000000;
v71 = v70->field_B8;
if ( v71 != v70->field_C0 )
v70->field_C0 = v71;
v72 = v70->field_D8;
if ( v72 != v70->field_E0 )
v70->field_E0 = v72;
v73 = v70->field_F8;
if ( v73 != v70->field_100 )
v70->field_100 = v73;
}
}
}
v67 = (_QWORD *)*v67;
}
while ( v67 != *(_QWORD **)&v65[10].gap0[6] );
v35 = v252;
}
}
}
v74 = v35->field_68;
if ( v35->field_60 != v74 )
v35->field_68 = v74 - 8;
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, event_desc, &MSHTML_COMPOSITION_LAYER_INVALIDATE, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v75, &MSHTML_VIEW_ONVIEWQ_INFO, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v78, &MSHTML_CVIEW_INVALIDATERECT_INFO, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v81, &MSHTML_CVIEW_INVALIDATERGN_INFO, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v84, &MSHTML_CDOC_INVALIDATE_INFO, no) )
{
v246 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
if ( !v246->field_58 )
{
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v246->field_58 = time_1;
}
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v87, &MSHTML_DISPNODE_DESCRIPTION, no) )
{
v93 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"DispNode");
if ( result < 0 )
return result;
v94 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlDispNodeDesc,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlDispNodeDesc>>>::operator[](
v93 + 224,
&time);
*(_QWORD *)v94 = time;
result = XPerfAddIn::CFramesInfoSource::GetEventString(this, event_record, L"NodeDescription", (wchar_t *)(v94 + 8));
LABEL_83:
if ( result < 0 )
return result;
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v90, &MSHTML_COMPOSITION_DESTINATION_PRERENDER_INFO, no) )
{
a5 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
v98 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v99 = v98;
if ( (v98->field_68 - v98->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v100 = *(_QWORD *)(v98->field_68 - 8i64);
else
v100 = 0i64;
if ( v100 )
{
time_1 = 0i64;
time = 0i64;
v101 = 8;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"SBLayer");
if ( result < 0 )
return result;
if ( (v99->field_68 - v99->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v102 = *(_QWORD *)(v99->field_68 - 8i64);
else
v102 = 0i64;
v103 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
v102 + 152,
(__int64 *)&time);
a3a = (const _GUID *)v103;
time_1 = 0i64;
v103->field_10 = 0i64;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &v103->field_10, 8ui64, &time_1, L"DispNode");
time_1 = 0i64;
v103->field_8 = 0i64;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &v103->field_8, 8ui64, &time_1, L"DispLayer");
time_1 = 0i64;
*(_DWORD *)&v103->gap20[56] = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &v103->gap20[56], 4ui64, &time_1, L"LayerWidth");
v104 = (_DWORD *)((char *)&a3a[5].Data2 + 4);
time_1 = 0i64;
*v104 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v104, 4ui64, &time_1, L"LayerHeight");
v105 = &a3a[4].Data2;
time_1 = 0i64;
*(_DWORD *)v105 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v105, 4ui64, &time_1, L"GlobalLayerLeft");
v106 = (_DWORD *)((char *)&a3a[4].Data2 + 4);
time_1 = 0i64;
*v106 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v106, 4ui64, &time_1, L"GlobalLayerTop");
v107 = (_GUID *)&a3a[5];
time_1 = 0i64;
LODWORD(v107->Data1) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v107, 4ui64, &time_1, L"GlobalLayerRight");
v108 = (_DWORD *)((char *)&a3a[5].Data1 + 4);
time_1 = 0i64;
*v108 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v108, 4ui64, &time_1, L"GlobalLayerBottom");
v109 = a3a;
time_1 = 0i64;
LODWORD(a3a[10].Data1) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)&v109[10], 4ui64, &time_1, L"DestinationType");
v110 = &a3a[10].Data2;
time_1 = 0i64;
*(_DWORD *)v110 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v110, 4ui64, &time_1, L"Flags");
stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlDispNodeDesc,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlDispNodeDesc>>>::operator[](
a5 + 224,
&v103->field_10);
v111 = a3a;
std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short>>::assign((void *)&a3a[24]);
if ( (*(unsigned int (__fastcall **)(__int64, __int64))(*(_QWORD *)this->blah2 + 32i64))(this->blah2, v112) < 0x2082 )
{
if ( (*(unsigned int (__fastcall **)(__int64, __int64))(*(_QWORD *)this->blah2 + 32i64))(this->blah2, v113) != 8321
|| (a3a = 0i64, (*(void (__fastcall **)(__int64, const _GUID **))(*(_QWORD *)this->blah1 + 240i64))(this->blah1, &a3a), !a3a)
|| (v114 = (const wchar_t *)a3a->Data2) == 0i64
|| !wcsstr(v114, L"fbl_ie") )
{
*(_QWORD *)a4a = 0i64;
*(_DWORD *)&a4a[4] = 6;
*(_DWORD *)&a4a[6] = 1;
v255 = (XPerfAddIn *)8589934593i64;
v256 = 17179869186i64;
v257 = 3;
v258 = 3;
v259 = 21474836484i64;
v260 = 5;
v261 = 6;
v262 = 7;
v263 = 7;
v115 = a4a;
while ( *(_DWORD *)v115 != LODWORD(v111[10].Data1) )
{
++v9;
v115 += 4;
if ( v9 >= 8 )
goto LABEL_104;
}
v101 = *(_DWORD *)&a4a[4 * v9 + 2];
LABEL_104:
LODWORD(v111[10].Data1) = v101;
}
}
v116 = (XPerfAddIn::SHtmlProcessState *)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
&v252->gap4[28]);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v111[23].Data2 = (unsigned __int64)XPerfAddIn::SHtmlProcessState::GetSBLayerObject(v116, time, time_1);
}
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v95, &MSHTML_COMPOSITION_SCROLLER_PVR, no) )
{
v120 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v121 = v120;
if ( (v120->field_68 - v120->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v122 = *(_QWORD *)(v120->field_68 - 8i64);
else
v122 = 0i64;
if ( !v122 )
return 262400;
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"Scroller");
if ( result < 0 )
return result;
v123 = (v121->field_68 - v121->field_60) & 0xFFFFFFFFFFFFFFF8ui64 ? *(_QWORD *)(v121->field_68 - 8i64) : 0i64;
v124 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
v123 + 152,
(__int64 *)&time);
time_1 = 0i64;
LODWORD(v252) = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &v252, 4ui64, &time_1, L"RectType");
if ( result < 0 )
return result;
v125 = (unsigned int)v252;
if ( (v124->field_120 - v124->field_118) >> 4 <= (unsigned __int64)(unsigned int)v252 )
{
std::vector<XPerfCore::CFIRect,std::allocator<XPerfCore::CFIRect>>::resize(&v124->field_118, (unsigned int)((_DWORD)v252 + 1));
v125 = (unsigned int)v252;
}
cfirect = (XPerfCore::CFIRect *)(v124->field_118 + 16i64 * v125);
time_1 = 0i64;
cfirect->left = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, cfirect, 4ui64, &time_1, L"left");
if ( result < 0 )
return result;
time_1 = 0i64;
cfirect->top = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &cfirect->top, 4ui64, &time_1, L"top");
if ( result < 0 )
return result;
time_1 = 0i64;
cfirect->right = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &cfirect->right, 4ui64, &time_1, L"right");
if ( result < 0 )
return result;
time_1 = 0i64;
cfirect->bottom = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &cfirect->bottom, 4ui64, &time_1, L"bottom");
goto LABEL_83;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v117, &MSHTML_COMPOSITION_TRIM_SBLAYER, no) )
{
v130 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v131 = v130;
if ( (v130->field_68 - v130->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v132 = *(_QWORD *)(v130->field_68 - 8i64);
else
v132 = 0i64;
if ( !v132 )
return 262400;
time_1 = 0i64;
a3a = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &a3a, 8ui64, &time_1, L"Object");
if ( result < 0 )
return result;
v133 = 0i64;
v252 = 0i64;
v134 = v131->field_68;
v135 = (v131->field_68 - v131->field_60) >> 3;
v136 = v135 ? *(_QWORD *)(v134 - 8) : 0i64;
v137 = *(_QWORD **)(v136 + 160);
while ( 1 )
{
v137 = (_QWORD *)*v137;
v138 = v135 ? *(_QWORD *)(v134 - 8) : 0i64;
if ( v137 == *(_QWORD **)(v138 + 160) )
break;
if ( v137[2] >= (unsigned __int64)a3a )
{
v139 = v137[2] - (_QWORD)a3a;
if ( v139 < 0x1000 && (!v133 || (char *)v133 - (char *)a3a > v139) )
v133 = (XPerfAddIn::SHtmlThreadState *)v137[2];
}
}
v252 = v133;
if ( !v133 )
return 262400;
if ( v135 )
v140 = *(_QWORD *)(v134 - 8);
else
v140 = 0i64;
v141 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
v140 + 152,
(__int64 *)&v252);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"RectsLength");
if ( result < 0 )
return result;
std::vector<XPerfCore::CFIRect,std::allocator<XPerfCore::CFIRect>>::resize(&v141->field_F8, time >> 4);
time = (v141->field_100 - v141->field_F8) & 0xFFFFFFFFFFFFFFF0ui64;
a5 = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)v141->field_F8, time, &a5, L"Rects");
goto LABEL_83;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v127, &MSHTML_COMPOSITION_LAYER_PAINTRECT, no) )
{
v145 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v146 = v145;
if ( (v145->field_68 - v145->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v147 = *(_QWORD *)(v145->field_68 - 8i64);
else
v147 = 0i64;
if ( !v147 )
return 262400;
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"DispLayer");
if ( result < 0 )
return result;
v148 = (v146->field_68 - v146->field_60) & 0xFFFFFFFFFFFFFFF8ui64 ? *(_QWORD *)(v146->field_68 - 8i64) : 0i64;
v149 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
v148 + 152,
(__int64 *)&time);
v247 = 0i64;
time_1 = 0i64;
LODWORD(v247) = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &v247, 4ui64, &time_1, L"left");
if ( result < 0 )
return result;
time_1 = 0i64;
HIDWORD(v247) = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (char *)&v247 + 4, 4ui64, &time_1, L"top");
if ( result < 0 )
return result;
time_1 = 0i64;
LODWORD(time_1) = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time_1, 4ui64, &time_1, L"right");
if ( result < 0 )
return result;
time_1 = 0i64;
HIDWORD(time_1) = 0;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (char *)&time_1 + 4, 4ui64, &time_1, L"bottom");
if ( result < 0 )
return result;
std::vector<XPerfCore::CFIRect,std::allocator<XPerfCore::CFIRect>>::push_back(&v149->field_D8, &v247);
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v142, &MSHTML_COMPOSITION_DESTINATION_INVALID_REGION, no) )
{
v153 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v154 = v153;
if ( (v153->field_68 - v153->field_60) & 0xFFFFFFFFFFFFFFF8ui64 )
v155 = *(_QWORD *)(v153->field_68 - 8i64);
else
v155 = 0i64;
if ( !v155 )
return 262400;
time_1 = 0i64;
a3a = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &a3a, 8ui64, &time_1, L"Object");
if ( result < 0 )
return result;
v156 = (v154->field_68 - v154->field_60) & 0xFFFFFFFFFFFFFFF8ui64 ? *(_QWORD *)(v154->field_68 - 8i64) : 0i64;
v157 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlPaintLayer,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlPaintLayer>>>::operator[](
v156 + 152,
(__int64 *)&a3a);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"RectsLength");
if ( result < 0 )
return result;
std::vector<XPerfCore::CFIRect,std::allocator<XPerfCore::CFIRect>>::resize(&v157->field_B8, time >> 4);
time = (v157->field_C0 - v157->field_B8) & 0xFFFFFFFFFFFFFFF0ui64;
a5 = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)v157->field_B8, time, &a5, L"Rects");
goto LABEL_83;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v150, &MSHTML_COMPOSITION_CREATE_SBLAYER, no) )
{
v161 = (XPerfAddIn::SHtmlProcessState *)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"Object");
if ( result < 0 )
return result;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v162 = XPerfAddIn::SHtmlProcessState::GetSBLayerObject(v161, time, time_1);
a2->vtable->GetCurrentTimestamp(a2, &a5);
*(_QWORD *)&v162->gap4[20] = a5;
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v158, &MSHTML_COMPOSITION_DESTROY_SBLAYER, no) )
{
v166 = (XPerfAddIn::SHtmlProcessState *)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"Object");
if ( result < 0 )
return result;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v167 = XPerfAddIn::SHtmlProcessState::GetSBLayerObject(v166, time, time_1);
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
v166,
&a5,
v167);
std::_Hash<std::_Hset_traits<XPerfAddIn::SXamlThreadState *,CSPHashCompare<XPerfAddIn::SXamlThreadState *,std::less<XPerfAddIn::SXamlThreadState *>>,std::allocator<XPerfAddIn::SXamlThreadState *>,0>>::erase(
v166,
&v247);
a2->vtable->GetCurrentTimestamp(a2, &a5);
*(_QWORD *)&v167->gap4[28] = a5;
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v163, &MSHTML_COMPOSITION_CREATE_SBLAYER_SURFACE, no) )
{
v171 = (XPerfAddIn::SHtmlProcessState *)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"SBLayer");
if ( result < 0 )
return result;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v173 = XPerfAddIn::SHtmlProcessState::GetSBLayerObject(v171, time, time_1);
v252 = (XPerfAddIn::SHtmlThreadState *)v173;
if ( v173->field_28 )
{
a2->vtable->GetCurrentTimestamp(a2, &a5);
v172 = a5;
*(_QWORD *)(v173->field_28 + 8) = a5;
}
_mm_storeu_si128((__m128i *)a4a, (__m128i)0i64);
v255 = 0i64;
v256 = 0i64;
v259 = 0i64;
v174 = v173->field_30;
v175 = std::_List_val<XPerfAddIn::SHtmlSBLayerDCompSurface,std::allocator<XPerfAddIn::SHtmlSBLayerDCompSurface>>::_Buynode<XPerfAddIn::SHtmlSBLayerDCompSurface>(
v172,
v173->field_30,
*(_QWORD *)(v174 + 8),
a4a);
v176 = v173->field_38;
if ( (unsigned __int64)(384307168202282324i64 - v176) < 1 )
std::_Xlength_error("list<T> too long");
v173->field_38 = v176 + 1;
*(_QWORD *)(v174 + 8) = v175;
**(_QWORD **)(v175 + 8) = v175;
v177 = *(_QWORD *)(v173->field_30 + 8) + 16i64;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
*(_QWORD *)v177 = time_1;
time_1 = 0i64;
*(_QWORD *)(v177 + 16) = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v177 + 16), 8ui64, &time_1, L"DCompSurface");
if ( result < 0 )
return result;
a5 = 0i64;
*(_DWORD *)(v177 + 32) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v177 + 32), 4ui64, &a5, L"Width");
a5 = 0i64;
*(_DWORD *)(v177 + 36) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v177 + 36), 4ui64, &a5, L"Height");
a5 = 0i64;
*(_DWORD *)(v177 + 24) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v177 + 24), 4ui64, &a5, L"Flags");
a5 = 0i64;
*(_DWORD *)(v177 + 28) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v177 + 28), 4ui64, &a5, L"AlphaMode");
++*(_DWORD *)(v177 + 28);
v178 = v252;
*(_QWORD *)(v177 + 40) = v252;
*(_QWORD *)&v178->gap4[36] = v177;
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v168, &MSHTML_CMARKUP_LAYOUT_START_V1, no) )
{
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"View");
if ( result < 0 )
return result;
v182 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
*(_QWORD *)stdext::hash_map<unsigned __int64,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>>>::operator[](
v182 + 312,
&time) = v8;
v183 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v29 = L"Layout";
goto LABEL_261;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v179, &MSHTML_CMARKUP_LAYOUT_STOP_V1, no) )
{
v187 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
if ( !((v187->field_88 - v187->field_80) & 0xFFFFFFFFFFFFFFF8ui64) )
return 262400;
v188 = L"Layout";
LABEL_256:
v244 = *(_QWORD *)(v187->field_88 - 8);
if ( !wcscmp_0(*(const wchar_t **)(v244 + 32), v188) )
{
v245 = v187->field_88;
if ( v187->field_80 != v245 )
v187->field_88 = v245 - 8;
*(_QWORD *)(v244 + 8) = time_1;
}
return 262400;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v184, &MSHTML_FORMATCALCULATION_COMPUTEFORMATS_START_V1, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v189, &MSHTML_CVIEW_EXECUTEINVALIDATIONTASKS_START, no) )
{
v183 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v29 = L"Formatting";
LABEL_261:
v30 = v183;
goto LABEL_262;
}
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v192, &MSHTML_FORMATCALCULATION_COMPUTEFORMATS_STOP_V1, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v195, &MSHTML_CVIEW_EXECUTEINVALIDATIONTASKS_STOP, no) )
{
v187 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
if ( !((v187->field_88 - v187->field_80) & 0xFFFFFFFFFFFFFFF8ui64) )
return 262400;
v188 = L"Formatting";
goto LABEL_256;
}
if ( !XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v198, &MSHTML_DDTRACKER_STRING_VALUE, no) )
{
if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v201, &MSHTML_DDTRACKER_START, no)
|| XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v212, &MSHTML_DDTRACKER_STOP, no) )
{
v252 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
if ( (v252->field_88 - v252->field_80) & 0xFFFFFFFFFFFFFFF8ui64 )
{
*(_QWORD *)a4a = 0i64;
*(_QWORD *)&a4a[4] = 0i64;
v255 = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, a4a, 0x18ui64, &v247, L"A");
if ( result < 0 )
return result;
if ( *(_QWORD *)a4a == 2401651649639612416i64 )
{
a5 = *(_QWORD *)&a4a[4];
time = 0i64;
a3a = 0i64;
v237 = XPerfAddIn::GetDDTTaskName(v255, (unsigned __int64)&time, (const unsigned __int16 **)&a3a, v236);
if ( v237 )
{
v238 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v240 = (struct XPerfAddIn::SHtmlElement *)XPerfAddIn::STimedMapBag<XPerfAddIn::SHtmlElement,unsigned __int64>::Get(v238 + 112, a5, time_1);
if ( a3a )
*((_QWORD *)v240 + 25) = a3a;
v241 = XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, event_desc, &MSHTML_DDTRACKER_START, EDVersionCheckType_None) == 0;
v242 = a2->vtable->GetCurrentTimestamp;
if ( v241 )
{
v242(a2, &time_1);
XPerfAddIn::SHtmlThreadState::EndHtmlWork(v252, (const unsigned __int16 *)time, (const struct TimeStamp *)&time_1, v240);
}
else
{
v242(a2, &time_1);
v243 = XPerfAddIn::SHtmlThreadState::StartHtmlWork(v252, (const unsigned __int16 *)time, (const struct TimeStamp *)&time_1);
*((_QWORD *)v243 + 9) = v237;
*((_QWORD *)v243 + 7) = v240;
}
}
}
}
}
else if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v215, &MSHTML_RENDERTASK_QUEUED, no) )
{
a5 = (unsigned __int64)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"RenderTask");
if ( result < 0 )
return result;
memset_0(a4a, 0, 0x30ui64);
*(_QWORD *)&a4a[4] = 0i64;
std::list<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>::list<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>(&v255);
v259 = 0i64;
v221 = a5;
v222 = a5 + 216;
std::list<XPerfAddIn::SHtmlRenderRequest,std::allocator<XPerfAddIn::SHtmlRenderRequest>>::_Insert_rv<XPerfAddIn::SHtmlRenderRequest>(
a5 + 216,
*(_QWORD *)(a5 + 216),
a4a);
std::list<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>,std::allocator<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>>>::~list<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>,std::allocator<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>>>(&v255);
v223 = *(_QWORD *)(*(_QWORD *)v222 + 8i64);
*(_QWORD *)(v223 + 16) = time;
a2->vtable->GetCurrentTimestamp(a2, &time_1);
*(_QWORD *)(v223 + 24) = time_1;
while ( (*(_QWORD *)(v221 + 136) - *(_QWORD *)(v221 + 128)) & 0xFFFFFFFFFFFFFFF8ui64 )
{
v224 = *(_QWORD *)(*(_QWORD *)(v221 + 136) - 8i64);
a2->vtable->GetCurrentTimestamp(a2, &time_1);
*(_QWORD *)(v224 + 8) = time_1;
v225 = *(_QWORD *)(v221 + 136);
if ( *(_QWORD *)(v221 + 128) != v225 )
*(_QWORD *)(v221 + 136) = v225 - 8;
}
std::list<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>::_Assign_rv((__int64 **)(v223 + 32), (__int64 **)(v221 + 160));
*(_QWORD *)(v223 + 56) = *(_QWORD *)(v221 + 88);
*(_QWORD *)(v221 + 88) = 0i64;
v226 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
v227 = (XPerfAddIn::SHtmlThreadState **)stdext::hash_map<unsigned __int64,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>>>::operator[](
v226 + 400,
&time);
*v227 = v252;
}
else if ( XPerfAddIn::CFramesInfoSource::MatchEventDescriptor(this, v218, &MSHTML_RENDERTASK_PROCESSING_START, no) )
{
v19 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
v229 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"RenderTask");
if ( result < 0 )
return result;
v230 = *(_QWORD *)&v229->gapA8[40];
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
v19 + 400,
&time_1,
&time);
if ( time_1 != *(_QWORD *)(v19 + 408) )
{
if ( !v230 )
{
v230 = *(_QWORD *)(time_1 + 24);
*(_QWORD *)&v229->gapA8[40] = v230;
}
std::_Hash<std::_Hset_traits<XPerfAddIn::SXamlThreadState *,CSPHashCompare<XPerfAddIn::SXamlThreadState *,std::less<XPerfAddIn::SXamlThreadState *>>,std::allocator<XPerfAddIn::SXamlThreadState *>,0>>::erase(
v19 + 400,
&v247);
}
if ( v230 )
{
time_1 = *(_QWORD *)&v229->gapA8[40];
v231 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&time_1);
a3a = (const _GUID *)&v231->gapA8[48];
v232 = *(_QWORD **)&v231->gapA8[48];
v233 = (_QWORD *)*v232;
for ( j = (_QWORD *)*v232; j != v232; j = (_QWORD *)*j )
{
if ( j[2] == time )
break;
}
if ( j != v232 )
{
while ( 1 )
{
std::list<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>::_Insert<std::_List_iterator<std::_List_val<XPerfAddIn::SHtmlWork *,std::allocator<XPerfAddIn::SHtmlWork *>>>>(
&v229->html_work_list_A0,
*v229->html_work_list_A0,
*(_QWORD *)v233[4],
v233[4]);
v235 = v233[7];
if ( v235 && (!v229->field_58 || v229->field_58 > v235) )
v229->field_58 = v235;
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
v19 + 400,
&time_1,
v233 + 2);
if ( time_1 != *(_QWORD *)(v19 + 408) )
std::_Hash<std::_Hset_traits<XPerfAddIn::SXamlThreadState *,CSPHashCompare<XPerfAddIn::SXamlThreadState *,std::less<XPerfAddIn::SXamlThreadState *>>,std::allocator<XPerfAddIn::SXamlThreadState *>,0>>::erase(
v19 + 400,
&v247);
if ( v233 == j )
break;
v233 = (_QWORD *)*v233;
}
std::list<XPerfAddIn::SHtmlRenderRequest,std::allocator<XPerfAddIn::SHtmlRenderRequest>>::erase(a3a, &v247, *(_QWORD *)a3a->Data1, (_QWORD *)*j);
}
}
}
return 262400;
}
time_1 = 0i64;
a3a = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &a3a, 8ui64, &time_1, L"objectInstance");
if ( result < 0 )
return result;
time_1 = 0i64;
time = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &time, 8ui64, &time_1, L"property");
if ( result < 0 )
return result;
v256 = 7i64;
v255 = 0i64;
a4a[0] = 0;
v204 = XPerfAddIn::CFramesInfoSource::GetEventString(this, event_record, L"StringValue", a4a);
if ( v204 < 0 )
{
if ( v256 >= 8 )
operator delete(*(void **)a4a);
return v204;
}
v205 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
v206 = v205;
if ( time == 8386097230838235136i64 )
{
time_1 = (TimeStamp)a3a;
v207 = v205 + 112;
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
v205 + 112,
&a5,
&time_1);
if ( a5 != *(_QWORD *)(v207 + 8) )
{
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v208 = XPerfAddIn::STimedMapBag<XPerfAddIn::SHtmlElement,unsigned __int64>::Get(v207, a3a, time_1);
if ( *(_QWORD *)(v208 + 96) )
{
std::_Hash<std::_Hmap_traits<unsigned __int64,XPerfAddIn::SHtmlSBLayerObject *,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlSBLayerObject *>>,0>>::lower_bound(
v207,
&a5,
v208 + 56);
std::_Hash<std::_Hset_traits<XPerfAddIn::SXamlThreadState *,CSPHashCompare<XPerfAddIn::SXamlThreadState *,std::less<XPerfAddIn::SXamlThreadState *>>,std::allocator<XPerfAddIn::SXamlThreadState *>,0>>::erase(
v207,
&v247);
}
}
}
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v209 = XPerfAddIn::STimedMapBag<XPerfAddIn::SHtmlElement,unsigned __int64>::Get(v206 + 112, a3a, time_1);
if ( time == 8386097230838235136i64 )
{
v210 = (void *)(v209 + 80);
}
else if ( time == 2551680615044874240i64 )
{
v210 = (void *)(v209 + 120);
}
else
{
v211 = 3342634514243584000i64;
if ( time != 3342634514243584000i64 )
{
LABEL_215:
LOBYTE(v211) = 1;
std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short>>::_Tidy(a4a, v211, 0i64);
return 262400;
}
v210 = (void *)(v209 + 160);
}
std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short>>::assign(v210);
goto LABEL_215;
}
time = 0i64;
a3a = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, &a3a, 8ui64, &time, L"DOC");
if ( result >= 0 )
{
time = (TimeStamp)stdext::hash_map<XPerfAddIn::IProcessInfoSource::ThreadData const *,XPerfAddIn::SHtmlThreadState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ThreadData const *,std::less<XPerfAddIn::IProcessInfoSource::ThreadData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ThreadData const * const,XPerfAddIn::SHtmlThreadState>>>::operator[](
&this->thread_state_map,
(XPerfAddIn::IProcessInfoSource::ThreadData *)&v252);
v18 = stdext::hash_map<unsigned __int64,XPerfAddIn::SHtmlDocState,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfAddIn::SHtmlDocState>>>::operator[](
(_QWORD *)time,
(__int64 *)&a3a,
v16,
v17);
v19 = stdext::hash_map<XPerfAddIn::IProcessInfoSource::ProcessData const *,XPerfAddIn::SHtmlProcessState,CSPHashCompare<XPerfAddIn::IProcessInfoSource::ProcessData const *,std::less<XPerfAddIn::IProcessInfoSource::ProcessData const *>>,std::allocator<std::pair<XPerfAddIn::IProcessInfoSource::ProcessData const * const,XPerfAddIn::SHtmlProcessState>>>::operator[](
&this[1].blah1,
v10);
v20 = (_QWORD *)stdext::hash_map<unsigned __int64,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>,CSPHashCompare<unsigned __int64,std::less<unsigned __int64>>,std::allocator<std::pair<unsigned __int64 const,XPerfCore::ZeroedPointer<XPerfAddIn::IProcessInfoSource::ThreadData const>>>>::operator[](
v19 + 312,
&a3a);
*(_QWORD *)(time + 208) = *v20;
memset_0(&time, 0, 0x150ui64);
v21 = XPerfAddIn::SHtmlFrame::SHtmlFrame((XPerfAddIn::SHtmlFrame *)&time);
v22 = *((_QWORD *)v18 + 2);
v24 = std::_List_val<XPerfAddIn::SHtmlFrame,std::allocator<XPerfAddIn::SHtmlFrame>>::_Buynode<XPerfAddIn::SHtmlFrame>(
v23,
*((_QWORD *)v18 + 2),
*(_QWORD *)(v22 + 8),
v21);
v25 = *((_QWORD *)v18 + 3);
if ( (unsigned __int64)(54901024028897474i64 - v25) < 1 )
std::_Xlength_error("list<T> too long");
*((_QWORD *)v18 + 3) = v25 + 1;
*(_QWORD *)(v22 + 8) = v24;
**(_QWORD **)(v24 + 8) = v24;
XPerfAddIn::SHtmlFrame::~SHtmlFrame((XPerfAddIn::SHtmlFrame *)&time);
v26 = *(_QWORD *)(*((_QWORD *)v18 + 2) + 8i64) + 16i64;
time_1 = v26;
*((_QWORD *)v18 + 1) = v26;
a5 = v26;
std::vector<XPerfAddIn::CDxDmaPacket *,std::allocator<XPerfAddIn::CDxDmaPacket *>>::push_back(time + 96, &a5);
*(_QWORD *)(v26 + 64) = a3a;
a2->vtable->GetCurrentTimestamp(a2, &a5);
*(_QWORD *)(v26 + 16) = a5;
*(_QWORD *)v26 = v252;
a5 = 0i64;
*(_QWORD *)(v26 + 64) = 0i64;
result = XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v26 + 64), 8ui64, &a5, L"DOC");
if ( result >= 0 )
{
a5 = 0i64;
*(_DWORD *)(v26 + 96) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v26 + 96), 4ui64, &a5, L"left");
v27 = time_1;
v28 = (_DWORD *)(time_1 + 100);
time_1 = 0i64;
*v28 = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, v28, 4ui64, &time_1, L"top");
time_1 = 0i64;
*(_DWORD *)(v27 + 104) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v27 + 104), 4ui64, &time_1, L"right");
time_1 = 0i64;
*(_DWORD *)(v27 + 108) = 0;
XPerfAddIn::CFramesInfoSource::GetEventField(this, event_record, (void *)(v27 + 108), 4ui64, &time_1, L"bottom");
a2->vtable->GetCurrentTimestamp(a2, &time_1);
v29 = L"Painting";
v30 = (XPerfAddIn::SHtmlThreadState *)time;
LABEL_262:
XPerfAddIn::SHtmlThreadState::StartHtmlWork(v30, v29, (const struct TimeStamp *)&time_1);
return 262400;
}
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment