23 #include "../lib/grn-assertions.h"
36 static GList *sub_processes;
43 static gchar *base_dir;
44 static gchar *env_table_path;
45 static gchar *env_table_type;
46 static gchar *env_multi_thread;
47 static gchar *env_n_processes;
48 static gchar *env_process_number;
52 gint n_processes, gboolean multi_thread)
84 #define SAVE_ENV_VALUE(var_name, macro_name) \
85 env_ ## var_name = g_strdup(g_getenv(GRN_TEST_ENV_ ## macro_name))
96 cut_remove_path(tmp_dir, NULL);
98 base_dir = g_build_filename(tmp_dir,
"performance", NULL);
100 g_mkdir_with_parents(base_dir, 0755);
101 cut_assert_path_exist(base_dir);
108 g_list_free(sub_processes);
111 test_data_free(base_data);
122 #define RESTORE_ENV_VALUE(var_name, macro_name) do \
124 if (env_ ## var_name) { \
125 g_setenv(GRN_TEST_ENV_ ## macro_name, env_ ## var_name, TRUE); \
126 g_free(env_ ## var_name); \
128 g_unsetenv(GRN_TEST_ENV_ ## macro_name); \
138 #undef RESTORE_ENV_VALUE
141 cut_remove_path(base_dir, NULL);
147 run(
const gchar **test_case_names,
const grn_test_data *data)
150 const gchar *test_dir;
151 CutSubProcessGroup *group;
157 group = cut_take_new_sub_process_group();
159 CutSubProcess *sub_process;
161 sub_process = cut_take_new_sub_process(test_dir);
162 cut_sub_process_set_multi_thread(sub_process, data->
multi_thread);
163 cut_sub_process_set_fatal_failures(sub_process,
TRUE);
164 cut_sub_process_set_target_test_case_names(sub_process, test_case_names);
166 cut_sub_process_group_add(group, sub_process);
174 cut_sub_process_run_async(sub_process);
176 sub_processes = g_list_append(sub_processes, sub_process);
178 return cut_sub_process_group_wait(group);
182 run_test(
const gchar **test_case_names,
const grn_test_data *data)
184 const gchar *type_name, *table_name;
195 path = g_build_filename(base_dir,
"table", NULL);
198 table_name = cut_take_printf(
"%s: performance-read-write", data->
type_name);
201 table_name, strlen(table_name),
205 cut_assert_not_null(table);
207 return run(test_case_names, data);
212 add_read_write_data(
const gchar *type_name,
grn_obj_flags flags)
214 cut_add_data(cut_take_printf(
"%s - single process - single thread", type_name),
215 test_data_new(type_name, flags, 1,
FALSE), test_data_free,
217 cut_take_printf(
"%s - single process - multi thread", type_name),
218 test_data_new(type_name, flags, 1,
TRUE), test_data_free,
220 cut_take_printf(
"%s - multi process - single thread", type_name),
221 test_data_new(type_name, flags, 10,
FALSE), test_data_free,
223 cut_take_printf(
"%s - multi process - multi thread", type_name),
224 test_data_new(type_name, flags, 10,
TRUE), test_data_free);
238 const gchar *test_case_names[] = {
"test_read_write", NULL};
239 CutSubProcess *target_sub_process;
240 CutSubProcess *base_sub_process;
241 gdouble target_elapsed, base_elapsed;
243 cut_assert_true(run_test(test_case_names, data));
244 target_sub_process = g_list_last(sub_processes)->data;
246 base_data = test_data_new(cut_take_printf(
"%s - base", data->
type_name),
248 cut_assert_true(run_test(test_case_names, base_data));
249 base_sub_process = g_list_last(sub_processes)->data;
251 target_elapsed = cut_sub_process_get_total_elapsed(target_sub_process);
252 base_elapsed = cut_sub_process_get_total_elapsed(base_sub_process);
255 cut_assert_operator(target_elapsed / (data->
multi_thread ? 100 : 1),