diff --git a/src/libs/utils/mapreduce.h b/src/libs/utils/mapreduce.h index 828b16b31f9c0aab14417d8dee2c07ba2bf251f0..607ff5951aa94ec3b32832f866fba472709f0a09 100644 --- a/src/libs/utils/mapreduce.h +++ b/src/libs/utils/mapreduce.h @@ -369,9 +369,12 @@ template <typename ForwardIterator, typename InitFunction, typename MapFunction, QFuture<ReduceResult> mapReduce(ForwardIterator begin, ForwardIterator end, InitFunction &&init, MapFunction &&map, ReduceFunction &&reduce, CleanUpFunction &&cleanup, - MapReduceOption option = MapReduceOption::Unordered, int size = -1) + MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority, + int size = -1) { - return runAsync(Internal::blockingIteratorMapReduce< + return runAsync(priority, + Internal::blockingIteratorMapReduce< ForwardIterator, typename std::decay<InitFunction>::type, typename std::decay<MapFunction>::type, @@ -438,9 +441,11 @@ template <typename Container, typename InitFunction, typename MapFunction, QFuture<ReduceResult> mapReduce(Container &&container, InitFunction &&init, MapFunction &&map, ReduceFunction &&reduce, CleanUpFunction &&cleanup, - MapReduceOption option = MapReduceOption::Unordered) + MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority) { - return runAsync(Internal::blockingContainerMapReduce< + return runAsync(priority, + Internal::blockingContainerMapReduce< typename std::decay<Container>::type, typename std::decay<InitFunction>::type, typename std::decay<MapFunction>::type, @@ -458,9 +463,11 @@ template <typename Container, typename InitFunction, typename MapFunction, QFuture<ReduceResult> mapReduce(std::reference_wrapper<Container> containerWrapper, InitFunction &&init, MapFunction &&map, ReduceFunction &&reduce, CleanUpFunction &&cleanup, - MapReduceOption option = MapReduceOption::Unordered) + MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority) { - return runAsync(Internal::blockingContainerRefMapReduce< + return runAsync(priority, + Internal::blockingContainerRefMapReduce< Container, typename std::decay<InitFunction>::type, typename std::decay<MapFunction>::type, @@ -478,14 +485,15 @@ template <typename ForwardIterator, typename MapFunction, typename State, typena typename MapResult = typename Internal::resultType<MapFunction>::type> QFuture<StateResult> mapReduce(ForwardIterator begin, ForwardIterator end, MapFunction &&map, State &&initialState, - ReduceFunction &&reduce, MapReduceOption option = MapReduceOption::Unordered, int size = -1) + ReduceFunction &&reduce, MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority, int size = -1) { return mapReduce(begin, end, Internal::StateWrapper<State>(std::forward<State>(initialState)), std::forward<MapFunction>(map), Internal::ReduceWrapper<StateResult, MapResult, ReduceFunction>(std::forward<ReduceFunction>(reduce)), &Internal::cleanupReportingState<StateResult>, - option, size); + option, priority, size); } template <typename Container, typename MapFunction, typename State, typename ReduceFunction, @@ -493,14 +501,15 @@ template <typename Container, typename MapFunction, typename State, typename Red typename MapResult = typename Internal::resultType<MapFunction>::type> QFuture<StateResult> mapReduce(Container &&container, MapFunction &&map, State &&initialState, ReduceFunction &&reduce, - MapReduceOption option = MapReduceOption::Unordered) + MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority) { return mapReduce(std::forward<Container>(container), Internal::StateWrapper<State>(std::forward<State>(initialState)), std::forward<MapFunction>(map), Internal::ReduceWrapper<StateResult, MapResult, ReduceFunction>(std::forward<ReduceFunction>(reduce)), &Internal::cleanupReportingState<StateResult>, - option); + option, priority); } template <typename ForwardIterator, typename MapFunction, typename State, typename ReduceFunction, @@ -509,12 +518,13 @@ template <typename ForwardIterator, typename MapFunction, typename State, typena Q_REQUIRED_RESULT StateResult mappedReduced(ForwardIterator begin, ForwardIterator end, MapFunction &&map, State &&initialState, - ReduceFunction &&reduce, MapReduceOption option = MapReduceOption::Unordered, int size = -1) + ReduceFunction &&reduce, MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority, int size = -1) { return mapReduce(begin, end, std::forward<MapFunction>(map), std::forward<State>(initialState), std::forward<ReduceFunction>(reduce), - option, size).result(); + option, priority, size).result(); } template <typename Container, typename MapFunction, typename State, typename ReduceFunction, @@ -523,38 +533,41 @@ template <typename Container, typename MapFunction, typename State, typename Red Q_REQUIRED_RESULT StateResult mappedReduced(Container &&container, MapFunction &&map, State &&initialState, ReduceFunction &&reduce, - MapReduceOption option = MapReduceOption::Unordered) + MapReduceOption option = MapReduceOption::Unordered, + QThread::Priority priority = QThread::InheritPriority) { return mapReduce(std::forward<Container>(container), std::forward<MapFunction>(map), std::forward<State>(initialState), std::forward<ReduceFunction>(reduce), - option).result(); + option, priority).result(); } template <typename ForwardIterator, typename MapFunction, typename MapResult = typename Internal::resultType<MapFunction>::type> QFuture<MapResult> map(ForwardIterator begin, ForwardIterator end, MapFunction &&map, - MapReduceOption option = MapReduceOption::Ordered, int size = -1) + MapReduceOption option = MapReduceOption::Ordered, + QThread::Priority priority = QThread::InheritPriority, int size = -1) { return mapReduce(begin, end, &Internal::dummyInit<MapResult>, std::forward<MapFunction>(map), Internal::DummyReduce<MapResult>(), &Internal::dummyCleanup<MapResult>, - option, size); + option, priority, size); } template <typename Container, typename MapFunction, typename MapResult = typename Internal::resultType<MapFunction>::type> QFuture<MapResult> -map(Container &&container, MapFunction &&map, MapReduceOption option = MapReduceOption::Ordered) +map(Container &&container, MapFunction &&map, MapReduceOption option = MapReduceOption::Ordered, + QThread::Priority priority = QThread::InheritPriority) { return mapReduce(std::forward<Container>(container), Internal::dummyInit<MapResult>, std::forward<MapFunction>(map), Internal::DummyReduce<MapResult>(), Internal::dummyCleanup<MapResult>, - option); + option, priority); } template <template<typename> class ResultContainer, typename ForwardIterator, typename MapFunction, @@ -562,11 +575,12 @@ template <template<typename> class ResultContainer, typename ForwardIterator, ty Q_REQUIRED_RESULT ResultContainer<MapResult> mapped(ForwardIterator begin, ForwardIterator end, MapFunction &&mapFun, - MapReduceOption option = MapReduceOption::Ordered, int size = -1) + MapReduceOption option = MapReduceOption::Ordered, + QThread::Priority priority = QThread::InheritPriority, int size = -1) { return Utils::transform<ResultContainer>(map(begin, end, std::forward<MapFunction>(mapFun), - option, size).results(), + option, priority, size).results(), [](const MapResult &r) { return r; }); } @@ -574,11 +588,13 @@ template <template<typename> class ResultContainer, typename Container, typename typename MapResult = typename Internal::resultType<MapFunction>::type> Q_REQUIRED_RESULT ResultContainer<MapResult> -mapped(Container &&container, MapFunction &&mapFun, MapReduceOption option = MapReduceOption::Ordered) +mapped(Container &&container, MapFunction &&mapFun, + MapReduceOption option = MapReduceOption::Ordered, + QThread::Priority priority = QThread::InheritPriority) { return Utils::transform<ResultContainer>(map(container, std::forward<MapFunction>(mapFun), - option).results(), + option, priority).results(), [](const MapResult &r) { return r; }); } diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index dadae37de8989562978cef3a6391a57fb4f82d57..fe4c1132f1e68c00983a13015e1bb89b37107eef 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -354,7 +354,8 @@ void TestCodeParser::scanForTests(const QStringList &fileList) [this](QFutureInterface<TestParseResultPtr> &fi, const QString &file) { parseFileForTests(m_testCodeParsers, fi, file); }, - Utils::MapReduceOption::Unordered); + Utils::MapReduceOption::Unordered, + QThread::LowestPriority); m_futureWatcher.setFuture(future); if (list.size() > 5) { Core::ProgressManager::addTask(future, tr("Scanning for Tests"), diff --git a/tests/auto/mapreduce/tst_mapreduce.cpp b/tests/auto/mapreduce/tst_mapreduce.cpp index aaa80de424da31c28a8d26828b0b747d9ca8d6a2..413d87536028f3cd3f32ba9fa98182ed249e1d7e 100644 --- a/tests/auto/mapreduce/tst_mapreduce.cpp +++ b/tests/auto/mapreduce/tst_mapreduce.cpp @@ -214,7 +214,7 @@ void tst_MapReduce::map() QCOMPARE(container, QList<int>({4, 10, 2})); Utils::map(container.begin(), container.end(), [](int &x) { x *= 2; }, - Utils::MapReduceOption::Unordered, 3).waitForFinished(); + Utils::MapReduceOption::Unordered, QThread::InheritPriority, 3).waitForFinished(); QCOMPARE(container, QList<int>({8, 20, 4})); }