blob: 0f6e263906dde9abd72a070073c754820629a1ac [file] [log] [blame]
bungeman@google.com55487522012-05-14 14:09:24 +00001/*
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
15bool 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}