ftest: add pthread_cond in progress bar to optimize cpu usage

This commit is contained in:
2025-07-03 00:36:44 +02:00
parent 02b1f29a3c
commit 1f2bebab91
3 changed files with 39 additions and 4 deletions
+1 -1
View File
@@ -164,7 +164,7 @@ TEST(searchNode){
TEST(pollThread){ TEST(pollThread){
struct y_socket_t *argS=y_socket_create("1600", 2, 1); struct y_socket_t *argS=y_socket_create("1600", 2, 3);
pthread_t pollTh; pthread_t pollTh;
pthread_create(&pollTh, NULL, y_socket_poll_fds, (void*)argS); pthread_create(&pollTh, NULL, y_socket_poll_fds, (void*)argS);
Binary file not shown.
+38 -3
View File
@@ -108,6 +108,7 @@ bool progress = true; // false;
char *bar_progress = " c"; /*{fill_bar,fill_dot,colored} */ char *bar_progress = " c"; /*{fill_bar,fill_dot,colored} */
bool is_bar_progress = true; bool is_bar_progress = true;
size_t count_para_progress = 0;
FILE **f_ou_th; FILE **f_ou_th;
@@ -172,6 +173,10 @@ pthread_mutex_t mut_count_fail_global;
pthread_mutex_t mut_count_pass_local; pthread_mutex_t mut_count_pass_local;
pthread_mutex_t mut_count_fail_local; pthread_mutex_t mut_count_fail_local;
pthread_mutex_t mut_count_para_progress;
pthread_cond_t cond_count_para_progress;
/* /*
* end of the global variables of test_t.c * end of the global variables of test_t.c
*/ */
@@ -890,14 +895,21 @@ unsigned nnsleep(long long x) {
} }
void bar_progress_test_(){ void bar_progress_test_(){
bar_progress_start(); bar_progress_start();
struct func *tmp; struct func *tmp;
size_t num_test=0; size_t num_test=0;
size_t current_local_count_progress=0;
do{ do{
pthread_mutex_lock(&mut_count_para_progress);
while(current_local_count_progress == count_para_progress && count_para_progress <= count_tests){
pthread_cond_wait(&cond_count_para_progress, &mut_count_para_progress);
}
current_local_count_progress = count_para_progress;
pthread_mutex_unlock(&mut_count_para_progress);
tmp = current_fn; tmp = current_fn;
//UNLOCK(mut_current_test); //UNLOCK(mut_current_test);
if(tmp) if(tmp)
@@ -906,6 +918,7 @@ void bar_progress_test_(){
bar_progress_step_msg(num_test, count_tests, "test N°", default_bar_progress[0],default_bar_progress[1],default_bar_progress[2]=='c'); bar_progress_step_msg(num_test, count_tests, "test N°", default_bar_progress[0],default_bar_progress[1],default_bar_progress[2]=='c');
else bar_progress_step_msg(num_test, count_tests, "test N°", bar_progress[0],bar_progress[1],bar_progress[2]=='c'); else bar_progress_step_msg(num_test, count_tests, "test N°", bar_progress[0],bar_progress[1],bar_progress[2]=='c');
nnsleep(200000000);// 200 milliseconds nnsleep(200000000);// 200 milliseconds
//nnsleep(2000000000);// 2000 milliseconds
}while(tmp); }while(tmp);
@@ -1101,6 +1114,10 @@ void execute_all(struct func *fun){
bool exec_test=0; bool exec_test=0;
//PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running %lu tests.\n",count_tests); //PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running %lu tests.\n",count_tests);
while(tmp){ while(tmp){
pthread_mutex_lock(&mut_count_para_progress);
++count_para_progress;
pthread_mutex_unlock(&mut_count_para_progress);
pthread_cond_signal(&cond_count_para_progress);
current_fn = tmp; current_fn = tmp;
CHECK_IF_SELECTED_TEST(tmp->name) CHECK_IF_SELECTED_TEST(tmp->name)
if(exec_test){ if(exec_test){
@@ -1111,6 +1128,10 @@ void execute_all(struct func *fun){
tmp = tmp->next; tmp = tmp->next;
} }
current_fn = tmp; current_fn = tmp;
pthread_mutex_lock(&mut_count_para_progress);
++count_para_progress;
pthread_mutex_unlock(&mut_count_para_progress);
pthread_cond_signal(&cond_count_para_progress);
} }
void _purge_t(); void _purge_t();
@@ -1172,7 +1193,7 @@ stat_end_parallel_run(size_t ntst, struct timespec start_t, size_t id_thrd){
else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on thread[%ld]. (%lf ms total)\n",ntst, id_thrd, diff_timespec_milliseconds(end_t, start_t)); else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on thread[%ld]. (%lf ms total)\n",ntst, id_thrd, diff_timespec_milliseconds(end_t, start_t));
PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_PS]," %lu tests passed on thread[%ld]\n", count_pass_thread[id_thrd], id_thrd); PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_PS]," %lu tests passed on thread[%ld]\n", count_pass_thread[id_thrd], id_thrd);
if(thread_test_failed_l[id_thrd] != NULL){ if(thread_test_failed_l[id_thrd] != NULL){
PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %lu tests failed on thread[%ld], listed below:\n",count_fail_thread[id_thrd],id_thrd); PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %lu tests failed on thread[%ld], listed below:\n",count_fail_thread[id_thrd],id_thrd);
list_failed_test(thread_test_failed_l[id_thrd], __func__); list_failed_test(thread_test_failed_l[id_thrd], __func__);
} }
@@ -1242,6 +1263,10 @@ void execute_test_parallel(size_t id_thrd){
bool exec_test=0; bool exec_test=0;
do{ do{
pthread_mutex_lock(&mut_count_para_progress);
++count_para_progress;
pthread_mutex_unlock(&mut_count_para_progress);
pthread_cond_signal(&cond_count_para_progress);
LOCK(mut_current_test); LOCK(mut_current_test);
tmp = current_fn; tmp = current_fn;
if(tmp){ if(tmp){
@@ -1259,11 +1284,17 @@ void execute_test_parallel(size_t id_thrd){
UNLOCK(mut_current_test); UNLOCK(mut_current_test);
} }
}while(tmp); }while(tmp);
pthread_mutex_lock(&mut_count_para_progress);
++count_para_progress;
pthread_mutex_unlock(&mut_count_para_progress);
pthread_cond_signal(&cond_count_para_progress);
} }
void* void*
run_parallel_tests(void *id) run_parallel_tests(void *id)
{ {
size_t id_th=*(size_t*)id; size_t id_th=*(size_t*)id;
id_thread_self[id_th] = pthread_self(); id_thread_self[id_th] = pthread_self();
struct timespec start_t; struct timespec start_t;
@@ -1333,6 +1364,8 @@ init_parallel_test_()
pthread_mutex_init(&mut_count_fail_global, NULL); pthread_mutex_init(&mut_count_fail_global, NULL);
pthread_mutex_init(&mut_count_pass_local, NULL); pthread_mutex_init(&mut_count_pass_local, NULL);
pthread_mutex_init(&mut_count_fail_local, NULL); pthread_mutex_init(&mut_count_fail_local, NULL);
pthread_mutex_init(&mut_count_para_progress, NULL);
pthread_cond_init(&cond_count_para_progress, NULL);
} }
/* /*
* finalisation, cleanup * finalisation, cleanup
@@ -1362,6 +1395,8 @@ final_parallel_test_()
pthread_mutex_destroy(&mut_count_fail_global); pthread_mutex_destroy(&mut_count_fail_global);
pthread_mutex_destroy(&mut_count_pass_local); pthread_mutex_destroy(&mut_count_pass_local);
pthread_mutex_destroy(&mut_count_fail_local); pthread_mutex_destroy(&mut_count_fail_local);
pthread_mutex_destroy(&mut_count_para_progress);
pthread_cond_destroy(&cond_count_para_progress);
char reader[256]="Here are the ordered results for each thread"; char reader[256]="Here are the ordered results for each thread";