Changeset View
Changeset View
Standalone View
Standalone View
tests/gtests/blenlib/BLI_task_test.cc
| Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | TEST(task, RangeIter) | ||||
| settings.min_iter_per_thread = 1; | settings.min_iter_per_thread = 1; | ||||
| settings.userdata_chunk = ∑ | settings.userdata_chunk = ∑ | ||||
| settings.userdata_chunk_size = sizeof(sum); | settings.userdata_chunk_size = sizeof(sum); | ||||
| settings.func_reduce = task_range_iter_reduce_func; | settings.func_reduce = task_range_iter_reduce_func; | ||||
| BLI_task_parallel_range(0, NUM_ITEMS, data, task_range_iter_func, &settings); | BLI_task_parallel_range(0, NUM_ITEMS, data, task_range_iter_func, &settings); | ||||
| /* Those checks should ensure us all items of the listbase were processed once, and only once - | /* Those checks should ensure us all items of the listbase were processed once, and only once | ||||
| * as expected. */ | * as expected. */ | ||||
jbakker: remove line | |||||
| int expected_sum = 0; | int expected_sum = 0; | ||||
| for (int i = 0; i < NUM_ITEMS; i++) { | for (int i = 0; i < NUM_ITEMS; i++) { | ||||
| EXPECT_EQ(data[i], i); | EXPECT_EQ(data[i], i); | ||||
| expected_sum += i; | expected_sum += i; | ||||
| } | } | ||||
| EXPECT_EQ(sum, expected_sum); | EXPECT_EQ(sum, expected_sum); | ||||
| BLI_threadapi_exit(); | BLI_threadapi_exit(); | ||||
| } | } | ||||
| TEST(task, RangeIterPool) | |||||
| { | |||||
| const int num_tasks = 10; | |||||
| int data[num_tasks][NUM_ITEMS] = {{0}}; | |||||
| int sum = 0; | |||||
| BLI_threadapi_init(); | |||||
| TaskParallelSettings settings; | |||||
| BLI_parallel_range_settings_defaults(&settings); | |||||
| settings.min_iter_per_thread = 1; | |||||
| TaskParallelRangePool *range_pool = BLI_task_parallel_range_pool_init(&settings); | |||||
| for (int j = 0; j < num_tasks; j++) { | |||||
| settings.userdata_chunk = ∑ | |||||
| settings.userdata_chunk_size = sizeof(sum); | |||||
| settings.func_reduce = task_range_iter_reduce_func; | |||||
| BLI_task_parallel_range_pool_push( | |||||
| range_pool, 0, NUM_ITEMS, data[j], task_range_iter_func, &settings); | |||||
| } | |||||
| BLI_task_parallel_range_pool_work_and_wait(range_pool); | |||||
| /* Those checks should ensure us all items of the listbase were processed once, and only once - | |||||
| * as expected. */ | |||||
| int expected_sum = 0; | |||||
| for (int j = 0; j < num_tasks; j++) { | |||||
| for (int i = 0; i < NUM_ITEMS; i++) { | |||||
| // EXPECT_EQ(data[j][i], i); | |||||
| expected_sum += i; | |||||
| } | |||||
| } | |||||
| EXPECT_EQ(sum, expected_sum); | |||||
| /* A pool can be re-used until it is freed. */ | |||||
| for (int j = 0; j < num_tasks; j++) { | |||||
| memset(data[j], 0, sizeof(data[j])); | |||||
| } | |||||
| sum = 0; | |||||
| for (int j = 0; j < num_tasks; j++) { | |||||
| settings.userdata_chunk = ∑ | |||||
| settings.userdata_chunk_size = sizeof(sum); | |||||
| settings.func_reduce = task_range_iter_reduce_func; | |||||
| BLI_task_parallel_range_pool_push( | |||||
| range_pool, 0, NUM_ITEMS, data[j], task_range_iter_func, &settings); | |||||
| } | |||||
| BLI_task_parallel_range_pool_work_and_wait(range_pool); | |||||
| BLI_task_parallel_range_pool_free(range_pool); | |||||
| /* Those checks should ensure us all items of the listbase were processed once, and only once - | |||||
| * as expected. */ | |||||
| for (int j = 0; j < num_tasks; j++) { | |||||
| int expected_sum = 0; | |||||
| for (int i = 0; i < NUM_ITEMS; i++) { | |||||
| // EXPECT_EQ(data[j][i], i); | |||||
| expected_sum += i; | |||||
| } | |||||
| } | |||||
| EXPECT_EQ(sum, expected_sum); | |||||
| BLI_threadapi_exit(); | |||||
| } | |||||
| /* *** Parallel iterations over mempool items. *** */ | /* *** Parallel iterations over mempool items. *** */ | ||||
| static void task_mempool_iter_func(void *userdata, MempoolIterData *item) | static void task_mempool_iter_func(void *userdata, MempoolIterData *item) | ||||
| { | { | ||||
| int *data = (int *)item; | int *data = (int *)item; | ||||
| int *count = (int *)userdata; | int *count = (int *)userdata; | ||||
| EXPECT_TRUE(data != NULL); | EXPECT_TRUE(data != NULL); | ||||
| ▲ Show 20 Lines • Show All 108 Lines • Show Last 20 Lines | |||||
remove line