Switch ringbuffer lists for deques. 6% performance boost (4.5% vs baseline)
parent
9dd754fdae
commit
905923cc4c
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue