Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_ | |
| 6 #define CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_ | |
| 7 | |
| 8 #include <windows.h> | |
| 9 #include <winternl.h> | |
| 10 | |
| 11 namespace task_manager { | |
| 12 | |
| 13 namespace { | |
|
ncarter (slow)
2017/02/02 20:17:14
lgtm assuming this "namespace {" is dropped (i'm a
| |
| 14 | |
| 15 // From <wdm.h> | |
| 16 typedef LONG KPRIORITY; | |
| 17 typedef LONG KWAIT_REASON; // Full definition is in wdm.h | |
| 18 | |
| 19 // From ntddk.h | |
| 20 typedef struct _VM_COUNTERS { | |
| 21 SIZE_T PeakVirtualSize; | |
| 22 SIZE_T VirtualSize; | |
| 23 ULONG PageFaultCount; | |
| 24 // Padding here in 64-bit | |
| 25 SIZE_T PeakWorkingSetSize; | |
| 26 SIZE_T WorkingSetSize; | |
| 27 SIZE_T QuotaPeakPagedPoolUsage; | |
| 28 SIZE_T QuotaPagedPoolUsage; | |
| 29 SIZE_T QuotaPeakNonPagedPoolUsage; | |
| 30 SIZE_T QuotaNonPagedPoolUsage; | |
| 31 SIZE_T PagefileUsage; | |
| 32 SIZE_T PeakPagefileUsage; | |
| 33 } VM_COUNTERS; | |
| 34 | |
| 35 // Two possibilities available from here: | |
| 36 // http://stackoverflow.com/questions/28858849/where-is-system-information-class -defined | |
| 37 | |
| 38 typedef enum _SYSTEM_INFORMATION_CLASS { | |
| 39 SystemProcessInformation = 5, // This is the number that we need. | |
| 40 } SYSTEM_INFORMATION_CLASS; | |
| 41 | |
| 42 // https://msdn.microsoft.com/en-us/library/gg750647.aspx?f=255&MSPPError=-21472 17396 | |
| 43 typedef struct { | |
| 44 HANDLE UniqueProcess; // Actually process ID | |
| 45 HANDLE UniqueThread; // Actually thread ID | |
| 46 } CLIENT_ID; | |
| 47 | |
| 48 // From http://alax.info/blog/1182, with corrections and modifications | |
| 49 // Originally from | |
| 50 // http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%2 0Functions%2FSystem%20Information%2FStructures%2FSYSTEM_THREAD.html | |
| 51 struct SYSTEM_THREAD_INFORMATION { | |
| 52 ULONGLONG KernelTime; | |
| 53 ULONGLONG UserTime; | |
| 54 ULONGLONG CreateTime; | |
| 55 ULONG WaitTime; | |
| 56 // Padding here in 64-bit | |
| 57 PVOID StartAddress; | |
| 58 CLIENT_ID ClientId; | |
| 59 KPRIORITY Priority; | |
| 60 LONG BasePriority; | |
| 61 ULONG ContextSwitchCount; | |
| 62 ULONG State; | |
| 63 KWAIT_REASON WaitReason; | |
| 64 }; | |
| 65 #if _M_X64 | |
| 66 static_assert(sizeof(SYSTEM_THREAD_INFORMATION) == 80, | |
| 67 "Structure size mismatch"); | |
| 68 #else | |
| 69 static_assert(sizeof(SYSTEM_THREAD_INFORMATION) == 64, | |
| 70 "Structure size mismatch"); | |
| 71 #endif | |
| 72 | |
| 73 // From http://alax.info/blog/1182, with corrections and modifications | |
| 74 // Originally from | |
| 75 // http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%2 0Functions%2FSystem%20Information%2FStructures%2FSYSTEM_THREAD.html | |
| 76 struct SYSTEM_PROCESS_INFORMATION { | |
| 77 ULONG NextEntryOffset; | |
| 78 ULONG NumberOfThreads; | |
| 79 // http://processhacker.sourceforge.net/doc/struct___s_y_s_t_e_m___p_r_o_c_e_s _s___i_n_f_o_r_m_a_t_i_o_n.html | |
| 80 ULONGLONG WorkingSetPrivateSize; | |
| 81 ULONG HardFaultCount; | |
| 82 ULONG Reserved1; | |
| 83 ULONGLONG CycleTime; | |
| 84 ULONGLONG CreateTime; | |
| 85 ULONGLONG UserTime; | |
| 86 ULONGLONG KernelTime; | |
| 87 UNICODE_STRING ImageName; | |
| 88 KPRIORITY BasePriority; | |
| 89 HANDLE ProcessId; | |
| 90 HANDLE ParentProcessId; | |
| 91 ULONG HandleCount; | |
| 92 ULONG Reserved2[2]; | |
| 93 // Padding here in 64-bit | |
| 94 VM_COUNTERS VirtualMemoryCounters; | |
| 95 size_t Reserved3; | |
| 96 IO_COUNTERS IoCounters; | |
| 97 SYSTEM_THREAD_INFORMATION Threads[1]; | |
| 98 }; | |
| 99 #if _M_X64 | |
| 100 static_assert(sizeof(SYSTEM_PROCESS_INFORMATION) == 336, | |
| 101 "Structure size mismatch"); | |
| 102 #else | |
| 103 static_assert(sizeof(SYSTEM_PROCESS_INFORMATION) == 248, | |
| 104 "Structure size mismatch"); | |
| 105 #endif | |
| 106 | |
| 107 typedef NTSTATUS(WINAPI* NTQUERYSYSTEMINFORMATION)( | |
| 108 SYSTEM_INFORMATION_CLASS SystemInformationClass, | |
| 109 PVOID SystemInformation, | |
| 110 ULONG SystemInformationLength, | |
| 111 PULONG ReturnLength); | |
| 112 | |
| 113 } // namespace | |
| 114 | |
| 115 } // namespace task_manager | |
| 116 | |
| 117 #endif // CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_ | |
| OLD | NEW |