Changeset 5653 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Nov 9, 2007 3:03:53 PM (17 years ago)
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/Makefile.kmk
r5555 r5653 298 298 generic/RTTimeLocalNow-generic.cpp \ 299 299 generic/RTTimerCreate-generic.cpp \ 300 generic/sched-generic.cpp \301 300 generic/semnoint-generic.cpp \ 302 301 generic/semsrw-generic.cpp \ … … 305 304 generic/uuid-generic.cpp \ 306 305 os2/RTErrConvertFromOS2.cpp \ 306 r3/os2/sched-os2.cpp \ 307 307 r3/os2/sems-os2.cpp \ 308 308 r3/os2/system-os2.cpp \ -
trunk/src/VBox/Runtime/r3/os2/sched-os2.cpp
r5594 r5653 1 1 /* $Id$ */ 2 2 /** @file 3 * innotek Portable Runtime - Scheduling, Win32.3 * innotek Portable Runtime - Scheduling, OS/2 4 4 */ 5 5 … … 16 16 */ 17 17 18 /** @def WIN32_SCHED_ENABLED18 /** @def OS2_SCHED_ENABLED 19 19 * Enables the priority scheme. */ 20 #define WIN32_SCHED_ENABLED20 #define OS2_SCHED_ENABLED 21 21 22 22 … … 25 25 *******************************************************************************/ 26 26 #define LOG_GROUP RTLOGGROUP_THREAD 27 #include <Windows.h> 27 #define INCL_BASE 28 #define INCL_ERRORS 29 #include <os2.h> 28 30 29 31 #include <iprt/thread.h> … … 47 49 /** The name of this priority. */ 48 50 const char *pszName; 49 /** The Win32 process priority class. If ANY_PROCESS_PRIORITY_CLASS the50 * process priority class is left unchanged. */51 DWORD dwProcessPriorityClass;52 51 /** Array scheduler attributes corresponding to each of the thread types. */ 53 52 struct … … 55 54 /** For sanity include the array index. */ 56 55 RTTHREADTYPE enmType; 57 /** The Win32 thread priority. */ 58 DWORD dwThreadPriority; 56 /** The OS/2 priority class. */ 57 ULONG ulClass; 58 /** The OS/2 priority delta. */ 59 ULONG ulDelta; 59 60 } aTypes[RTTHREADTYPE_END]; 60 61 } PROCPRIORITY; … … 73 74 { 74 75 { 75 RTPROCPRIORITY_FLAT, "Flat", ANY_PROCESS_PRIORITY_CLASS, 76 RTPROCPRIORITY_FLAT, "Flat", 77 { 78 { RTTHREADTYPE_INVALID, ~0, ~0 }, 79 { RTTHREADTYPE_INFREQUENT_POLLER, PRTYC_REGULAR, 0 }, 80 { RTTHREADTYPE_MAIN_HEAVY_WORKER, PRTYC_REGULAR, 0 }, 81 { RTTHREADTYPE_EMULATION, PRTYC_REGULAR, 0 }, 82 { RTTHREADTYPE_DEFAULT, PRTYC_REGULAR, 0 }, 83 { RTTHREADTYPE_GUI, PRTYC_REGULAR, 0 }, 84 { RTTHREADTYPE_MAIN_WORKER, PRTYC_REGULAR, 0 }, 85 { RTTHREADTYPE_VRDP_IO, PRTYC_REGULAR, 0 }, 86 { RTTHREADTYPE_DEBUGGER, PRTYC_REGULAR, 0 }, 87 { RTTHREADTYPE_MSG_PUMP, PRTYC_REGULAR, 0 }, 88 { RTTHREADTYPE_IO, PRTYC_REGULAR, 0 }, 89 { RTTHREADTYPE_TIMER, PRTYC_REGULAR, 0 } 90 } 91 }, 92 { 93 RTPROCPRIORITY_LOW, "Low", 76 94 { 77 95 { RTTHREADTYPE_INVALID, ~0 }, 78 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_NORMAL},79 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_NORMAL},80 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_NORMAL},81 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL},82 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL},83 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL},84 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_NORMAL},85 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_NORMAL},86 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_NORMAL},87 { RTTHREADTYPE_IO, THREAD_PRIORITY_NORMAL},88 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_NORMAL}96 { RTTHREADTYPE_INFREQUENT_POLLER, PRTYC_IDLETIME, 0 }, 97 { RTTHREADTYPE_MAIN_HEAVY_WORKER, PRTYC_IDLETIME, 0 }, 98 { RTTHREADTYPE_EMULATION, PRTYC_IDLETIME, 0 }, 99 { RTTHREADTYPE_DEFAULT, PRTYC_IDLETIME, 30 }, 100 { RTTHREADTYPE_GUI, PRTYC_IDLETIME, 30 }, 101 { RTTHREADTYPE_MAIN_WORKER, PRTYC_IDLETIME, 30 }, 102 { RTTHREADTYPE_VRDP_IO, PRTYC_REGULAR, 0 }, 103 { RTTHREADTYPE_DEBUGGER, PRTYC_REGULAR, 0 }, 104 { RTTHREADTYPE_MSG_PUMP, PRTYC_REGULAR, 0 }, 105 { RTTHREADTYPE_IO, PRTYC_REGULAR, 0 }, 106 { RTTHREADTYPE_TIMER, PRTYC_REGULAR, 0 } 89 107 } 90 108 }, 91 109 { 92 RTPROCPRIORITY_ LOW, "Low - Below Normal", BELOW_NORMAL_PRIORITY_CLASS,110 RTPROCPRIORITY_NORMAL, "Normal", 93 111 { 94 112 { RTTHREADTYPE_INVALID, ~0 }, 95 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST},96 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_BELOW_NORMAL},97 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_NORMAL},98 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL},99 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL},100 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL},101 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL},102 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL},103 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL},104 { RTTHREADTYPE_IO, THREAD_PRIORITY_HIGHEST},105 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST}113 { RTTHREADTYPE_INFREQUENT_POLLER, PRTYC_IDLETIME, 30 }, 114 { RTTHREADTYPE_MAIN_HEAVY_WORKER, PRTYC_IDLETIME, 31 }, 115 { RTTHREADTYPE_EMULATION, PRTYC_REGULAR, 0 }, 116 { RTTHREADTYPE_DEFAULT, PRTYC_REGULAR, 5 }, 117 { RTTHREADTYPE_GUI, PRTYC_REGULAR, 10 }, 118 { RTTHREADTYPE_MAIN_WORKER, PRTYC_REGULAR, 12 }, 119 { RTTHREADTYPE_VRDP_IO, PRTYC_REGULAR, 15 }, 120 { RTTHREADTYPE_DEBUGGER, PRTYC_REGULAR, 20 }, 121 { RTTHREADTYPE_MSG_PUMP, PRTYC_REGULAR, 25 }, 122 { RTTHREADTYPE_IO, PRTYC_FOREGROUNDSERVER, 5 }, 123 { RTTHREADTYPE_TIMER, PRTYC_TIMECRITICAL, 0 } 106 124 } 107 125 }, 108 126 { 109 RTPROCPRIORITY_ LOW, "Low", ANY_PROCESS_PRIORITY_CLASS,127 RTPROCPRIORITY_HIGH, "High", 110 128 { 111 129 { RTTHREADTYPE_INVALID, ~0 }, 112 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST }, 113 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_LOWEST }, 114 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_LOWEST }, 115 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_BELOW_NORMAL }, 116 { RTTHREADTYPE_GUI, THREAD_PRIORITY_BELOW_NORMAL }, 117 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_BELOW_NORMAL }, 118 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_NORMAL }, 119 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_NORMAL }, 120 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_NORMAL }, 121 { RTTHREADTYPE_IO, THREAD_PRIORITY_NORMAL }, 122 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_NORMAL } 123 } 124 }, 125 { 126 RTPROCPRIORITY_NORMAL, "Normal - Normal", NORMAL_PRIORITY_CLASS, 127 { 128 { RTTHREADTYPE_INVALID, ~0 }, 129 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST }, 130 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_LOWEST }, 131 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_BELOW_NORMAL }, 132 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL }, 133 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL }, 134 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL }, 135 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 136 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL }, 137 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL }, 138 { RTTHREADTYPE_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 139 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST } 140 } 141 }, 142 { 143 RTPROCPRIORITY_NORMAL, "Normal", ANY_PROCESS_PRIORITY_CLASS, 144 { 145 { RTTHREADTYPE_INVALID, ~0 }, 146 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST }, 147 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_LOWEST }, 148 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_BELOW_NORMAL }, 149 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL }, 150 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL }, 151 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL }, 152 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 153 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL }, 154 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL }, 155 { RTTHREADTYPE_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 156 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST } 157 } 158 }, 159 { 160 RTPROCPRIORITY_HIGH, "High - High", HIGH_PRIORITY_CLASS, 161 { 162 { RTTHREADTYPE_INVALID, ~0 }, 163 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST }, 164 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_LOWEST }, 165 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_BELOW_NORMAL }, 166 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL }, 167 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL }, 168 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL }, 169 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 170 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL }, 171 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL }, 172 { RTTHREADTYPE_IO, THREAD_PRIORITY_HIGHEST }, 173 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST } 174 } 175 }, 176 { 177 RTPROCPRIORITY_HIGH, "High - Above Normal", ABOVE_NORMAL_PRIORITY_CLASS, 178 { 179 { RTTHREADTYPE_INVALID, ~0 }, 180 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST }, 181 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_LOWEST }, 182 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_BELOW_NORMAL }, 183 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL }, 184 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL }, 185 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL }, 186 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 187 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL }, 188 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL }, 189 { RTTHREADTYPE_IO, THREAD_PRIORITY_HIGHEST }, 190 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST } 191 } 192 }, 193 { 194 RTPROCPRIORITY_HIGH, "High", ANY_PROCESS_PRIORITY_CLASS, 195 { 196 { RTTHREADTYPE_INVALID, ~0 }, 197 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_BELOW_NORMAL }, 198 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_NORMAL }, 199 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_NORMAL }, 200 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_ABOVE_NORMAL }, 201 { RTTHREADTYPE_GUI, THREAD_PRIORITY_ABOVE_NORMAL }, 202 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_ABOVE_NORMAL }, 203 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_ABOVE_NORMAL }, 204 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_HIGHEST }, 205 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_HIGHEST }, 206 { RTTHREADTYPE_IO, THREAD_PRIORITY_HIGHEST }, 207 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST } 130 { RTTHREADTYPE_INFREQUENT_POLLER, PRTYC_IDLETIME, 30 }, 131 { RTTHREADTYPE_MAIN_HEAVY_WORKER, PRTYC_REGULAR, 0 }, 132 { RTTHREADTYPE_EMULATION, PRTYC_REGULAR, 0 }, 133 { RTTHREADTYPE_DEFAULT, PRTYC_REGULAR, 15 }, 134 { RTTHREADTYPE_GUI, PRTYC_REGULAR, 20 }, 135 { RTTHREADTYPE_MAIN_WORKER, PRTYC_REGULAR, 25 }, 136 { RTTHREADTYPE_VRDP_IO, PRTYC_REGULAR, 30 }, 137 { RTTHREADTYPE_DEBUGGER, PRTYC_TIMECRITICAL, 2 }, 138 { RTTHREADTYPE_MSG_PUMP, PRTYC_TIMECRITICAL, 3 }, 139 { RTTHREADTYPE_IO, PRTYC_TIMECRITICAL, 4 }, 140 { RTTHREADTYPE_TIMER, PRTYC_TIMECRITICAL, 5 } 208 141 } 209 142 } … … 215 148 * This can be recalulated at runtime depending on what the 216 149 * system allow us to do. Presently we don't do this as it's 217 * generally not a bit issue on Win32 hosts.150 * generally not a bit issue on OS/2 hosts. 218 151 */ 219 152 static PROCPRIORITY g_aDefaultPriority = 220 153 { 221 RTPROCPRIORITY_LOW, "Default", ANY_PROCESS_PRIORITY_CLASS,154 RTPROCPRIORITY_LOW, "Default", 222 155 { 223 156 { RTTHREADTYPE_INVALID, ~0 }, 224 { RTTHREADTYPE_INFREQUENT_POLLER, THREAD_PRIORITY_LOWEST},225 { RTTHREADTYPE_MAIN_HEAVY_WORKER, THREAD_PRIORITY_BELOW_NORMAL},226 { RTTHREADTYPE_EMULATION, THREAD_PRIORITY_NORMAL},227 { RTTHREADTYPE_DEFAULT, THREAD_PRIORITY_NORMAL},228 { RTTHREADTYPE_GUI, THREAD_PRIORITY_NORMAL},229 { RTTHREADTYPE_MAIN_WORKER, THREAD_PRIORITY_NORMAL},230 { RTTHREADTYPE_VRDP_IO, THREAD_PRIORITY_NORMAL},231 { RTTHREADTYPE_DEBUGGER, THREAD_PRIORITY_ABOVE_NORMAL},232 { RTTHREADTYPE_MSG_PUMP, THREAD_PRIORITY_ABOVE_NORMAL},233 { RTTHREADTYPE_IO, THREAD_PRIORITY_HIGHEST},234 { RTTHREADTYPE_TIMER, THREAD_PRIORITY_HIGHEST}157 { RTTHREADTYPE_INFREQUENT_POLLER, PRTYC_IDLETIME, 30 }, 158 { RTTHREADTYPE_MAIN_HEAVY_WORKER, PRTYC_IDLETIME, 31 }, 159 { RTTHREADTYPE_EMULATION, PRTYC_REGULAR, 0 }, 160 { RTTHREADTYPE_DEFAULT, PRTYC_REGULAR, 5 }, 161 { RTTHREADTYPE_GUI, PRTYC_REGULAR, 10 }, 162 { RTTHREADTYPE_MAIN_WORKER, PRTYC_REGULAR, 12 }, 163 { RTTHREADTYPE_VRDP_IO, PRTYC_REGULAR, 15 }, 164 { RTTHREADTYPE_DEBUGGER, PRTYC_REGULAR, 20 }, 165 { RTTHREADTYPE_MSG_PUMP, PRTYC_REGULAR, 25 }, 166 { RTTHREADTYPE_IO, PRTYC_FOREGROUNDSERVER, 5 }, 167 { RTTHREADTYPE_TIMER, PRTYC_TIMECRITICAL, 0 } 235 168 } 236 169 }; … … 268 201 Assert(enmPriority > RTPROCPRIORITY_INVALID && enmPriority < RTPROCPRIORITY_LAST); 269 202 return VINF_SUCCESS; 270 }271 272 273 /**274 * Gets the win32 thread handle.275 *276 * @returns Valid win32 handle for the specified thread.277 * @param pThread The thread.278 */279 inline HANDLE rtThreadNativeGetHandle(PRTTHREADINT pThread)280 {281 if ((uintptr_t)pThread->Core.Key == GetCurrentThreadId())282 return GetCurrentThread();283 return (HANDLE)pThread->hThread;284 203 } 285 204 … … 303 222 ("enmType=%d entry=%d\n", enmType, g_pProcessPriority->aTypes[enmType].enmType)); 304 223 305 #ifdef WIN32_SCHED_ENABLED 306 if (SetThreadPriority(rtThreadNativeGetHandle(pThread), g_pProcessPriority->aTypes[enmType].dwThreadPriority)) 307 return VINF_SUCCESS; 308 309 DWORD dwLastError = GetLastError(); 310 int rc = RTErrConvertFromWin32(dwLastError); 311 AssertMsgFailed(("SetThreadPriority(%p, %d) failed, dwLastError=%d rc=%Vrc\n", 312 rtThreadNativeGetHandle(pThread), g_pProcessPriority->aTypes[enmType].dwThreadPriority, dwLastError, rc)); 313 return rc; 224 #ifdef OS2_SCHED_ENABLED 225 APIRET rc = DosSetPriority(PRTYS_THREAD, g_pProcessPriority->aTypes[enmType].ulClass, g_pProcessPriority->aTypes[enmType].ulDelta, (ULONG)pThread->Core.Key & 0xffff /*tid*/); 226 AssertMsg(rc == NO_ERROR, ("%d\n", rc)); 227 return RTErrConvertFromOS2(rc); 314 228 #else 315 229 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.