public void LogFinishedSplit(string workerId, long totalSplits, long remainingSplits) { lock (LockLogFinished) { long splitId = remainingSplits; SplitInfo splitInfo = splitInfos[splitId]; if (splitInfo.DidFinished()) { //Logger.LogInfo("[" + workerId + " SLOW FINISHED " + splitId + "]"); return; } splitInfos[splitId].EndedSplit(); averageSplitTime = splitInfos[splitId].SplitTime() + 500; numSplits--; Logger.LogInfo("[" + workerId + " ENDED " + splitId + "] in " + splitInfos[splitId].SplitTime() + " ms. " + numSplits + " splits remaining"); } }
public SplitInfo FindSlowSplit() { foreach (KeyValuePair <string, long> keyValue in workersSplits) { string key = keyValue.Key; SplitInfo splitInfo = splitInfos[keyValue.Value]; if (averageSplitTime < long.MaxValue) { long waitTime = splitInfo.splitId == 0 ? 3 * averageSplitTime : 2 * averageSplitTime; if (!splitInfo.DidFinished() && splitInfo.SplitTime() > waitTime) { Logger.LogWarn("[SPLIT " + splitInfo.splitId + " SLOW] taking " + splitInfo.SplitTime() + " vs " + waitTime); return(splitInfo); } } } return(null); }