|
|
@@ -43,7 +43,6 @@ public class DecodeManager { |
|
|
|
producerCond = queueMutex.newCondition(); |
|
|
|
consumerCond = queueMutex.newCondition(); |
|
|
|
|
|
|
|
//cpuCount = 1; |
|
|
|
cpuCount = Runtime.getRuntime().availableProcessors(); |
|
|
|
if (cpuCount == 0) { |
|
|
|
vlog.error("Unable to determine the number of CPU cores on this system"); |
|
|
@@ -151,12 +150,12 @@ public class DecodeManager { |
|
|
|
bufferStream.length(), conn.cp, |
|
|
|
entry.affectedRegion); |
|
|
|
|
|
|
|
queueMutex.lock(); |
|
|
|
|
|
|
|
// The workers add buffers to the end so it's safe to assume |
|
|
|
// the front is still the same buffer |
|
|
|
freeBuffers.removeFirst(); |
|
|
|
|
|
|
|
queueMutex.lock(); |
|
|
|
|
|
|
|
workQueue.addLast(entry); |
|
|
|
|
|
|
|
// We only put a single entry on the queue so waking a single |
|
|
@@ -249,6 +248,7 @@ public class DecodeManager { |
|
|
|
public void run() |
|
|
|
{ |
|
|
|
manager.queueMutex.lock(); |
|
|
|
|
|
|
|
while (!stopRequested) { |
|
|
|
QueueEntry entry; |
|
|
|
|
|
|
@@ -257,7 +257,7 @@ public class DecodeManager { |
|
|
|
if (entry == null) { |
|
|
|
// Wait and try again |
|
|
|
try { |
|
|
|
manager.consumerCond.await(); |
|
|
|
manager.consumerCond.await(); |
|
|
|
} catch (InterruptedException e) { } |
|
|
|
continue; |
|
|
|
} |
|
|
@@ -281,7 +281,7 @@ public class DecodeManager { |
|
|
|
manager.queueMutex.lock(); |
|
|
|
|
|
|
|
// Remove the entry from the queue and give back the memory buffer |
|
|
|
manager.freeBuffers.add(entry.bufferStream); |
|
|
|
manager.freeBuffers.addLast(entry.bufferStream); |
|
|
|
manager.workQueue.remove(entry); |
|
|
|
entry = null; |
|
|
|
|
|
|
@@ -307,7 +307,7 @@ public class DecodeManager { |
|
|
|
if (!manager.workQueue.peek().active) |
|
|
|
return manager.workQueue.peek(); |
|
|
|
|
|
|
|
for (iter = manager.workQueue.iterator(); iter.hasNext();) { |
|
|
|
next:for (iter = manager.workQueue.iterator(); iter.hasNext();) { |
|
|
|
QueueEntry entry; |
|
|
|
|
|
|
|
Iterator<QueueEntry> iter2; |
|
|
@@ -317,7 +317,7 @@ public class DecodeManager { |
|
|
|
// Another thread working on this? |
|
|
|
if (entry.active) { |
|
|
|
lockedRegion.assign_union(entry.affectedRegion); |
|
|
|
continue; |
|
|
|
continue next; |
|
|
|
} |
|
|
|
|
|
|
|
// If this is an ordered decoder then make sure this is the first |
|
|
@@ -326,7 +326,7 @@ public class DecodeManager { |
|
|
|
for (iter2 = manager.workQueue.iterator(); iter2.hasNext() && iter2 != iter;) { |
|
|
|
if (entry.encoding == (iter2.next()).encoding) { |
|
|
|
lockedRegion.assign_union(entry.affectedRegion); |
|
|
|
continue; |
|
|
|
continue next; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -346,14 +346,14 @@ public class DecodeManager { |
|
|
|
entry2.bufferStream.length(), |
|
|
|
entry.cp)) |
|
|
|
lockedRegion.assign_union(entry.affectedRegion); |
|
|
|
continue; |
|
|
|
continue next; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Check overlap with earlier rectangles |
|
|
|
if (!lockedRegion.intersect(entry.affectedRegion).is_empty()) { |
|
|
|
lockedRegion.assign_union(entry.affectedRegion); |
|
|
|
continue; |
|
|
|
continue next; |
|
|
|
} |
|
|
|
|
|
|
|
return entry; |