void OnClock(const char *Name){ int Index; Index = FindModuleIndex(Name); ++Clock[Index].Count; Clock[Index].StartTime = (double)clock()/CLOCKS_PER_SEC; if (Index > TotClocksUsed) TotClocksUsed=Index; return; }
void OffClock(const char *Name){ int Index; Index = FindModuleIndex(Name); if (Clock[Index].Count == 0) PerfMonError("OffClock called for a routine which was never on!"); else { Clock[Index].ElapsedTime += ((double)clock()/CLOCKS_PER_SEC - Clock[Index].StartTime); } return; }
void Pdb::LoadModuleInfo() { fninfo_cache.Clear(); ModuleInfo f; dword cb = 1; HMODULE h; if(!EnumProcessModules(hProcess, &h, sizeof(HMODULE), &cb)) { Error(); return; } int n = cb / sizeof(HMODULE); Buffer<HMODULE> m(n); if(!EnumProcessModules(hProcess, m, cb, &cb)) { Error(); return; } Vector<ModuleInfo> nm; for (int i = 0; i < n; i++) { MODULEINFO mi; if(GetModuleInformation(hProcess, m[i], &mi, sizeof(mi))) { ModuleInfo& f = nm.Add(); f.base = (adr_t)mi.lpBaseOfDll; f.size = mi.SizeOfImage; int q = FindModuleIndex(f.base); if(q >= 0) { ModuleInfo& of = module[q]; f.path = of.path; f.symbols = of.symbols; of.symbols = false; LLOG("Stable " << Hex(f.base) << " (" << Hex(f.size) << "): " << f.path); } else { char name[MAX_PATH]; if(GetModuleFileNameEx(hProcess, m[i], name, MAX_PATH)) { f.path = name; if(FileExists(ForceExt(f.path, ".pdb"))) { adr_t w = (adr_t)SymLoadModule64(hProcess, NULL, name, 0, f.base, f.size); if(w) { LLOG("Loading symbols " << Hex(f.base) << '/' << hProcess << " returned base " << Hex(w)); f.symbols = true; LoadGlobals(w); } } } LLOG(Hex(f.base) << " (" << Hex(f.size) << "): " << f.path); } } } UnloadModuleSymbols(); module = pick(nm); refreshmodules = false; }
long unsigned UsesOfRoutine(const char *Name){ int Index; Index = FindModuleIndex(Name); return(Clock[Index].Count); }
void ResetClock(const char *Name){ int Index; Index = FindModuleIndex(Name); Clock[Index].ElapsedTime = 0.0; return; }
double TimeOfRoutine(const char *Name){ int Index; Index = FindModuleIndex(Name); return(Clock[Index].ElapsedTime); }