diff options
author | Pierre Ossman <ossman@cendio.se> | 2015-11-13 14:07:52 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2015-11-27 11:12:57 +0100 |
commit | 7b63a7cef5824cb1d0475855e179d54f631f3e7d (patch) | |
tree | 9ac8150bb665f361e62fe411be8e6e92ed45248b /common/rfb | |
parent | b74728f9d653ece2d25f26aa563f7e5ecbdc4023 (diff) | |
download | tigervnc-7b63a7cef5824cb1d0475855e179d54f631f3e7d.tar.gz tigervnc-7b63a7cef5824cb1d0475855e179d54f631f3e7d.zip |
Create one decode thread for each CPU
We can start creating more decoding threads now that we handle
rect ordering properly. No point in creating more threads than
there are CPUs though.
Diffstat (limited to 'common/rfb')
-rw-r--r-- | common/rfb/DecodeManager.cxx | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/common/rfb/DecodeManager.cxx b/common/rfb/DecodeManager.cxx index ba2b2d2f..724cf215 100644 --- a/common/rfb/DecodeManager.cxx +++ b/common/rfb/DecodeManager.cxx @@ -38,7 +38,7 @@ static LogWriter vlog("DecodeManager"); DecodeManager::DecodeManager(CConnection *conn) : conn(conn) { - int i; + size_t cpuCount; memset(decoders, 0, sizeof(decoders)); @@ -46,9 +46,15 @@ DecodeManager::DecodeManager(CConnection *conn) : producerCond = new os::Condition(queueMutex); consumerCond = new os::Condition(queueMutex); - // Just a single thread for now as we haven't sorted out the - // dependencies between rects - for (i = 0;i < 1;i++) { + cpuCount = os::Thread::getSystemCPUCount(); + if (cpuCount == 0) { + vlog.error("Unable to determine the number of CPU cores on this system"); + cpuCount = 1; + } else { + vlog.info("Detected %d CPU core(s) available for decoding", (int)cpuCount); + } + + while (cpuCount--) { // Twice as many possible entries in the queue as there // are worker threads to make sure they don't stall freeBuffers.push_back(new rdr::MemOutStream()); |