diff --git a/gtk/gtkconstraintsolver.c b/gtk/gtkconstraintsolver.c index da778d2dd9..5383a5b406 100644 --- a/gtk/gtkconstraintsolver.c +++ b/gtk/gtkconstraintsolver.c @@ -1483,6 +1483,8 @@ gtk_constraint_solver_create_variable (GtkConstraintSolver *self, { GtkConstraintVariable *res; + self->var_counter++; + res = gtk_constraint_variable_new (name); gtk_constraint_variable_set_prefix (res, prefix); gtk_constraint_variable_set_value (res, value); @@ -2209,3 +2211,39 @@ gtk_constraint_solver_to_string (GtkConstraintSolver *solver) return g_string_free (buf, FALSE); } + +char * +gtk_constraint_solver_statistics (GtkConstraintSolver *solver) +{ + GString *buf = g_string_new (NULL); + + g_string_append_printf (buf, "Variables: %d\n", solver->var_counter); + g_string_append_printf (buf, "Slack vars: %d\n", solver->slack_counter); + g_string_append_printf (buf, "Artificial vars: %d\n", solver->artificial_counter); + g_string_append_printf (buf, "Dummy vars: %d\n", solver->dummy_counter); + g_string_append_printf (buf, "Stay vars: %d\n", g_hash_table_size (solver->stay_var_map)); + g_string_append_printf (buf, "Optimize count: %d\n", solver->optimize_count); + g_string_append_printf (buf, "Rows: %d\n", g_hash_table_size (solver->rows)); + g_string_append_printf (buf, "Columns: %d\n", g_hash_table_size (solver->columns)); + + if (g_hash_table_size (solver->columns) > 0) + { + GHashTableIter iter; + gpointer val; + double sum = 0; + + g_hash_table_iter_init (&iter, solver->columns); + while (g_hash_table_iter_next (&iter, NULL, &val)) + { + GtkConstraintVariableSet *set = val; + sum += gtk_constraint_variable_set_size (set); + } + g_string_append_printf (buf, "Avg column size: %g\n", sum / g_hash_table_size (solver->columns)); + } + + g_string_append_printf (buf, "Infeasible rows: %d\n", solver->infeasible_rows->len); + g_string_append_printf (buf, "External basic variables: %d\n", g_hash_table_size (solver->external_rows)); + g_string_append_printf (buf, "External parametric variables: %d\n", g_hash_table_size (solver->external_parametric_vars)); + + return g_string_free (buf, FALSE); +} diff --git a/gtk/gtkconstraintsolverprivate.h b/gtk/gtkconstraintsolverprivate.h index 32f3debd51..c383b0f95d 100644 --- a/gtk/gtkconstraintsolverprivate.h +++ b/gtk/gtkconstraintsolverprivate.h @@ -162,4 +162,7 @@ gtk_constraint_solver_clear (GtkConstraintSolver *solver); char * gtk_constraint_solver_to_string (GtkConstraintSolver *solver); +char * +gtk_constraint_solver_statistics (GtkConstraintSolver *solver); + G_END_DECLS