Switch ringbuffer lists for deques. 6% performance boost (4.5% vs baseline)

master
Bryan Mayland 2013-06-28 10:38:58 -04:00
parent 9dd754fdae
commit 905923cc4c
2 changed files with 15 additions and 22 deletions

View File

@ -29,6 +29,8 @@ def getConnectionOptions():
class Printer():
def __init__(self, gcodeManager):
from collections import deque
self._gcodeManager = gcodeManager
# state
@ -37,19 +39,19 @@ class Printer():
self._targetTemp = None
self._targetBedTemp = None
self._temps = {
"actual": [],
"target": [],
"actualBed": [],
"targetBed": []
"actual": deque([], 300),
"target": deque([], 300),
"actualBed": deque([], 300),
"targetBed": deque([], 300)
}
self._tempBacklog = []
self._latestMessage = None
self._messages = []
self._messages = deque([], 300)
self._messageBacklog = []
self._latestLog = None
self._log = []
self._log = deque([], 300)
self._logBacklog = []
self._state = None
@ -233,12 +235,10 @@ class Printer():
def _addLog(self, log):
self._log.append(log)
self._log = self._log[-300:]
self._stateMonitor.addLog(log)
def _addMessage(self, message):
self._messages.append(message)
self._messages = self._messages[-300:]
self._stateMonitor.addMessage(message)
def _setProgressData(self, progress, filepos, printTime, printTimeLeft):
@ -264,16 +264,9 @@ class Printer():
currentTimeUtc = int(time.time() * 1000)
self._temps["actual"].append((currentTimeUtc, temp))
self._temps["actual"] = self._temps["actual"][-300:]
self._temps["target"].append((currentTimeUtc, targetTemp))
self._temps["target"] = self._temps["target"][-300:]
self._temps["actualBed"].append((currentTimeUtc, bedTemp))
self._temps["actualBed"] = self._temps["actualBed"][-300:]
self._temps["targetBed"].append((currentTimeUtc, bedTargetTemp))
self._temps["targetBed"] = self._temps["targetBed"][-300:]
self._temp = temp
self._bedTemp = bedTemp
@ -315,9 +308,9 @@ class Printer():
try:
data = self._stateMonitor.getCurrentData()
data.update({
"temperatureHistory": self._temps,
"logHistory": self._log,
"messageHistory": self._messages
"temperatureHistory": list(self._temps),
"logHistory": list(self._log),
"messageHistory": list(self._messages)
})
callback.sendHistoryData(data)
except Exception, err:

View File

@ -366,6 +366,8 @@ class MachineCom(object):
STATE_TRANSFERING_FILE = 11
def __init__(self, port = None, baudrate = None, callbackObject = None):
from collections import deque
self._logger = logging.getLogger(__name__)
self._serialLogger = logging.getLogger("SERIAL")
@ -400,7 +402,7 @@ class MachineCom(object):
self._alwaysSendChecksum = settings().getBoolean(["feature", "alwaysSendChecksum"])
self._currentLine = 0
self._resendDelta = None
self._lastLines = []
self._lastLines = deque([], 50)
self._sendNextLock = threading.Lock()
self._sendingLock = threading.Lock()
@ -971,15 +973,13 @@ class MachineCom(object):
self._currentLine = newLineNumber + 1
# after a reset of the line number we have no way to determine what line exactly the printer now wants
self._lastLines = []
self._lastLines.clear()
self._resendDelta = None
return
self._doSend(cmd, sendChecksum)
def _addToLastLines(self, cmd):
self._lastLines.append(cmd)
if len(self._lastLines) > 50:
self._lastLines = self._lastLines[-50:] # only keep the last 50 lines in memory
self._logger.debug("Got %d lines of history in memory" % len(self._lastLines))
def _doSend(self, cmd, sendChecksum=False):