1 /*
2  * PROJECT:     ReactOS Task Manager
3  * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4  * PURPOSE:     Performance Counters.
5  * COPYRIGHT:   Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
6  *              Copyright 2014 Ismael Ferreras Morezuelas <swyterzone+ros@gmail.com>
7  */
8 
9 #pragma once
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))
16 
17 typedef struct _PERFDATA
18 {
19 	WCHAR				ImageName[MAX_PATH];
20 	HANDLE				ProcessId;
21 	WCHAR				UserName[MAX_PATH];
22 	ULONG				SessionId;
23 	ULONG				CPUUsage;
24 	LARGE_INTEGER		CPUTime;
25 	ULONG				WorkingSetSizeBytes;
26 	ULONG				PeakWorkingSetSizeBytes;
27 	ULONG				WorkingSetSizeDelta;
28 	ULONG				PageFaultCount;
29 	ULONG				PageFaultCountDelta;
30 	ULONG				VirtualMemorySizeBytes;
31 	ULONG				PagedPoolUsagePages;
32 	ULONG				NonPagedPoolUsagePages;
33 	ULONG				BasePriority;
34 	ULONG				HandleCount;
35 	ULONG				ThreadCount;
36 	ULONG				USERObjectCount;
37 	ULONG				GDIObjectCount;
38 	IO_COUNTERS			IOCounters;
39 
40 	LARGE_INTEGER		UserTime;
41 	LARGE_INTEGER		KernelTime;
42 } PERFDATA, *PPERFDATA;
43 
44 typedef struct _CMD_LINE_CACHE
45 {
46      DWORD idx;
47     LPWSTR str;
48      ULONG len;
49     struct _CMD_LINE_CACHE* pnext;
50 } CMD_LINE_CACHE, *PCMD_LINE_CACHE;
51 
52 BOOL	PerfDataInitialize(void);
53 void	PerfDataUninitialize(void);
54 void	PerfDataRefresh(void);
55 
56 BOOL	PerfDataGet(ULONG Index, PPERFDATA *lppData);
57 ULONG	PerfDataGetProcessIndex(ULONG pid);
58 ULONG	PerfDataGetProcessCount(void);
59 ULONG	PerfDataGetProcessorUsage(void);
60 ULONG	PerfDataGetProcessorSystemUsage(void);
61 
62 BOOL	PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, ULONG nMaxCount);
63 ULONG	PerfDataGetProcessId(ULONG Index);
64 BOOL	PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, ULONG nMaxCount);
65 
66 BOOL	PerfDataGetCommandLine(ULONG Index, LPWSTR lpCommandLine, ULONG nMaxCount);
67 void	PerfDataDeallocCommandLineCache();
68 
69 ULONG	PerfDataGetSessionId(ULONG Index);
70 ULONG	PerfDataGetCPUUsage(ULONG Index);
71 LARGE_INTEGER	PerfDataGetCPUTime(ULONG Index);
72 ULONG	PerfDataGetWorkingSetSizeBytes(ULONG Index);
73 ULONG	PerfDataGetPeakWorkingSetSizeBytes(ULONG Index);
74 ULONG	PerfDataGetWorkingSetSizeDelta(ULONG Index);
75 ULONG	PerfDataGetPageFaultCount(ULONG Index);
76 ULONG	PerfDataGetPageFaultCountDelta(ULONG Index);
77 ULONG	PerfDataGetVirtualMemorySizeBytes(ULONG Index);
78 ULONG	PerfDataGetPagedPoolUsagePages(ULONG Index);
79 ULONG	PerfDataGetNonPagedPoolUsagePages(ULONG Index);
80 ULONG	PerfDataGetBasePriority(ULONG Index);
81 ULONG	PerfDataGetHandleCount(ULONG Index);
82 ULONG	PerfDataGetThreadCount(ULONG Index);
83 ULONG	PerfDataGetUSERObjectCount(ULONG Index);
84 ULONG	PerfDataGetGDIObjectCount(ULONG Index);
85 BOOL	PerfDataGetIOCounters(ULONG Index, PIO_COUNTERS pIoCounters);
86 
87 ULONG	PerfDataGetCommitChargeTotalK(void);
88 ULONG	PerfDataGetCommitChargeLimitK(void);
89 ULONG	PerfDataGetCommitChargePeakK(void);
90 
91 ULONG	PerfDataGetKernelMemoryTotalK(void);
92 ULONG	PerfDataGetKernelMemoryPagedK(void);
93 ULONG	PerfDataGetKernelMemoryNonPagedK(void);
94 
95 ULONG	PerfDataGetPhysicalMemoryTotalK(void);
96 ULONG	PerfDataGetPhysicalMemoryAvailableK(void);
97 ULONG	PerfDataGetPhysicalMemorySystemCacheK(void);
98 
99 ULONG	PerfDataGetSystemHandleCount(void);
100 
101 ULONG	PerfDataGetTotalThreadCount(void);
102 
103 
104 #ifdef __cplusplus
105 };
106 #endif
107