-
-
Save Zhentar/d65a0bbdcd489719cbec7b0b00761f85 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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