From 137b596943a9a1ef853da7a3ba444adee48e2d68 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 15 Nov 2016 11:01:41 +0000 Subject: [PATCH] Enabled sharing of main threads processor affinity to the next required thread for CullDrawThreadPerCamera and CullThreadPerCameraDrawThreadPerContext --- src/osgViewer/ViewerBase.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/osgViewer/ViewerBase.cpp b/src/osgViewer/ViewerBase.cpp index 510ab3adb..508889188 100644 --- a/src/osgViewer/ViewerBase.cpp +++ b/src/osgViewer/ViewerBase.cpp @@ -113,6 +113,13 @@ void ViewerBase::configureAffinity() bool requiresCameraThreads = false; bool requiresDrawThreads = false; + unsigned int availableProcessor = 0; + + // set affinity for first processor + _affinity = OpenThreads::Affinity(availableProcessors[availableProcessor]); + + // all threading models except DrawThreadPerContext can share the first cull or culldraw threads with thread with the main thread, + // so only increment the availableProcessor for DrawThreadPerContext to prevent draw threads sitting on the same thread as main thread that does cull switch(_threadingModel) { case(CullDrawThreadPerContext): @@ -121,6 +128,7 @@ void ViewerBase::configureAffinity() case(DrawThreadPerContext): requiresDrawThreads = true; + ++availableProcessor; break; case(CullThreadPerCameraDrawThreadPerContext): @@ -133,9 +141,7 @@ void ViewerBase::configureAffinity() }; - unsigned int availableProcessor = 0; - _affinity = OpenThreads::Affinity(availableProcessors[availableProcessor++]); if (requiresCameraThreads) {