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

View File

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