diff --git a/klippy/klippy.py b/klippy/klippy.py index a352663f..685d4d61 100644 --- a/klippy/klippy.py +++ b/klippy/klippy.py @@ -136,18 +136,21 @@ class Printer: def set_fileoutput(self, debugoutput, dictionary): self.debugoutput = debugoutput self.dictionary = dictionary - def stats(self, eventtime): + def stats(self, eventtime, force_output=False): if self.need_dump_debug: # Call dump_debug here so it is executed in the main thread self.gcode.dump_debug() self.need_dump_debug = False + toolhead = self.objects.get('toolhead') + if toolhead is None or self.mcu is None: + return + is_active, thstats = toolhead.stats(eventtime) + if not is_active and not force_output: + return out = [] out.append(self.gcode.stats(eventtime)) - toolhead = self.objects.get('toolhead') - if toolhead is not None: - out.append(toolhead.stats(eventtime)) - if self.mcu is not None: - out.append(self.mcu.stats(eventtime)) + out.append(thstats) + out.append(self.mcu.stats(eventtime)) logging.info("Stats %.1f: %s" % (eventtime, ' '.join(out))) return eventtime + 1. def load_config(self): @@ -238,14 +241,14 @@ class Printer: def disconnect(self): try: if self.mcu is not None: - self.stats(self.reactor.monotonic()) + self.stats(self.reactor.monotonic(), force_output=True) self.mcu.disconnect() except: logging.exception("Unhandled exception during disconnect") def firmware_restart(self): try: if self.mcu is not None: - self.stats(self.reactor.monotonic()) + self.stats(self.reactor.monotonic(), force_output=True) self.mcu.microcontroller_restart() self.mcu.disconnect() except: diff --git a/klippy/toolhead.py b/klippy/toolhead.py index bd4ccd10..4329a712 100644 --- a/klippy/toolhead.py +++ b/klippy/toolhead.py @@ -207,6 +207,7 @@ class ToolHead: self.move_flush_time = config.getfloat( 'move_flush_time', 0.050, above=0.) self.print_time = 0. + self.last_print_end_time = self.reactor.monotonic() self.need_check_stall = -1. self.print_stall = 0 self.synch_print_time = True @@ -258,6 +259,7 @@ class ToolHead: def reset_print_time(self): self._flush_lookahead(must_synch=True) self.print_time = 0. + self.last_print_end_time = self.reactor.monotonic() self.need_check_stall = -1. self.forced_synch = False self._reset_motor_off() @@ -366,11 +368,12 @@ class ToolHead: buffer_time = 0. print_time = self.print_time if print_time: - buffer_time = self.printer.mcu.get_print_buffer_time( - eventtime, print_time) - if buffer_time < 0.: - buffer_time = 0. - return "print_time=%.3f buffer_time=%.3f print_stall=%d" % ( + is_active = True + buffer_time = max(0., self.printer.mcu.get_print_buffer_time( + eventtime, print_time)) + else: + is_active = eventtime < self.last_print_end_time + 60. + return is_active, "print_time=%.3f buffer_time=%.3f print_stall=%d" % ( print_time, buffer_time, self.print_stall) def force_shutdown(self): try: