xref: /xnu-11215.81.4/tests/sched/sched_test_harness/sched_runqueue_harness.h (revision d4514f0bc1d3f944c22d92e68b646ac3fb40d452)
1 // Copyright (c) 2023 Apple Inc.  All rights reserved.
2 
3 #pragma once
4 
5 #include <stdint.h>
6 #include <stdbool.h>
7 #include <stdarg.h>
8 
9 /* Opaque thread pointer */
10 typedef void *test_thread_t;
11 
12 /* Mocking mach_absolute_time() */
13 #define mach_absolute_time mock_absolute_time
14 extern uint64_t  mock_absolute_time(void);
15 extern void      set_mock_time(uint64_t timestamp);
16 extern void      increment_mock_time(uint64_t added_time);
17 extern void      increment_mock_time_us(uint64_t added_us);
18 
19 /* Test harness utilities */
20 extern void                  init_harness(char *test_name);
21 extern struct thread_group  *create_tg(int interactivity_score);
22 extern test_thread_t         create_thread(int th_sched_bucket, struct thread_group *tg, int pri);
23 extern void                  set_thread_sched_mode(test_thread_t thread, int mode);
24 extern void                  set_thread_processor_bound(test_thread_t thread);
25 extern void                  set_thread_current(test_thread_t thread);
26 extern bool                  runqueue_empty(void);
27 extern void                  enqueue_thread(test_thread_t thread);
28 extern void                  enqueue_threads(int num_threads, ...);
29 extern void                  enqueue_threads_arr(int num_threads, test_thread_t *threads);
30 extern void                  enqueue_threads_rand_order(unsigned int random_seed, int num_threads, ...);
31 extern void                  enqueue_threads_arr_rand_order(unsigned int random_seed, int num_threads, test_thread_t *threads);
32 extern bool                  dequeue_thread_expect(test_thread_t expected_thread);
33 extern int                   dequeue_threads_expect_ordered(int num_threads, ...);
34 extern int                   dequeue_threads_expect_ordered_arr(int num_threads, test_thread_t *threads);
35 extern bool                  dequeue_thread_expect_compare_current(test_thread_t expected_thread);
36 extern bool                  check_preempt_current(bool preemption_expected);
37 extern bool                  tracepoint_expect(uint64_t trace_code, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4);
38 extern void                  disable_auto_current_thread(void);
39 
40 /* Functions implemented by specific scheduler policy (i.e. Clutch) */
41 extern void                  impl_init_runqueue(void);
42 extern struct thread_group  *impl_create_tg(int interactivity_score);
43 extern test_thread_t         impl_create_thread(int th_sched_bucket, struct thread_group *tg, int pri);
44 extern void                  impl_set_thread_sched_mode(test_thread_t thread, int mode);
45 extern void                  impl_set_thread_processor_bound(test_thread_t thread);
46 extern void                  impl_set_thread_current(test_thread_t thread);
47 extern void                  impl_clear_thread_current(void);
48 extern void                  impl_enqueue_thread(test_thread_t thread);
49 extern test_thread_t         impl_dequeue_thread(void);
50 extern test_thread_t         impl_dequeue_thread_compare_current(void);
51 extern bool                  impl_processor_csw_check(void);
52 extern void                  impl_pop_tracepoint(uint64_t *trace_code, uint64_t *arg1, uint64_t *arg2, uint64_t *arg3, uint64_t *arg4);
53 extern void                  impl_cleanup_harness(void);
54