From 40bca8468e91e5e8a9df0b84b30458bf79a3acc3 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 1 Sep 2017 16:35:08 -0700 Subject: [PATCH] Fix one rounding bug --- src/core/lib/debug/stats_data.c | 18 +++++++++--------- tools/codegen/core/gen_stats_data.py | 8 +++++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/core/lib/debug/stats_data.c b/src/core/lib/debug/stats_data.c index 0ba10e68e3c..eeb1f9460a6 100644 --- a/src/core/lib/debug/stats_data.c +++ b/src/core/lib/debug/stats_data.c @@ -94,11 +94,11 @@ const double grpc_stats_table_0[64] = {0, 12956014.428, 16777216.0}; const uint8_t grpc_stats_table_1[87] = { - 0, 1, 3, 3, 4, 6, 6, 7, 9, 9, 10, 12, 12, 13, 15, 15, 16, 18, - 18, 19, 21, 21, 22, 24, 24, 25, 27, 27, 28, 30, 30, 31, 32, 34, 34, 36, - 36, 37, 39, 39, 40, 42, 42, 43, 44, 46, 46, 47, 49, 49, 51, 51, 52, 53, - 55, 55, 56, 58, 58, 59, 61, 61, 63, 63, 64, 65, 67, 67, 68, 70, 70, 71, - 73, 73, 75, 75, 76, 77, 79, 79, 80, 82, 82, 83, 85, 85, 87}; + 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 12, + 12, 13, 14, 14, 15, 16, 16, 17, 18, 18, 19, 20, 20, 21, 22, 23, 23, 24, + 24, 25, 26, 26, 27, 28, 28, 29, 30, 31, 31, 32, 33, 33, 34, 34, 35, 36, + 37, 37, 38, 39, 39, 40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 47, 47, 48, + 49, 49, 50, 50, 51, 52, 53, 53, 54, 55, 55, 56, 57, 57, 58}; const double grpc_stats_table_2[64] = {0, 1, 2, @@ -166,7 +166,7 @@ const double grpc_stats_table_2[64] = {0, const uint8_t grpc_stats_table_3[52] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52}; + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51}; void grpc_stats_inc_tcp_write_size(grpc_exec_ctx *exec_ctx, double value) { union { double dbl; @@ -178,7 +178,7 @@ void grpc_stats_inc_tcp_write_size(grpc_exec_ctx *exec_ctx, double value) { GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, (int)_val.dbl); } else { - if (_val.uint < 4715268809856909312ull) { + if (_val.uint < 4682617712558473216ull) { GRPC_STATS_INC_HISTOGRAM( (exec_ctx), GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, grpc_stats_table_1[((_val.uint - 4617315517961601024ull) >> 50)] + 4); @@ -201,7 +201,7 @@ void grpc_stats_inc_tcp_write_iov_size(grpc_exec_ctx *exec_ctx, double value) { GRPC_STATS_INC_HISTOGRAM( (exec_ctx), GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, (int)_val.dbl); } else { - if (_val.uint < 4652218415073722368ull) { + if (_val.uint < 4651655465120301056ull) { GRPC_STATS_INC_HISTOGRAM( (exec_ctx), GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, grpc_stats_table_3[((_val.uint - 4622945017495814144ull) >> 49)] + @@ -225,7 +225,7 @@ void grpc_stats_inc_tcp_read_size(grpc_exec_ctx *exec_ctx, double value) { GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, (int)_val.dbl); } else { - if (_val.uint < 4715268809856909312ull) { + if (_val.uint < 4682617712558473216ull) { GRPC_STATS_INC_HISTOGRAM( (exec_ctx), GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, grpc_stats_table_1[((_val.uint - 4617315517961601024ull) >> 50)] + 4); diff --git a/tools/codegen/core/gen_stats_data.py b/tools/codegen/core/gen_stats_data.py index 8ae8f6b8311..36f2ec2c3e2 100755 --- a/tools/codegen/core/gen_stats_data.py +++ b/tools/codegen/core/gen_stats_data.py @@ -72,11 +72,13 @@ def find_ideal_shift(mapped_bounds, max_size): def gen_map_table(mapped_bounds, shift_data): tbl = [] cur = 0 + print mapped_bounds mapped_bounds = [x >> shift_data[0] for x in mapped_bounds] + print mapped_bounds for i in range(0, mapped_bounds[shift_data[1]-1]): while i > mapped_bounds[cur]: cur += 1 - tbl.append(mapped_bounds[cur]) + tbl.append(cur) return tbl static_tables = [] @@ -123,8 +125,8 @@ def gen_bucket_code(histogram): first_nontrivial_code = dbl2u64(first_nontrivial) code_bounds = [dbl2u64(x) - first_nontrivial_code for x in bounds] shift_data = find_ideal_shift(code_bounds[first_nontrivial:], 256 * histogram.buckets) - print first_nontrivial, shift_data, bounds - if shift_data is not None: print [hex(x >> shift_data[0]) for x in code_bounds[first_nontrivial:]] + #print first_nontrivial, shift_data, bounds + #if shift_data is not None: print [hex(x >> shift_data[0]) for x in code_bounds[first_nontrivial:]] code = ' union { double dbl; uint64_t uint; } _val;\n' code += '_val.dbl = value;\n' code += 'if (_val.dbl < 0) _val.dbl = 0;\n'