+extern uint64_t get_task_resident_size(task_t);
+extern uint64_t get_task_phys_footprint(task_t);
+extern uint64_t get_task_phys_footprint_max(task_t);
+
+extern kern_return_t task_set_phys_footprint_limit_internal(task_t, int, int *, boolean_t);
+extern kern_return_t task_get_phys_footprint_limit(task_t task, int *limit_mb);
+
+extern boolean_t is_kerneltask(task_t task);
+
+extern kern_return_t check_actforsig(task_t task, thread_t thread, int setast);
+
+extern kern_return_t machine_task_get_state(
+ task_t task,
+ int flavor,
+ thread_state_t state,
+ mach_msg_type_number_t *state_count);
+
+extern kern_return_t machine_task_set_state(
+ task_t task,
+ int flavor,
+ thread_state_t state,
+ mach_msg_type_number_t state_count);
+
+extern void machine_task_terminate(task_t task);
+
+struct _task_ledger_indices {
+ int cpu_time;
+ int tkm_private;
+ int tkm_shared;
+ int phys_mem;
+ int wired_mem;
+ int iokit_mem;
+ int phys_footprint;
+ int phys_compressed;
+ int platform_idle_wakeups;
+ int interrupt_wakeups;
+};
+extern struct _task_ledger_indices task_ledgers;
+
+/* Begin task_policy */
+
+/* value */
+#define TASK_POLICY_DISABLE 0x0
+#define TASK_POLICY_ENABLE 0x1
+
+/* category */
+#define TASK_POLICY_INTERNAL 0x0
+#define TASK_POLICY_EXTERNAL 0x1
+#define TASK_POLICY_ATTRIBUTE 0x2
+
+/* for tracing */
+#define TASK_POLICY_TASK 0x4
+#define TASK_POLICY_THREAD 0x8
+
+/* flavors (also DBG_IMPORTANCE subclasses 0x20 - 0x3F) */
+
+/* internal or external, thread or task */
+#define TASK_POLICY_DARWIN_BG 0x21
+#define TASK_POLICY_IOPOL 0x22
+#define TASK_POLICY_IO 0x23
+#define TASK_POLICY_PASSIVE_IO 0x24
+
+/* internal or external, task only */
+#define TASK_POLICY_DARWIN_BG_AND_GPU 0x25
+#define TASK_POLICY_GPU_DENY 0x26
+
+/* internal, task only */
+#define TASK_POLICY_DARWIN_BG_IOPOL 0x27
+
+/* task-only attributes */
+#define TASK_POLICY_TAL 0x28
+#define TASK_POLICY_BOOST 0x29
+#define TASK_POLICY_ROLE 0x2A
+#define TASK_POLICY_SUPPRESSED_CPU 0x2B
+#define TASK_POLICY_TERMINATED 0x2C
+#define TASK_POLICY_NEW_SOCKETS_BG 0x2D
+#define TASK_POLICY_LOWPRI_CPU 0x2E
+#define TASK_POLICY_LATENCY_QOS 0x2F
+#define TASK_POLICY_THROUGH_QOS 0x30
+#define TASK_POLICY_WATCHERS_BG 0x31
+
+/* thread-only attributes */
+#define TASK_POLICY_PIDBIND_BG 0x32
+#define TASK_POLICY_WORKQ_BG 0x33
+
+#define TASK_POLICY_MAX 0x3F
+
+/* The main entrance to task policy is this function */
+extern void proc_set_task_policy(task_t task, thread_t thread, int category, int flavor, int value);
+extern int proc_get_task_policy(task_t task, thread_t thread, int category, int flavor);
+
+/* For use by kernel threads and others who don't hold a reference on the target thread */
+extern void proc_set_task_policy_thread(task_t task, uint64_t tid, int category, int flavor, int value);
+
+extern void proc_set_task_apptype(task_t task, int type);
+
+/* IO Throttle tiers */
+#define THROTTLE_LEVEL_NONE -1
+#define THROTTLE_LEVEL_TIER0 0 /* IOPOL_NORMAL, IOPOL_DEFAULT, IOPOL_PASSIVE */
+
+#define THROTTLE_LEVEL_THROTTLED 1
+#define THROTTLE_LEVEL_TIER1 1 /* IOPOL_STANDARD */
+#define THROTTLE_LEVEL_TIER2 2 /* IOPOL_UTILITY */
+#define THROTTLE_LEVEL_TIER3 3 /* IOPOL_THROTTLE */
+
+#define THROTTLE_LEVEL_START 0
+#define THROTTLE_LEVEL_END 3
+
+#define THROTTLE_LEVEL_COMPRESSOR_TIER0 THROTTLE_LEVEL_TIER0
+#define THROTTLE_LEVEL_COMPRESSOR_TIER1 THROTTLE_LEVEL_TIER1
+#define THROTTLE_LEVEL_COMPRESSOR_TIER2 THROTTLE_LEVEL_TIER2
+
+#define THROTTLE_LEVEL_PAGEOUT_THROTTLED THROTTLE_LEVEL_TIER2
+#define THROTTLE_LEVEL_PAGEOUT_UNTHROTTLED THROTTLE_LEVEL_TIER1
+
+extern int proc_apply_workq_bgthreadpolicy(thread_t thread);
+extern int proc_restore_workq_bgthreadpolicy(thread_t thread);
+
+extern int proc_get_darwinbgstate(task_t task, uint32_t *flagsp);
+extern boolean_t proc_task_is_tal(task_t task);
+extern integer_t task_grab_latency_qos(task_t task);
+extern void task_policy_create(task_t task, int parent_boosted);