123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- MODULE WMPerfMonPluginMemory; (** AUTHOR "staubesv"; PURPOSE "Performance Monitor memory utilization plugin"; *)
- IMPORT
- Kernel32, Modules, WMPerfMonPlugins, Heaps;
- CONST
- ModuleName = "WMPerfMonPluginMemory";
- TYPE
- (* Heaps.GetHeapInfo is a slow operation. HeapHelper provides its results to multiple plugins *)
- HeapHelper = OBJECT(WMPerfMonPlugins.Helper)
- VAR
- free, total, largest : SIZE;
- PROCEDURE Update;
- BEGIN
- Heaps.GetHeapInfo(total, free, largest);
- END Update;
- END HeapHelper;
- TYPE
- MemoryLoad* = OBJECT(WMPerfMonPlugins.Plugin)
- VAR
- h : HeapHelper;
- PROCEDURE Init*(p : WMPerfMonPlugins.Parameter);
- VAR ds : WMPerfMonPlugins.DatasetDescriptor;
- BEGIN
- p.name := "Heap"; p.description := "Heap statistics"; p.modulename := ModuleName;
- p.autoMax := TRUE; p.unit := "KB"; p.minDigits := 7;
- p.noSuperSampling := TRUE;
- p.helper := heapHelper; h := heapHelper;
- NEW(ds, 3);
- ds[0].name := "Size"; INCL(ds[0].flags, WMPerfMonPlugins.Maximum);
- ds[1].name := "Free";
- ds[2].name := "LargestBlock"; INCL(ds[2].flags, WMPerfMonPlugins.Standalone);
- p.datasetDescriptor := ds;
- END Init;
- PROCEDURE UpdateDataset*;
- BEGIN
- dataset[0] := h.total DIV 1024;
- dataset[1] := h.free DIV 1024;
- dataset[2] := h.largest DIV 1024;
- END UpdateDataset;
- END MemoryLoad;
- TYPE
- WindowsMemoryLoad = OBJECT(WMPerfMonPlugins.Plugin)
- VAR
- status : Kernel32.MemoryStatusEx;
- PROCEDURE Init(p : WMPerfMonPlugins.Parameter);
- VAR ds : WMPerfMonPlugins.DatasetDescriptor;
- BEGIN
- p.name := "Memory"; p.description := "Windows Memory Statistics"; p.modulename := ModuleName;
- p.noSuperSampling := TRUE;
- p.autoMax := TRUE; p.unit := "KB"; p.minDigits := 7;
- NEW(ds, 7);
- ds[0].name := "Memory Load [%]";
- ds[1].name := "Total (Physical)";
- ds[2].name := "Free (Physical)";
- ds[3].name := "Total (Page file)";
- ds[4].name := "Free (Page file)";
- ds[5].name := "Total (Virtual)";
- ds[6].name := "Free (Virtual)";
- p.datasetDescriptor := ds;
- END Init;
- PROCEDURE UpdateDataset;
- BEGIN
- status.dwLength := 64;
- IF (Kernel32.GlobalMemoryStatusEx(status) = Kernel32.True) THEN
- dataset[0] := status.dwMemoryLoad;
- dataset[1] := status.ullTotalPhys DIV 1024;
- dataset[2] := status.ullAvailPhys DIV 1024;
- dataset[3] := status.ullTotalPageFile DIV 1024;
- dataset[4] := status.ullAvailPageFile DIV 1024;
- dataset[5] := status.ullTotalVirtual DIV 1024;
- dataset[6] := status.ullAvailVirtual DIV 1024;
- END;
- END UpdateDataset;
- END WindowsMemoryLoad;
- VAR
- heapHelper : HeapHelper;
- PROCEDURE InitPlugins;
- VAR
- par : WMPerfMonPlugins.Parameter;
- ml : MemoryLoad;
- wml : WindowsMemoryLoad;
- BEGIN
- NEW(par); NEW(ml, par);
- NEW(par); NEW(wml, par);
- END InitPlugins;
- PROCEDURE Install*;
- END Install;
- PROCEDURE Cleanup;
- BEGIN
- WMPerfMonPlugins.updater.RemoveByModuleName(ModuleName);
- END Cleanup;
- BEGIN
- NEW(heapHelper);
- InitPlugins;
- Modules.InstallTermHandler(Cleanup);
- END WMPerfMonPluginMemory.
- WMPerfMonPluginMemory.Install ~ SystemTools.Free WMPerfMonPluginMemory ~
|