Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(336)

Side by Side Diff: base/threading/platform_thread_win.cc

Issue 1193303002: base/threading: restrict to set only current thread priority (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: #21, git cl format, fix win build Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/threading/platform_thread.h" 5 #include "base/threading/platform_thread.h"
6 6
7 #include "base/debug/alias.h" 7 #include "base/debug/alias.h"
8 #include "base/debug/profiler.h" 8 #include "base/debug/profiler.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/threading/thread_id_name_manager.h" 10 #include "base/threading/thread_id_name_manager.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 bool joinable; 48 bool joinable;
49 ThreadPriority priority; 49 ThreadPriority priority;
50 }; 50 };
51 51
52 DWORD __stdcall ThreadFunc(void* params) { 52 DWORD __stdcall ThreadFunc(void* params) {
53 ThreadParams* thread_params = static_cast<ThreadParams*>(params); 53 ThreadParams* thread_params = static_cast<ThreadParams*>(params);
54 PlatformThread::Delegate* delegate = thread_params->delegate; 54 PlatformThread::Delegate* delegate = thread_params->delegate;
55 if (!thread_params->joinable) 55 if (!thread_params->joinable)
56 base::ThreadRestrictions::SetSingletonAllowed(false); 56 base::ThreadRestrictions::SetSingletonAllowed(false);
57 57
58 if (thread_params->priority != ThreadPriority::NORMAL) { 58 if (thread_params->priority != ThreadPriority::NORMAL)
59 PlatformThread::SetThreadPriority( 59 PlatformThread::SetCurrentThreadPriority(thread_params->priority);
60 PlatformThread::CurrentHandle(), thread_params->priority);
61 }
62 60
63 // Retrieve a copy of the thread handle to use as the key in the 61 // Retrieve a copy of the thread handle to use as the key in the
64 // thread name mapping. 62 // thread name mapping.
65 PlatformThreadHandle::Handle platform_handle; 63 PlatformThreadHandle::Handle platform_handle;
66 BOOL did_dup = DuplicateHandle(GetCurrentProcess(), 64 BOOL did_dup = DuplicateHandle(GetCurrentProcess(),
67 GetCurrentThread(), 65 GetCurrentThread(),
68 GetCurrentProcess(), 66 GetCurrentProcess(),
69 &platform_handle, 67 &platform_handle,
70 0, 68 0,
71 FALSE, 69 FALSE,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 DWORD error = GetLastError(); 229 DWORD error = GetLastError();
232 debug::Alias(&error); 230 debug::Alias(&error);
233 debug::Alias(&result); 231 debug::Alias(&result);
234 CHECK(false); 232 CHECK(false);
235 } 233 }
236 234
237 CloseHandle(thread_handle.platform_handle()); 235 CloseHandle(thread_handle.platform_handle());
238 } 236 }
239 237
240 // static 238 // static
241 void PlatformThread::SetThreadPriority(PlatformThreadHandle handle, 239 void PlatformThread::SetCurrentThreadPriority(ThreadPriority priority) {
242 ThreadPriority priority) {
243 DCHECK(!handle.is_null());
244
245 int desired_priority = THREAD_PRIORITY_ERROR_RETURN; 240 int desired_priority = THREAD_PRIORITY_ERROR_RETURN;
246 switch (priority) { 241 switch (priority) {
247 case ThreadPriority::BACKGROUND: 242 case ThreadPriority::BACKGROUND:
248 desired_priority = THREAD_PRIORITY_LOWEST; 243 desired_priority = THREAD_PRIORITY_LOWEST;
249 break; 244 break;
250 case ThreadPriority::NORMAL: 245 case ThreadPriority::NORMAL:
251 desired_priority = THREAD_PRIORITY_NORMAL; 246 desired_priority = THREAD_PRIORITY_NORMAL;
252 break; 247 break;
253 case ThreadPriority::DISPLAY: 248 case ThreadPriority::DISPLAY:
254 desired_priority = THREAD_PRIORITY_ABOVE_NORMAL; 249 desired_priority = THREAD_PRIORITY_ABOVE_NORMAL;
255 break; 250 break;
256 case ThreadPriority::REALTIME_AUDIO: 251 case ThreadPriority::REALTIME_AUDIO:
257 desired_priority = THREAD_PRIORITY_TIME_CRITICAL; 252 desired_priority = THREAD_PRIORITY_TIME_CRITICAL;
258 break; 253 break;
259 default: 254 default:
260 NOTREACHED() << "Unknown priority."; 255 NOTREACHED() << "Unknown priority.";
261 break; 256 break;
262 } 257 }
263 DCHECK_NE(desired_priority, THREAD_PRIORITY_ERROR_RETURN); 258 DCHECK_NE(desired_priority, THREAD_PRIORITY_ERROR_RETURN);
264 259
265 #ifndef NDEBUG 260 #ifndef NDEBUG
266 const BOOL success = 261 const BOOL success =
267 #endif 262 #endif
268 ::SetThreadPriority(handle.platform_handle(), desired_priority); 263 ::SetThreadPriority(PlatformThread::CurrentHandle().platform_handle(),
264 desired_priority);
269 DPLOG_IF(ERROR, !success) << "Failed to set thread priority to " 265 DPLOG_IF(ERROR, !success) << "Failed to set thread priority to "
270 << desired_priority; 266 << desired_priority;
271 } 267 }
272 268
273 // static 269 // static
274 ThreadPriority PlatformThread::GetThreadPriority(PlatformThreadHandle handle) { 270 ThreadPriority PlatformThread::GetCurrentThreadPriority() {
275 DCHECK(!handle.is_null()); 271 int priority =
276 272 ::GetThreadPriority(PlatformThread::CurrentHandle().platform_handle());
277 int priority = ::GetThreadPriority(handle.platform_handle());
278 switch (priority) { 273 switch (priority) {
279 case THREAD_PRIORITY_LOWEST: 274 case THREAD_PRIORITY_LOWEST:
280 return ThreadPriority::BACKGROUND; 275 return ThreadPriority::BACKGROUND;
281 case THREAD_PRIORITY_NORMAL: 276 case THREAD_PRIORITY_NORMAL:
282 return ThreadPriority::NORMAL; 277 return ThreadPriority::NORMAL;
283 case THREAD_PRIORITY_ABOVE_NORMAL: 278 case THREAD_PRIORITY_ABOVE_NORMAL:
284 return ThreadPriority::DISPLAY; 279 return ThreadPriority::DISPLAY;
285 case THREAD_PRIORITY_TIME_CRITICAL: 280 case THREAD_PRIORITY_TIME_CRITICAL:
286 return ThreadPriority::REALTIME_AUDIO; 281 return ThreadPriority::REALTIME_AUDIO;
287 case THREAD_PRIORITY_ERROR_RETURN: 282 case THREAD_PRIORITY_ERROR_RETURN:
288 DPCHECK(false) << "GetThreadPriority error"; // Falls through. 283 DPCHECK(false) << "GetThreadPriority error"; // Falls through.
289 default: 284 default:
290 NOTREACHED() << "Unexpected priority: " << priority; 285 NOTREACHED() << "Unexpected priority: " << priority;
291 return ThreadPriority::NORMAL; 286 return ThreadPriority::NORMAL;
292 } 287 }
293 } 288 }
294 289
295 } // namespace base 290 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698