1313#include " Plugins/SymbolFile/DWARF/LogChannelDWARF.h"
1414#include " Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h"
1515#include " lldb/Core/Module.h"
16- #include " lldb/Host/TaskPool.h"
1716#include " lldb/Symbol/ObjectFile.h"
1817#include " lldb/Utility/Stream.h"
1918#include " lldb/Utility/Timer.h"
19+ #include " llvm/Support/ThreadPool.h"
2020
2121using namespace lldb_private ;
2222using namespace lldb ;
@@ -71,20 +71,27 @@ void ManualDWARFIndex::Index() {
7171 clear_cu_dies[cu_idx] = units_to_index[cu_idx]->ExtractDIEsScoped ();
7272 };
7373
74+ // Share one thread pool across operations to avoid the overhead of
75+ // recreating the threads.
76+ llvm::ThreadPool pool;
77+
7478 // Create a task runner that extracts dies for each DWARF unit in a
75- // separate thread
79+ // separate thread.
7680 // First figure out which units didn't have their DIEs already
7781 // parsed and remember this. If no DIEs were parsed prior to this index
7882 // function call, we are going to want to clear the CU dies after we are
7983 // done indexing to make sure we don't pull in all DWARF dies, but we need
8084 // to wait until all units have been indexed in case a DIE in one
8185 // unit refers to another and the indexes accesses those DIEs.
82- TaskMapOverInt (0 , units_to_index.size (), extract_fn);
86+ for (size_t i = 0 ; i < units_to_index.size (); ++i)
87+ pool.async (extract_fn, i);
88+ pool.wait ();
8389
8490 // Now create a task runner that can index each DWARF unit in a
8591 // separate thread so we can index quickly.
86-
87- TaskMapOverInt (0 , units_to_index.size (), parser_fn);
92+ for (size_t i = 0 ; i < units_to_index.size (); ++i)
93+ pool.async (parser_fn, i);
94+ pool.wait ();
8895
8996 auto finalize_fn = [this , &sets](NameToDIE (IndexSet::*index)) {
9097 NameToDIE &result = m_set.*index;
@@ -93,14 +100,15 @@ void ManualDWARFIndex::Index() {
93100 result.Finalize ();
94101 };
95102
96- TaskPool::RunTasks ([&]() { finalize_fn (&IndexSet::function_basenames); },
97- [&]() { finalize_fn (&IndexSet::function_fullnames); },
98- [&]() { finalize_fn (&IndexSet::function_methods); },
99- [&]() { finalize_fn (&IndexSet::function_selectors); },
100- [&]() { finalize_fn (&IndexSet::objc_class_selectors); },
101- [&]() { finalize_fn (&IndexSet::globals); },
102- [&]() { finalize_fn (&IndexSet::types); },
103- [&]() { finalize_fn (&IndexSet::namespaces); });
103+ pool.async (finalize_fn, &IndexSet::function_basenames);
104+ pool.async (finalize_fn, &IndexSet::function_fullnames);
105+ pool.async (finalize_fn, &IndexSet::function_methods);
106+ pool.async (finalize_fn, &IndexSet::function_selectors);
107+ pool.async (finalize_fn, &IndexSet::objc_class_selectors);
108+ pool.async (finalize_fn, &IndexSet::globals);
109+ pool.async (finalize_fn, &IndexSet::types);
110+ pool.async (finalize_fn, &IndexSet::namespaces);
111+ pool.wait ();
104112}
105113
106114void ManualDWARFIndex::IndexUnit (DWARFUnit &unit, SymbolFileDWARFDwo *dwp,
0 commit comments