Skip to content

Commit 4e9ae06

Browse files
committed
Add thread_metric's semaphore benchmark
1 parent 045cb7f commit 4e9ae06

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

adapter/thread_metric/BUILD.gn

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,17 @@ tm_case("tm_cooperative_scheduling_test") {
4545
[ "//external/thread_metric/v6.4.2/src/tm_cooperative_scheduling_test.c" ]
4646
}
4747

48+
tm_case("tm_synchronization_processing_test") {
49+
sources = [
50+
"//external/thread_metric/v6.4.2/src/tm_synchronization_processing_test.c",
51+
]
52+
}
53+
4854
group("run_tests") {
4955
testonly = true
5056
deps = [
5157
":run_tm_basic_process_test",
5258
":run_tm_preemptive_scheduling_test",
59+
":run_tm_synchronization_processing_test",
5360
]
5461
}

adapter/thread_metric/src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use blueos::{
1818
scheduler,
1919
scheduler::InsertToEnd,
20+
sync::semaphore::Semaphore,
2021
thread,
2122
thread::{Entry, Thread, ThreadNode, IDLE, READY, RUNNING, SUSPENDED},
2223
time,
@@ -33,6 +34,9 @@ const TM_ERROR: c_int = 1;
3334
const MAX_THREADS: usize = 8;
3435
static mut TM_THREADS: [MaybeUninit<ThreadNode>; MAX_THREADS] =
3536
[const { MaybeUninit::zeroed() }; MAX_THREADS];
37+
const MAX_SEMAS: usize = 8;
38+
static mut TM_SEMAS: [MaybeUninit<Arc<Semaphore>>; MAX_SEMAS] =
39+
[const { MaybeUninit::zeroed() }; MAX_SEMAS];
3640

3741
#[no_mangle]
3842
pub extern "C" fn tm_initialize(test_initialization_function: extern "C" fn()) {
@@ -108,3 +112,26 @@ pub extern "C" fn tm_thread_relinquish() {
108112
pub extern "C" fn tm_thread_sleep(secs: c_int) {
109113
scheduler::suspend_me_for::<()>(Tick(TICKS_PER_SECOND * secs as usize), None);
110114
}
115+
116+
#[no_mangle]
117+
pub extern "C" fn tm_semaphore_create(sema_id: c_int) -> c_int {
118+
let sema = Arc::new(Semaphore::new());
119+
sema.init(1);
120+
unsafe {
121+
TM_SEMAS[sema_id as usize].write(sema);
122+
}
123+
TM_SUCCESS
124+
}
125+
126+
#[no_mangle]
127+
pub extern "C" fn tm_semaphore_get(sema_id: c_int) -> c_int {
128+
let sema = unsafe { TM_SEMAS[sema_id as usize].assume_init_ref() };
129+
sema.acquire_notimeout::<InsertToEnd>() as c_int
130+
}
131+
132+
#[no_mangle]
133+
pub extern "C" fn tm_semaphore_put(sema_id: c_int) -> c_int {
134+
let sema = unsafe { TM_SEMAS[sema_id as usize].assume_init_ref() };
135+
sema.release();
136+
TM_SUCCESS
137+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// TOTAL-TIMEOUT: 30
2+
// ASSERT-SUCC: Relative Time: 20
3+
// ASSERT-FAIL: ERROR

0 commit comments

Comments
 (0)