LogFlasher: large bursts of log messages being truncated?
Posted: Sat Jan 21, 2017 8:56 pm
This isn't technically a bug, since neither the Minimalist nor Classic UI use the engine's built-in log flasher, but it appears in the example module and T2 uses it, and there's something odd in it that I think must be wrong. Here's the code for the LogFlasher:toScreen() method:
Now, if I'm reading this right, because of self.changed being cleared in line (1), the elseif branch at line (2) can never be followed. What's happening here is that the log flasher accumulates log messages side by side and line-wraps them into as many screen-width lines as needed, presumably to display them one line at a time, and that call to self:getNext() in line (2) is where the next line is supposed to be gotten to be displayed (hence the name…); with that line (1) thing, though, it looks like the next line of messages never gets pulled, so only one screen width's worth of log messages ever gets shown, which tracks with my testing. Which in turn means that if a lot of log messages are displayed at once before the log flasher is reset, the ones at the end will be lost.
The question is, what's the intended behavior here? My initial assumption (which I'm going to be implementing in the next T2 module release) is that the flasher is supposed to continue to the next line when the first line is done "flashing" — i.e. when self.flashing counts down to zero. Now, self.flashing is set to 20 when a new log message is added, so at 30fps, that works out to ⅔ second for each line of messages; too fast? too slow?
Code: Select all
function _M:toScreen(nb_keyframe)
nb_keyframe = nb_keyframe or 1
--(1)> self.changed = false
-- Erase and the display the map
if self.flashing_style == BAD then
core.display.drawQuad(self.display_x, self.display_y, self.w, self.h, self.bgcolor[1] + self.flashing * 10, self.bgcolor[2], self.bgcolor[3], 255)
elseif self.flashing_style == NEUTRAL then
core.display.drawQuad(self.display_x, self.display_y, self.w, self.h, self.bgcolor[1], self.bgcolor[2], self.bgcolor[3] + self.flashing * 10, 255)
else
core.display.drawQuad(self.display_x, self.display_y, self.w, self.h, self.bgcolor[1], self.bgcolor[2] + self.flashing * 10, self.bgcolor[3], 255)
end
self.texture:toScreenFull(self.display_x, self.display_y, self.w, self.h, self.texture_w, self.texture_h)
if self.flashing > 0 then self.flashing = self.flashing - nb_keyframe
--(2)> elseif self.changed then self:getNext(true) end
end
The question is, what's the intended behavior here? My initial assumption (which I'm going to be implementing in the next T2 module release) is that the flasher is supposed to continue to the next line when the first line is done "flashing" — i.e. when self.flashing counts down to zero. Now, self.flashing is set to 20 when a new log message is added, so at 30fps, that works out to ⅔ second for each line of messages; too fast? too slow?