Commit 4cf53dae8b1a025536e43bd2db9b877203a9be61

Authored by Josh Klontz
1 parent 141d804a

threading tweaks based on improved understanding

app/br/br.cpp
@@ -231,7 +231,6 @@ int main(int argc, char *argv[]) @@ -231,7 +231,6 @@ int main(int argc, char *argv[])
231 br_initialize(argc, argv); 231 br_initialize(argc, argv);
232 232
233 FakeMain *fakeMain = new FakeMain(argc, argv); 233 FakeMain *fakeMain = new FakeMain(argc, argv);
234 - QThreadPool::globalInstance()->releaseThread();  
235 QThreadPool::globalInstance()->start(fakeMain); 234 QThreadPool::globalInstance()->start(fakeMain);
236 QCoreApplication::exec(); 235 QCoreApplication::exec();
237 236
openbr/openbr_plugin.cpp
@@ -876,6 +876,9 @@ void br::Context::initialize(int &argc, char *argv[], QString sdkPath) @@ -876,6 +876,9 @@ void br::Context::initialize(int &argc, char *argv[], QString sdkPath)
876 } 876 }
877 Globals->sdkPath = sdkPath; 877 Globals->sdkPath = sdkPath;
878 878
  879 + // Empirical evidence suggests an extra thread helps achieve full CPU utilization
  880 + QThreadPool::globalInstance()->releaseThread();
  881 +
879 // Trigger registered initializers 882 // Trigger registered initializers
880 QList< QSharedPointer<Initializer> > initializers = Factory<Initializer>::makeAll(); 883 QList< QSharedPointer<Initializer> > initializers = Factory<Initializer>::makeAll();
881 foreach (const QSharedPointer<Initializer> &initializer, initializers) 884 foreach (const QSharedPointer<Initializer> &initializer, initializers)
@@ -884,6 +887,9 @@ void br::Context::initialize(int &amp;argc, char *argv[], QString sdkPath) @@ -884,6 +887,9 @@ void br::Context::initialize(int &amp;argc, char *argv[], QString sdkPath)
884 887
885 void br::Context::finalize() 888 void br::Context::finalize()
886 { 889 {
  890 + // Undo the 'releaseThread()' in 'initialize()'
  891 + QThreadPool::globalInstance()->reserveThread();
  892 +
887 // Trigger registered finalizers 893 // Trigger registered finalizers
888 QList< QSharedPointer<Initializer> > initializers = Factory<Initializer>::makeAll(); 894 QList< QSharedPointer<Initializer> > initializers = Factory<Initializer>::makeAll();
889 foreach (const QSharedPointer<Initializer> &initializer, initializers) 895 foreach (const QSharedPointer<Initializer> &initializer, initializers)
@@ -1295,10 +1301,7 @@ void Transform::project(const TemplateList &amp;src, TemplateList &amp;dst) const @@ -1295,10 +1301,7 @@ void Transform::project(const TemplateList &amp;src, TemplateList &amp;dst) const
1295 1301
1296 // There are certain conditions where we should process the templates in serial, 1302 // There are certain conditions where we should process the templates in serial,
1297 // but generally we'd prefer to process them in parallel. 1303 // but generally we'd prefer to process them in parallel.
1298 - if ((src.size() < 2) ||  
1299 - (QThreadPool::globalInstance()->activeThreadCount() >= QThreadPool::globalInstance()->maxThreadCount()) ||  
1300 - (Globals->parallelism == 0)) {  
1301 - 1304 + if ((src.size() < 2) || (Globals->parallelism == 0)) {
1302 foreach (const Template &t, src) { 1305 foreach (const Template &t, src) {
1303 dst.append(Template()); 1306 dst.append(Template());
1304 _project(this, &t, &dst.last()); 1307 _project(this, &t, &dst.last());