1 /** 2 * @file winperf.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 #ifndef _WINPERF_H 25 #define _WINPERF_H 26 #pragma GCC system_header 27 #include <_mingw.h> 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #define PERF_DATA_VERSION 1 34 #define PERF_DATA_REVISION 1 35 #define PERF_NO_INSTANCES -1 36 #define PERF_SIZE_DWORD 0 37 #define PERF_SIZE_LARGE 256 38 #define PERF_SIZE_ZERO 512 39 #define PERF_SIZE_VARIABLE_LEN 768 40 #define PERF_TYPE_NUMBER 0 41 #define PERF_TYPE_COUNTER 1024 42 #define PERF_TYPE_TEXT 2048 43 #define PERF_TYPE_ZERO 0xC00 44 #define PERF_NUMBER_HEX 0 45 #define PERF_NUMBER_DECIMAL 0x10000 46 #define PERF_NUMBER_DEC_1000 0x20000 47 #define PERF_COUNTER_VALUE 0 48 #define PERF_COUNTER_RATE 0x10000 49 #define PERF_COUNTER_FRACTION 0x20000 50 #define PERF_COUNTER_BASE 0x30000 51 #define PERF_COUNTER_ELAPSED 0x40000 52 #define PERF_COUNTER_QUEUELEN 0x50000 53 #define PERF_COUNTER_HISTOGRAM 0x60000 54 #define PERF_TEXT_UNICODE 0 55 #define PERF_TEXT_ASCII 0x10000 56 #define PERF_TIMER_TICK 0 57 #define PERF_TIMER_100NS 0x100000 58 #define PERF_OBJECT_TIMER 0x200000 59 #define PERF_DELTA_COUNTER 0x400000 60 #define PERF_DELTA_BASE 0x800000 61 #define PERF_INVERSE_COUNTER 0x1000000 62 #define PERF_MULTI_COUNTER 0x2000000 63 #define PERF_DISPLAY_NO_SUFFIX 0 64 #define PERF_DISPLAY_PER_SEC 0x10000000 65 #define PERF_DISPLAY_PERCENT 0x20000000 66 #define PERF_DISPLAY_SECONDS 0x30000000 67 #define PERF_DISPLAY_NOSHOW 0x40000000 68 #define PERF_COUNTER_HISTOGRAM_TYPE 0x80000000 69 #define PERF_NO_UNIQUE_ID (-1) 70 #define PERF_DETAIL_NOVICE 100 71 #define PERF_DETAIL_ADVANCED 200 72 #define PERF_DETAIL_EXPERT 300 73 #define PERF_DETAIL_WIZARD 400 74 #define PERF_COUNTER_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC) 75 #define PERF_COUNTER_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT) 76 #define PERF_COUNTER_QUEUELEN_TYPE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_QUEUELEN|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX) 77 #define PERF_COUNTER_BULK_COUNT (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC) 78 #define PERF_COUNTER_TEXT (PERF_SIZE_VARIABLE_LEN|PERF_TYPE_TEXT|PERF_TEXT_UNICODE|PERF_DISPLAY_NO_SUFFIX) 79 #define PERF_COUNTER_RAWCOUNT (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX) 80 #define PERF_COUNTER_LARGE_RAWCOUNT (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX) 81 #define PERF_COUNTER_RAWCOUNT_HEX (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX) 82 #define PERF_COUNTER_LARGE_RAWCOUNT_HEX (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX) 83 #define PERF_SAMPLE_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DELTA_COUNTER|PERF_DELTA_BASE|PERF_DISPLAY_PERCENT) 84 #define PERF_SAMPLE_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX) 85 #define PERF_COUNTER_NODATA (PERF_SIZE_ZERO|PERF_DISPLAY_NOSHOW) 86 #define PERF_COUNTER_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) 87 #define PERF_SAMPLE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|1) 88 #define PERF_AVERAGE_TIMER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_SECONDS) 89 #define PERF_AVERAGE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|2) 90 #define PERF_AVERAGE_BULK (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_NOSHOW) 91 #define PERF_100NSEC_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT) 92 #define PERF_100NSEC_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) 93 #define PERF_COUNTER_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_TIMER_TICK|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT) 94 #define PERF_COUNTER_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_MULTI_COUNTER|PERF_TIMER_TICK|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) 95 #define PERF_COUNTER_MULTI_BASE (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_MULTI_COUNTER|PERF_DISPLAY_NOSHOW) 96 #define PERF_100NSEC_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT) 97 #define PERF_100NSEC_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) 98 #define PERF_RAW_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_PERCENT) 99 #define PERF_RAW_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|3) 100 #define PERF_ELAPSED_TIME (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_ELAPSED|PERF_OBJECT_TIMER|PERF_DISPLAY_SECONDS) 101 typedef struct _PERF_DATA_BLOCK { 102 WCHAR Signature[4]; 103 DWORD LittleEndian; 104 DWORD Version; 105 DWORD Revision; 106 DWORD TotalByteLength; 107 DWORD HeaderLength; 108 DWORD NumObjectTypes; 109 LONG DefaultObject; 110 SYSTEMTIME SystemTime; 111 LARGE_INTEGER PerfTime; 112 LARGE_INTEGER PerfFreq; 113 LARGE_INTEGER PerfTime100nSec; 114 DWORD SystemNameLength; 115 DWORD SystemNameOffset; 116 } PERF_DATA_BLOCK, *PPERF_DATA_BLOCK; 117 typedef struct _PERF_OBJECT_TYPE { 118 DWORD TotalByteLength; 119 DWORD DefinitionLength; 120 DWORD HeaderLength; 121 DWORD ObjectNameTitleIndex; 122 LPWSTR ObjectNameTitle; 123 DWORD ObjectHelpTitleIndex; 124 LPWSTR ObjectHelpTitle; 125 DWORD DetailLevel; 126 DWORD NumCounters; 127 LONG DefaultCounter; 128 LONG NumInstances; 129 DWORD CodePage; 130 LARGE_INTEGER PerfTime; 131 LARGE_INTEGER PerfFreq; 132 } PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE; 133 typedef struct _PERF_COUNTER_DEFINITION { 134 DWORD ByteLength; 135 DWORD CounterNameTitleIndex; 136 LPWSTR CounterNameTitle; 137 DWORD CounterHelpTitleIndex; 138 LPWSTR CounterHelpTitle; 139 LONG DefaultScale; 140 DWORD DetailLevel; 141 DWORD CounterType; 142 DWORD CounterSize; 143 DWORD CounterOffset; 144 } PERF_COUNTER_DEFINITION,*PPERF_COUNTER_DEFINITION; 145 typedef struct _PERF_INSTANCE_DEFINITION { 146 DWORD ByteLength; 147 DWORD ParentObjectTitleIndex; 148 DWORD ParentObjectInstance; 149 LONG UniqueID; 150 DWORD NameOffset; 151 DWORD NameLength; 152 } PERF_INSTANCE_DEFINITION,*PPERF_INSTANCE_DEFINITION; 153 typedef struct _PERF_COUNTER_BLOCK { 154 DWORD ByteLength; 155 } PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK; 156 typedef DWORD(CALLBACK PM_OPEN_PROC)(LPWSTR); 157 typedef DWORD(CALLBACK PM_COLLECT_PROC)(LPWSTR,PVOID*,PDWORD,PDWORD); 158 typedef DWORD(CALLBACK PM_CLOSE_PROC)(void); 159 160 #ifdef __cplusplus 161 } 162 #endif 163 164 #endif 165