summaryrefslogtreecommitdiffstats
path: root/vendor/winapi/src/um/perflib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/winapi/src/um/perflib.rs')
-rw-r--r--vendor/winapi/src/um/perflib.rs331
1 files changed, 331 insertions, 0 deletions
diff --git a/vendor/winapi/src/um/perflib.rs b/vendor/winapi/src/um/perflib.rs
new file mode 100644
index 000000000..aea3bde94
--- /dev/null
+++ b/vendor/winapi/src/um/perflib.rs
@@ -0,0 +1,331 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::basetsd::SIZE_T;
+use shared::guiddef::{GUID, LPCGUID, LPGUID};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPVOID, ULONG};
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{HANDLE, LONG, LONGLONG, LPCWSTR, PCWSTR, PHANDLE, PVOID, ULONGLONG};
+pub const PERF_PROVIDER_USER_MODE: ULONG = 0;
+pub const PERF_PROVIDER_KERNEL_MODE: ULONG = 1;
+pub const PERF_PROVIDER_DRIVER: ULONG = 2;
+pub const PERF_COUNTERSET_FLAG_MULTIPLE: ULONG = 2;
+pub const PERF_COUNTERSET_FLAG_AGGREGATE: ULONG = 4;
+pub const PERF_COUNTERSET_FLAG_HISTORY: ULONG = 8;
+pub const PERF_COUNTERSET_FLAG_INSTANCE: ULONG = 16;
+pub const PERF_COUNTERSET_SINGLE_INSTANCE: ULONG = 0;
+pub const PERF_COUNTERSET_MULTI_INSTANCES: ULONG = PERF_COUNTERSET_FLAG_MULTIPLE;
+pub const PERF_COUNTERSET_SINGLE_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE;
+pub const PERF_COUNTERSET_MULTI_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE
+ | PERF_COUNTERSET_FLAG_MULTIPLE;
+pub const PERF_COUNTERSET_SINGLE_AGGREGATE_HISTORY: ULONG = PERF_COUNTERSET_FLAG_HISTORY
+ | PERF_COUNTERSET_SINGLE_AGGREGATE;
+pub const PERF_COUNTERSET_INSTANCE_AGGREGATE: ULONG = PERF_COUNTERSET_MULTI_AGGREGATE
+ | PERF_COUNTERSET_FLAG_INSTANCE;
+pub const PERF_AGGREGATE_UNDEFINED: ULONG = 0;
+pub const PERF_AGGREGATE_TOTAL: ULONG = 1;
+pub const PERF_AGGREGATE_AVG: ULONG = 2;
+pub const PERF_AGGREGATE_MIN: ULONG = 3;
+pub const PERF_AGGREGATE_MAX: ULONG = 4;
+pub const PERF_ATTRIB_BY_REFERENCE: ULONGLONG = 0x0000000000000001;
+pub const PERF_ATTRIB_NO_DISPLAYABLE: ULONGLONG = 0x0000000000000002;
+pub const PERF_ATTRIB_NO_GROUP_SEPARATOR: ULONGLONG = 0x0000000000000004;
+pub const PERF_ATTRIB_DISPLAY_AS_REAL: ULONGLONG = 0x0000000000000008;
+pub const PERF_ATTRIB_DISPLAY_AS_HEX: ULONGLONG = 0x0000000000000010;
+STRUCT!{struct PERF_COUNTERSET_INFO {
+ CounterSetGuid: GUID,
+ ProviderGuid: GUID,
+ NumCounters: ULONG,
+ InstanceType: ULONG,
+}}
+pub type PPERF_COUNTERSET_INFO = *mut PERF_COUNTERSET_INFO;
+STRUCT!{struct PERF_COUNTER_INFO {
+ CounterId: ULONG,
+ Type: ULONG,
+ Attrib: ULONGLONG,
+ Size: ULONG,
+ DetailLevel: ULONG,
+ Scale: LONG,
+ Offset: LONG,
+}}
+pub type PPERF_COUNTER_INFO = *mut PERF_COUNTER_INFO;
+STRUCT!{struct PERF_COUNTERSET_INSTANCE {
+ CounterSetGuid: GUID,
+ dwSize: ULONG,
+ InstanceId: ULONG,
+ InstanceNameOffset: ULONG,
+ InstanceNameSize: ULONG,
+}}
+pub type PPERF_COUNTERSET_INSTANCE = *mut PERF_COUNTERSET_INSTANCE;
+STRUCT!{struct PERF_COUNTER_IDENTITY {
+ CounterSetGuid: GUID,
+ BufferSize: ULONG,
+ CounterId: ULONG,
+ InstanceId: ULONG,
+ MachineOffset: ULONG,
+ NameOffset: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_IDENTITY = *mut PERF_COUNTER_IDENTITY;
+pub const PERF_WILDCARD_COUNTER: ULONG = 0xFFFFFFFF;
+pub const PERF_WILDCARD_INSTANCE: &'static str = "*";
+pub const PERF_AGGREGATE_INSTANCE: &'static str = "_Total";
+pub const PERF_MAX_INSTANCE_NAME: ULONG = 1024;
+pub const PERF_ADD_COUNTER: ULONG = 1;
+pub const PERF_REMOVE_COUNTER: ULONG = 2;
+pub const PERF_ENUM_INSTANCES: ULONG = 3;
+pub const PERF_COLLECT_START: ULONG = 5;
+pub const PERF_COLLECT_END: ULONG = 6;
+pub const PERF_FILTER: ULONG = 9;
+FN!{stdcall PERFLIBREQUEST(
+ RequestCode: ULONG,
+ Buffer: PVOID,
+ BufferSize: ULONG,
+) -> ULONG}
+FN!{stdcall PERF_MEM_ALLOC(
+ AllocSize: SIZE_T,
+ pContext: LPVOID,
+) -> LPVOID}
+FN!{stdcall PERF_MEM_FREE(
+ pBuffer: LPVOID,
+ pContext: LPVOID,
+) -> ()}
+STRUCT!{struct PERF_PROVIDER_CONTEXT {
+ ContextSize: DWORD,
+ Reserved: DWORD,
+ ControlCallback: PERFLIBREQUEST,
+ MemAllocRoutine: PERF_MEM_ALLOC,
+ MemFreeRoutine: PERF_MEM_FREE,
+ pMemContext: LPVOID,
+}}
+pub type PPERF_PROVIDER_CONTEXT = *mut PERF_PROVIDER_CONTEXT;
+extern "system" {
+ pub fn PerfStartProviderEx(
+ ProviderGuid: LPGUID,
+ ProviderContext: PPERF_PROVIDER_CONTEXT,
+ Provider: PHANDLE,
+ ) -> ULONG;
+ pub fn PerfStartProvider(
+ ProviderGuid: LPGUID,
+ ControlCallback: PERFLIBREQUEST,
+ Provider: PHANDLE,
+ ) -> ULONG;
+ pub fn PerfStopProvider(
+ ProviderHandle: HANDLE,
+ ) -> ULONG;
+ pub fn PerfSetCounterSetInfo(
+ ProviderHandle: HANDLE,
+ Template: PPERF_COUNTERSET_INFO,
+ TemplateSize: ULONG,
+ ) -> ULONG;
+ pub fn PerfCreateInstance(
+ ProviderHandle: HANDLE,
+ CounterSetGuid: LPCGUID,
+ Name: PCWSTR,
+ Id: ULONG,
+ ) -> PPERF_COUNTERSET_INSTANCE;
+ pub fn PerfDeleteInstance(
+ Provider: HANDLE,
+ InstanceBlock: PPERF_COUNTERSET_INSTANCE,
+ ) -> ULONG;
+ pub fn PerfQueryInstance(
+ ProviderHandle: HANDLE,
+ CounterSetGuid: LPCGUID,
+ Name: LPCWSTR,
+ Id: ULONG,
+ ) -> PPERF_COUNTERSET_INSTANCE;
+ pub fn PerfSetCounterRefValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Address: PVOID,
+ ) -> ULONG;
+ pub fn PerfSetULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfSetULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+ pub fn PerfIncrementULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfIncrementULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+ pub fn PerfDecrementULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfDecrementULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+}
+STRUCT!{struct PERF_INSTANCE_HEADER {
+ Size: ULONG,
+ InstanceId: ULONG,
+}}
+pub type PPERF_INSTANCE_HEADER = *mut PERF_INSTANCE_HEADER;
+ENUM!{enum PerfRegInfoType {
+ PERF_REG_COUNTERSET_STRUCT = 1,
+ PERF_REG_COUNTER_STRUCT,
+ PERF_REG_COUNTERSET_NAME_STRING,
+ PERF_REG_COUNTERSET_HELP_STRING,
+ PERF_REG_COUNTER_NAME_STRINGS,
+ PERF_REG_COUNTER_HELP_STRINGS,
+ PERF_REG_PROVIDER_NAME,
+ PERF_REG_PROVIDER_GUID,
+ PERF_REG_COUNTERSET_ENGLISH_NAME,
+ PERF_REG_COUNTER_ENGLISH_NAMES,
+}}
+STRUCT!{struct PERF_COUNTERSET_REG_INFO {
+ CounterSetGuid: GUID,
+ CounterSetType: ULONG,
+ DetailLevel: ULONG,
+ NumCounters: ULONG,
+ InstanceType: ULONG,
+}}
+pub type PPERF_COUNTERSET_REG_INFO = *mut PERF_COUNTERSET_REG_INFO;
+STRUCT!{struct PERF_COUNTER_REG_INFO {
+ CounterId: ULONG,
+ Type: ULONG,
+ Attrib: ULONGLONG,
+ DetailLevel: ULONG,
+ DefaultScale: LONG,
+ BaseCounterId: ULONG,
+ PerfTimeId: ULONG,
+ PerfFreqId: ULONG,
+ MultiId: ULONG,
+ AggregateFinc: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_REG_INFO = *mut PERF_COUNTER_REG_INFO;
+STRUCT!{struct PERF_STRING_BUFFER_HEADER {
+ dwSize: DWORD,
+ dwCounters: DWORD,
+}}
+pub type PPERF_STRING_BUFFER_HEADER = *mut PERF_STRING_BUFFER_HEADER;
+STRUCT!{struct PERF_STRING_COUNTER_HEADER {
+ dwCounterId: DWORD,
+ dwOffset: DWORD,
+}}
+pub type PPERF_STRING_COUNTER_HEADER = *mut PERF_STRING_COUNTER_HEADER;
+STRUCT!{struct PERF_COUNTER_IDENTIFIER {
+ CounterSetGuid: GUID,
+ Status: ULONG,
+ Size: ULONG,
+ CounterId: ULONG,
+ InstanceId: ULONG,
+ Index: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_IDENTIFIER = *mut PERF_COUNTER_IDENTIFIER;
+STRUCT!{struct PERF_DATA_HEADER {
+ dwTotalSize: ULONG,
+ dwNumCounters: ULONG,
+ PerfTimeStamp: LONGLONG,
+ PerfTime100NSec: LONGLONG,
+ PrefFreq: LONGLONG,
+ SystemTime: SYSTEMTIME,
+}}
+pub type PPERF_DATA_HEADER = *mut PERF_DATA_HEADER;
+ENUM!{enum PerfCounterDataType {
+ PERF_ERROR_RETURN = 0,
+ PERF_SINGLE_COUNTER = 1,
+ PERF_MULTIPLE_COUNTERS = 2,
+ PERF_MULTIPLE_INSTANCES = 4,
+ PERF_COUNTERSET = 6,
+}}
+STRUCT!{struct PERF_COUNTER_HEADER {
+ dwStatus: ULONG,
+ dwType: PerfCounterDataType,
+ dwSize: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_HEADER = *mut PERF_COUNTER_HEADER;
+STRUCT!{struct PERF_MULTI_INSTANCES {
+ dwTotalSize: ULONG,
+ dwInstances: ULONG,
+}}
+pub type PPERF_MULTI_INSTANCES = *mut PERF_MULTI_INSTANCES;
+STRUCT!{struct PERF_MULTI_COUNTERS {
+ dwSize: ULONG,
+ dwCounters: ULONG,
+}}
+pub type PPERF_MULTI_COUNTERS = *mut PERF_MULTI_COUNTERS;
+STRUCT!{struct PERF_COUNTER_DATA {
+ dwDataSize: ULONG,
+ dwSize: ULONG,
+}}
+pub type PPERF_COUNTER_DATA = *mut PERF_COUNTER_DATA;
+extern "system" {
+ pub fn PerfEnumerateCounterSet(
+ szMachine: LPCWSTR,
+ pCounterSetIds: LPGUID,
+ cCounterSetIds: DWORD,
+ pcCounterSetIdsActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfEnumerateCounterSetInstances(
+ szMachine: LPCWSTR,
+ pCounterSetIds: LPCGUID,
+ pInstances: PPERF_INSTANCE_HEADER,
+ cbInstances: DWORD,
+ pcbInstancesActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfQueryCounterSetRegistrationInfo(
+ szMachine: LPCWSTR,
+ pCounterSetId: LPCGUID,
+ requestCode: PerfRegInfoType,
+ requestLangId: DWORD,
+ pbRegInfo: LPBYTE,
+ cbRegInfo: DWORD,
+ pcbRegInfoActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfOpenQueryHandle(
+ szMachine: LPCWSTR,
+ hQuery: *mut HANDLE,
+ ) -> ULONG;
+ pub fn PerfCloseQueryHandle(
+ hQuery: HANDLE,
+ ) -> ULONG;
+ pub fn PerfQueryCounterInfo(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ pcbCountersActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfQueryCounterData(
+ hQuery: HANDLE,
+ pCounterBlock: PPERF_DATA_HEADER,
+ cbCounterBlock: DWORD,
+ pcbCounterBlockActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfAddCounters(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ ) -> ULONG;
+ pub fn PerfDeleteCounters(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ ) -> ULONG;
+}