diff options
author | Leandro Pereira <leandro@hardinfo.org> | 2016-07-31 23:01:43 -0300 |
---|---|---|
committer | Leandro Pereira <leandro@hardinfo.org> | 2016-07-31 23:01:43 -0300 |
commit | a7b777a4363909d9a284a87da7f9f135a88c1d9d (patch) | |
tree | 5e17e963b0f279a793c2aad15709d287faecfa8e /shell | |
parent | 821329d5d0ca126f8e22caa4591648f1f74e548a (diff) |
Fix percentage display in benchmarks
Diffstat (limited to 'shell')
-rw-r--r-- | shell/shell.c | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/shell/shell.c b/shell/shell.c index 87abc5c8..98e5d185 100644 --- a/shell/shell.c +++ b/shell/shell.c @@ -879,10 +879,10 @@ info_tree_compare_val_func(GtkTreeModel * model, ret = -1; else if (!col2) ret = 1; - else if (shell->_order_type) - ret = compare_float(atof(col1), atof(col2)); - else + else if (shell->_order_type == SHELL_ORDER_ASCENDING) ret = compare_float(atof(col2), atof(col1)); + else + ret = compare_float(atof(col1), atof(col2)); g_free(col1); g_free(col2); @@ -1195,22 +1195,22 @@ static void update_progress() GtkTreeStore *store = GTK_TREE_STORE(model); GtkTreeIter iter, fiter; gchar *tmp; - gdouble maxv = 0, maxp = 0, cur, floatval; + gdouble maxv = 0, maxp = 0, minp = 100.0, cur, floatval; + + if (!gtk_tree_model_get_iter_first(model, &fiter)) + return; - if (!gtk_tree_model_get_iter_first(model, &fiter)) { - return; - } - /* finds the maximum value */ if (shell->normalize_percentage) { iter = fiter; do { - gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1); - - cur = atof(tmp); - maxv = MAX(maxv, cur); - - g_free(tmp); + gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1); + + cur = atof(tmp); + if (cur > maxv) + maxv = cur; + + g_free(tmp); } while (gtk_tree_model_iter_next(model, &iter)); } else { maxv = 100.0f; @@ -1222,41 +1222,40 @@ static void update_progress() do { gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1); - cur = 100 - 100 * atof(tmp) / maxv; - maxp = MAX(cur, maxp); + cur = ceil((100.0 * atof(tmp)) / maxv); + if (minp > cur) + minp = cur; g_free(tmp); } while (gtk_tree_model_iter_next(model, &iter)); - - maxp = 100 - maxp; } /* fix the maximum relative percentage */ iter = fiter; do { - char *strval; - + char *space; + char formatted[128]; + gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1); floatval = atof(tmp); - strval = g_strdup(tmp); - g_free(tmp); - - cur = 100 * floatval / maxv; + space = strchr(tmp, ' '); - if (shell->_order_type == SHELL_ORDER_ASCENDING) - cur = 100 - cur + maxp; - - if (strchr(strval, ' ')) { - tmp = g_strdup_printf("%.2f%s", floatval, strchr(strval, ' ')); - } else { - tmp = g_strdup_printf("%.2f", floatval); - } + cur = ceil((100.0 * floatval) / maxv); + + if (shell->_order_type == SHELL_ORDER_ASCENDING) + cur = ceil(100.0 - cur + minp); + + if (space) { + snprintf(formatted, sizeof(formatted), "%.2f%s", floatval, space); + } else { + snprintf(formatted, sizeof(formatted), "%.2f", floatval); + } - tmp = strreplacechr(tmp, ",", '.'); gtk_tree_store_set(store, &iter, INFO_TREE_COL_PROGRESS, cur, - INFO_TREE_COL_VALUE, tmp, -1); - g_free(tmp); - g_free(strval); + INFO_TREE_COL_VALUE, strreplacechr(formatted, ",", '.'), + -1); + + g_free(tmp); } while (gtk_tree_model_iter_next(model, &iter)); /* now sort everything up. that wasn't as hard as i thought :) */ @@ -1264,8 +1263,7 @@ static void update_progress() gtk_tree_sortable_set_sort_func(sortable, INFO_TREE_COL_VALUE, info_tree_compare_val_func, 0, NULL); - gtk_tree_sortable_set_sort_column_id(sortable, - INFO_TREE_COL_VALUE, + gtk_tree_sortable_set_sort_column_id(sortable, INFO_TREE_COL_VALUE, GTK_SORT_DESCENDING); gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), GTK_TREE_MODEL(sortable)); |