Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstestutils.cpp 3 : : -------------------- 4 : : begin : January 2018 5 : : copyright : (C) 2018 by Nyall Dawson 6 : : email : nyall.dawson@gmail.com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgstestutils.h" 17 : : #include "qgsvectordataprovider.h" 18 : : #include "qgsconnectionpool.h" 19 : : #include <QtConcurrentMap> 20 : : ///@cond PRIVATE 21 : : /// 22 : : 23 : 0 : static void getFeaturesForProvider( const QPair< QgsVectorDataProvider *, QgsFeatureRequest > &pair ) 24 : : { 25 : 0 : QgsFeatureIterator it = pair.first->getFeatures( pair.second ); 26 : 0 : QgsFeature f; 27 : 0 : while ( it.nextFeature( f ) ) 28 : : { 29 : : 30 : : } 31 : 0 : } 32 : : 33 : 0 : bool QgsTestUtils::testProviderIteratorThreadSafety( QgsVectorDataProvider *provider, const QgsFeatureRequest &request ) 34 : : { 35 : 0 : constexpr int JOBS_TO_RUN = 100; 36 : 0 : QList< QPair< QgsVectorDataProvider *, QgsFeatureRequest > > jobs; 37 : 0 : jobs.reserve( JOBS_TO_RUN ); 38 : 0 : for ( int i = 0; i < JOBS_TO_RUN; ++i ) 39 : : { 40 : 0 : jobs.append( qMakePair( provider, request ) ); 41 : 0 : } 42 : : 43 : : //freaking hammer the provider with a ton of concurrent requests. 44 : : //thread unsafe providers... you better be ready!!!! 45 : 0 : QtConcurrent::blockingMap( jobs, getFeaturesForProvider ); 46 : : 47 : : return true; 48 : 0 : } 49 : : 50 : : 51 : : ///@endcond