X-Git-Url: https://git.saurik.com/apple/libpthread.git/blobdiff_plain/45deb508575711c47d78d19e326a9a26e43e63e0..c1f56ec94c29e576da2d6d7164bee1bdb2f02471:/private/qos_private.h diff --git a/private/qos_private.h b/private/qos_private.h deleted file mode 100644 index 4ec532c..0000000 --- a/private/qos_private.h +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (c) 2013-2014 Apple Inc. All rights reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_LICENSE_HEADER_END@ - */ - -#ifndef _QOS_PRIVATE_H -#define _QOS_PRIVATE_H - -#include -#include -#include /* qos_class_t */ -#include - -#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL -// allow __DARWIN_C_LEVEL to turn off the use of mach_port_t -#include -#endif - -// redeffed here to avoid leaving __QOS_ENUM defined in the public header -#define __QOS_ENUM(name, type, ...) enum { __VA_ARGS__ }; typedef type name##_t -#define __QOS_AVAILABLE_10_10 -#define __QOS_AVAILABLE_10_11 -#define __QOS_AVAILABLE_10_12 - -#if defined(__has_feature) && defined(__has_extension) -#if __has_feature(objc_fixed_enum) || __has_extension(cxx_strong_enums) -#undef __QOS_ENUM -#define __QOS_ENUM(name, type, ...) typedef enum : type { __VA_ARGS__ } name##_t -#endif -#if __has_feature(enumerator_attributes) -#undef __QOS_AVAILABLE_10_10 -#define __QOS_AVAILABLE_10_10 __API_AVAILABLE(macos(10.10), ios(8.0)) -#undef __QOS_AVAILABLE_10_11 -#define __QOS_AVAILABLE_10_11 __API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0), watchos(2.0)) -#undef __QOS_AVAILABLE_10_12 -#define __QOS_AVAILABLE_10_12 __API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0)) -#undef __QOS_AVAILABLE_10_15_1 -#define __QOS_AVAILABLE_10_15_1 __API_AVAILABLE(macos(10.15.1), ios(13.2), tvos(13.2), watchos(6.2)) -#endif -#endif - -// This enum matches workq_set_self_flags in -// xnu's workqueue_internal.h. -__QOS_ENUM(_pthread_set_flags, unsigned int, - _PTHREAD_SET_SELF_QOS_FLAG __QOS_AVAILABLE_10_10 = 0x1, - _PTHREAD_SET_SELF_VOUCHER_FLAG __QOS_AVAILABLE_10_10 = 0x2, - _PTHREAD_SET_SELF_FIXEDPRIORITY_FLAG __QOS_AVAILABLE_10_11 = 0x4, - _PTHREAD_SET_SELF_TIMESHARE_FLAG __QOS_AVAILABLE_10_11 = 0x8, - _PTHREAD_SET_SELF_WQ_KEVENT_UNBIND __QOS_AVAILABLE_10_12 = 0x10, - _PTHREAD_SET_SELF_ALTERNATE_AMX __QOS_AVAILABLE_10_15_1 = 0x20, -); - -#undef __QOS_ENUM -#undef __QOS_AVAILABLE_10_10 -#undef __QOS_AVAILABLE_10_11 -#undef __QOS_AVAILABLE_10_12 - -#ifndef KERNEL - -__BEGIN_DECLS - -/*! - * @function pthread_set_qos_class_np - * - * @abstract - * Sets the requested QOS class and relative priority of the current thread. - * - * @discussion - * The QOS class and relative priority represent an overall combination of - * system quality of service attributes on a thread. - * - * Subsequent calls to interfaces such as pthread_setschedparam() that are - * incompatible or in conflict with the QOS class system will unset the QOS - * class requested with this interface and pthread_get_qos_class_np() will - * return QOS_CLASS_UNSPECIFIED thereafter. A thread so modified is permanently - * opted-out of the QOS class system and calls to this function to request a QOS - * class for such a thread will fail and return EPERM. - * - * @param __pthread - * The current thread as returned by pthread_self(). - * EINVAL will be returned if any other thread is provided. - * - * @param __qos_class - * A QOS class value: - * - QOS_CLASS_USER_INTERACTIVE - * - QOS_CLASS_USER_INITIATED - * - QOS_CLASS_DEFAULT - * - QOS_CLASS_UTILITY - * - QOS_CLASS_BACKGROUND - * - QOS_CLASS_MAINTENANCE - * EINVAL will be returned if any other value is provided. - * - * @param __relative_priority - * A relative priority within the QOS class. This value is a negative offset - * from the maximum supported scheduler priority for the given class. - * EINVAL will be returned if the value is greater than zero or less than - * QOS_MIN_RELATIVE_PRIORITY. - * - * @return - * Zero if successful, othwerise an errno value. - */ -__API_DEPRECATED_WITH_REPLACEMENT("pthread_set_qos_class_self_np", macos(10.10, 10.10), ios(8.0, 8.0)) -int -pthread_set_qos_class_np(pthread_t __pthread, - qos_class_t __qos_class, - int __relative_priority); - -/* Private interfaces for libdispatch to encode/decode specific values of pthread_priority_t. */ - -// Encode a class+priority pair into a pthread_priority_t, -__API_AVAILABLE(macos(10.10), ios(8.0)) -pthread_priority_t -_pthread_qos_class_encode(qos_class_t qos_class, int relative_priority, unsigned long flags); - -// Decode a pthread_priority_t into a class+priority pair. -__API_AVAILABLE(macos(10.10), ios(8.0)) -qos_class_t -_pthread_qos_class_decode(pthread_priority_t priority, int *relative_priority, unsigned long *flags); - -// Encode a legacy workqueue API priority into a pthread_priority_t. This API -// is deprecated and can be removed when the simulator no longer uses it. -__API_DEPRECATED("no longer used", macos(10.10, 10.13), ios(8.0, 11.0)) -pthread_priority_t -_pthread_qos_class_encode_workqueue(int queue_priority, unsigned long flags); - -#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL - -// Set QoS or voucher, or both, on pthread_self() -__API_AVAILABLE(macos(10.10), ios(8.0)) -int -_pthread_set_properties_self(_pthread_set_flags_t flags, pthread_priority_t priority, mach_port_t voucher); - -// Set self to fixed priority without disturbing QoS or priority -__API_AVAILABLE(macos(10.10), ios(8.0)) -int -pthread_set_fixedpriority_self(void); - -// Inverse of pthread_set_fixedpriority_self() -__API_AVAILABLE(macos(10.10), ios(8.0)) -int -pthread_set_timeshare_self(void); - -// Set self to avoid running on the same AMX as -// other work in this group. -// Only allowed on non-workqueue pthreads -__API_AVAILABLE(macos(10.15.1), ios(13.2), tvos(13.2), watchos(6.2)) -int -pthread_prefer_alternate_amx_self(void); - -/*! - * @const PTHREAD_MAX_PARALLELISM_PHYSICAL - * Flag that can be used with pthread_qos_max_parallelism() and - * pthread_time_constraint_max_parallelism() to ask for a count of physical - * compute units available for parallelism (default is logical). - */ -#define PTHREAD_MAX_PARALLELISM_PHYSICAL 0x1 - -/*! - * @function pthread_qos_max_parallelism - * - * @abstract - * Returns the number of compute units available for parallel computation at - * a specified QoS class. - * - * @param qos - * The specified QoS class. - * - * @param flags - * 0 or PTHREAD_MAX_PARALLELISM_PHYSICAL. - * - * @return - * The number of compute units available for parallel computation for the - * specified QoS, or -1 on failure (with errno set accordingly). - */ -__API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0)) -int -pthread_qos_max_parallelism(qos_class_t qos, unsigned long flags); - -/*! - * @function pthread_time_constraint_max_parallelism() - * - * @abstract - * Returns the number of compute units available for parallel computation on - * realtime threads. - * - * @param flags - * 0 or PTHREAD_MAX_PARALLELISM_PHYSICAL. - * - * @return - * The number of compute units available for parallel computation on realtime - * threads, or -1 on failure (with errno set accordingly). - */ -__API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0)) -int -pthread_time_constraint_max_parallelism(unsigned long flags); - -#endif // __DARWIN_C_LEVEL >= __DARWIN_C_FULL - -__END_DECLS - -#endif // KERNEL - -#endif //_QOS_PRIVATE_H