Index: src/heap/page-parallel-job.h |
diff --git a/src/heap/page-parallel-job.h b/src/heap/page-parallel-job.h |
index 28a7fe8566836e839c58c171bec76b53726f4353..1b1b60c4fc99b008a64b152ebaaf1a968c20ee26 100644 |
--- a/src/heap/page-parallel-job.h |
+++ b/src/heap/page-parallel-job.h |
@@ -57,7 +57,10 @@ class PageParallelJob { |
int NumberOfPages() { return num_items_; } |
- // Runs the given number of tasks in parallel and processes the previosly |
+ // Returns the number of tasks that were spawned when running the job. |
+ int NumberOfTasks() { return num_tasks_; } |
+ |
+ // Runs the given number of tasks in parallel and processes the previously |
// added pages. This function blocks until all tasks finish. |
// The callback takes the index of a task and returns data for that task. |
template <typename Callback> |
@@ -69,11 +72,11 @@ class PageParallelJob { |
kMaxNumberOfTasks, |
static_cast<int>( |
V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads())); |
- num_tasks = Max(1, Min(num_tasks, max_num_tasks)); |
- int items_per_task = (num_items_ + num_tasks - 1) / num_tasks; |
+ num_tasks_ = Max(1, Min(num_tasks, max_num_tasks)); |
+ int items_per_task = (num_items_ + num_tasks_ - 1) / num_tasks_; |
int start_index = 0; |
Task* main_task = nullptr; |
- for (int i = 0; i < num_tasks; i++, start_index += items_per_task) { |
+ for (int i = 0; i < num_tasks_; i++, start_index += items_per_task) { |
if (start_index >= num_items_) { |
start_index -= num_items_; |
} |
@@ -91,7 +94,7 @@ class PageParallelJob { |
main_task->Run(); |
delete main_task; |
// Wait for background tasks. |
- for (int i = 0; i < num_tasks; i++) { |
+ for (int i = 0; i < num_tasks_; i++) { |
if (!cancelable_task_manager_->TryAbort(task_ids[i])) { |
pending_tasks_.Wait(); |
} |
@@ -172,6 +175,7 @@ class PageParallelJob { |
CancelableTaskManager* cancelable_task_manager_; |
Item* items_; |
int num_items_; |
+ int num_tasks_; |
base::Semaphore pending_tasks_; |
DISALLOW_COPY_AND_ASSIGN(PageParallelJob); |
}; |