| Index: chrome/browser/task_manager/sampling/shared_sampler_win_defines.h
|
| diff --git a/chrome/browser/task_manager/sampling/shared_sampler_win_defines.h b/chrome/browser/task_manager/sampling/shared_sampler_win_defines.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..736f388edd5510bed2e437b011b6306e89096cdc
|
| --- /dev/null
|
| +++ b/chrome/browser/task_manager/sampling/shared_sampler_win_defines.h
|
| @@ -0,0 +1,113 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_
|
| +#define CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_
|
| +
|
| +#include <windows.h>
|
| +#include <winternl.h>
|
| +
|
| +namespace task_manager {
|
| +
|
| +// From <wdm.h>
|
| +typedef LONG KPRIORITY;
|
| +typedef LONG KWAIT_REASON; // Full definition is in wdm.h
|
| +
|
| +// From ntddk.h
|
| +typedef struct _VM_COUNTERS {
|
| + SIZE_T PeakVirtualSize;
|
| + SIZE_T VirtualSize;
|
| + ULONG PageFaultCount;
|
| + // Padding here in 64-bit
|
| + SIZE_T PeakWorkingSetSize;
|
| + SIZE_T WorkingSetSize;
|
| + SIZE_T QuotaPeakPagedPoolUsage;
|
| + SIZE_T QuotaPagedPoolUsage;
|
| + SIZE_T QuotaPeakNonPagedPoolUsage;
|
| + SIZE_T QuotaNonPagedPoolUsage;
|
| + SIZE_T PagefileUsage;
|
| + SIZE_T PeakPagefileUsage;
|
| +} VM_COUNTERS;
|
| +
|
| +// Two possibilities available from here:
|
| +// http://stackoverflow.com/questions/28858849/where-is-system-information-class-defined
|
| +
|
| +typedef enum _SYSTEM_INFORMATION_CLASS {
|
| + SystemProcessInformation = 5, // This is the number that we need.
|
| +} SYSTEM_INFORMATION_CLASS;
|
| +
|
| +// https://msdn.microsoft.com/en-us/library/gg750647.aspx?f=255&MSPPError=-2147217396
|
| +typedef struct {
|
| + HANDLE UniqueProcess; // Actually process ID
|
| + HANDLE UniqueThread; // Actually thread ID
|
| +} CLIENT_ID;
|
| +
|
| +// From http://alax.info/blog/1182, with corrections and modifications
|
| +// Originally from
|
| +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FSystem%20Information%2FStructures%2FSYSTEM_THREAD.html
|
| +struct SYSTEM_THREAD_INFORMATION {
|
| + ULONGLONG KernelTime;
|
| + ULONGLONG UserTime;
|
| + ULONGLONG CreateTime;
|
| + ULONG WaitTime;
|
| + // Padding here in 64-bit
|
| + PVOID StartAddress;
|
| + CLIENT_ID ClientId;
|
| + KPRIORITY Priority;
|
| + LONG BasePriority;
|
| + ULONG ContextSwitchCount;
|
| + ULONG State;
|
| + KWAIT_REASON WaitReason;
|
| +};
|
| +#if _M_X64
|
| +static_assert(sizeof(SYSTEM_THREAD_INFORMATION) == 80,
|
| + "Structure size mismatch");
|
| +#else
|
| +static_assert(sizeof(SYSTEM_THREAD_INFORMATION) == 64,
|
| + "Structure size mismatch");
|
| +#endif
|
| +
|
| +// From http://alax.info/blog/1182, with corrections and modifications
|
| +// Originally from
|
| +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FSystem%20Information%2FStructures%2FSYSTEM_THREAD.html
|
| +struct SYSTEM_PROCESS_INFORMATION {
|
| + ULONG NextEntryOffset;
|
| + ULONG NumberOfThreads;
|
| + // 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
|
| + ULONGLONG WorkingSetPrivateSize;
|
| + ULONG HardFaultCount;
|
| + ULONG Reserved1;
|
| + ULONGLONG CycleTime;
|
| + ULONGLONG CreateTime;
|
| + ULONGLONG UserTime;
|
| + ULONGLONG KernelTime;
|
| + UNICODE_STRING ImageName;
|
| + KPRIORITY BasePriority;
|
| + HANDLE ProcessId;
|
| + HANDLE ParentProcessId;
|
| + ULONG HandleCount;
|
| + ULONG Reserved2[2];
|
| + // Padding here in 64-bit
|
| + VM_COUNTERS VirtualMemoryCounters;
|
| + size_t Reserved3;
|
| + IO_COUNTERS IoCounters;
|
| + SYSTEM_THREAD_INFORMATION Threads[1];
|
| +};
|
| +#if _M_X64
|
| +static_assert(sizeof(SYSTEM_PROCESS_INFORMATION) == 336,
|
| + "Structure size mismatch");
|
| +#else
|
| +static_assert(sizeof(SYSTEM_PROCESS_INFORMATION) == 248,
|
| + "Structure size mismatch");
|
| +#endif
|
| +
|
| +typedef NTSTATUS(WINAPI* NTQUERYSYSTEMINFORMATION)(
|
| + SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
| + PVOID SystemInformation,
|
| + ULONG SystemInformationLength,
|
| + PULONG ReturnLength);
|
| +
|
| +} // namespace task_manager
|
| +
|
| +#endif // CHROME_BROWSER_TASK_MANAGER_SAMPLING_SHARED_SAMPLER_WIN_DEFINES_H_
|
|
|