diff options
| author | zhengchao <[email protected]> | 2022-01-16 21:06:13 +0500 |
|---|---|---|
| committer | 郑超 <[email protected]> | 2022-01-24 14:53:45 +0000 |
| commit | 5355c60af7f33d4733722689fdba97055d73d582 (patch) | |
| tree | 1b57c5d818f67c1423fbd1c7a1d39519fad5005d /src/MESA_field_stat.cpp | |
| parent | a0e9dba33fe250ae6ae6ddd613cca0e8ec74cf2a (diff) | |
为每个线程分配独立的计数器,以提升FS_operate多线程性能。其中使用thread local storage存储计数器下标。v2.10.0
Diffstat (limited to 'src/MESA_field_stat.cpp')
| -rw-r--r-- | src/MESA_field_stat.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/MESA_field_stat.cpp b/src/MESA_field_stat.cpp index c576547..6528a94 100644 --- a/src/MESA_field_stat.cpp +++ b/src/MESA_field_stat.cpp @@ -1,5 +1,6 @@ #include "field_stat2.h" #include "field_stat_internal.h" +#include "threadsafe_counter.h" #include "hdr_histogram.h" #include "cJSON.h" @@ -789,13 +790,13 @@ int FS_operate(screen_stat_handle_t handle,int id,int column_id,enum field_op op switch(op) { case FS_OP_ADD: - atomic_add(&(target->changing), value); + threadsafe_counter_add(&(target->changing), value); break; case FS_OP_SET: - atomic_set(&(target->changing), value-target->accumulated); + threadsafe_counter_set(&(target->changing), value-target->accumulated); break; case FS_OP_SUB: - atomic_sub(&(target->changing), value); + threadsafe_counter_sub(&(target->changing), value); break; default: assert(0); @@ -821,12 +822,12 @@ long long get_stat_unit_val(display_manifest_t* p, int column_seq,enum field_cal default: break; } - value= atomic_read(&(target->changing)); + value= threadsafe_counter_read(&(target->changing)); if(is_refer==0) { target->previous_changed=value; target->accumulated+=value; - atomic_set(&(target->changing), 0); + threadsafe_counter_set(&(target->changing), 0); } switch(calc_type) { @@ -1322,7 +1323,7 @@ static int output_style_histogram(struct FS_space_t* _handle, long long interval { pos--; } - pos+=snprintf(pos,size-(pos-print_buf),"\n%s\n",draw_line); + pos+=snprintf(pos,size-(pos-print_buf),"\n%s\n", draw_line); } return pos-print_buf; } @@ -1360,7 +1361,8 @@ cJSON *fs2_metrics_to_json(FS_space_t* _handle, long long timestamp) cJSON_AddStringToObject(tmp_obj, "name", p->name); cJSON_AddStringToObject(tmp_obj, "type", "single"); cJSON_AddNumberToObject(tmp_obj, "acc", p->single.accumulated); - cJSON_AddNumberToObject(tmp_obj, "diff", p->single.changing); + value=threadsafe_counter_read(&p->single.changing); + cJSON_AddNumberToObject(tmp_obj, "diff", value); cJSON_AddItemToArray(metrics_array_obj, tmp_obj); //cJSON_Delete(tmp_obj); break; @@ -1371,8 +1373,9 @@ cJSON *fs2_metrics_to_json(FS_space_t* _handle, long long timestamp) tmp_obj = cJSON_CreateObject(); cJSON_AddStringToObject(tmp_obj, "name", p->name); cJSON_AddStringToObject(tmp_obj, "type", "single"); - cJSON_AddNumberToObject(tmp_obj, "acc", p->single.accumulated); - cJSON_AddNumberToObject(tmp_obj, "diff", p->single.changing); + cJSON_AddNumberToObject(tmp_obj, "acc", p->single.accumulated); + value=threadsafe_counter_read(&p->single.changing); + cJSON_AddNumberToObject(tmp_obj, "diff", value); cJSON_AddItemToArray(metrics_array_obj, tmp_obj); //cJSON_Delete(tmp_obj); break; @@ -1390,7 +1393,8 @@ cJSON *fs2_metrics_to_json(FS_space_t* _handle, long long timestamp) cJSON_AddStringToObject(tmp_obj, "name", tmp_output_name); //cJSON_AddStringToObject(tmp_obj, "type", "line"); cJSON_AddNumberToObject(tmp_obj, "acc", p_column->single.accumulated); - cJSON_AddNumberToObject(tmp_obj, "diff", p_column->single.changing); + value=threadsafe_counter_read(&p->single.changing); + cJSON_AddNumberToObject(tmp_obj, "diff", value); cJSON_AddItemToArray(metrics_array_obj, tmp_obj); //cJSON_Delete(tmp_obj); } |
