1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "SkThreadUtils.h"
9 #include "SkThreadUtils_pthread.h"
10 
11 #include <mach/mach.h>
12 #include <mach/thread_policy.h>
13 #include <pthread.h>
14 
setProcessorAffinity(unsigned int processor)15 bool SkThread::setProcessorAffinity(unsigned int processor) {
16     SkThread_PThreadData* pthreadData = static_cast<SkThread_PThreadData*>(fData);
17     if (!pthreadData->fValidPThread) {
18         return false;
19     }
20 
21     mach_port_t tid = pthread_mach_thread_np(pthreadData->fPThread);
22 
23     thread_affinity_policy_data_t policy;
24     policy.affinity_tag = processor;
25 
26     return 0 == thread_policy_set(tid,
27                                   THREAD_AFFINITY_POLICY,
28                                   (thread_policy_t) &policy,
29                                   THREAD_AFFINITY_POLICY_COUNT);
30 }
31