Bsongis/mpaperno sim dbgbuff fixes (#7161)

* [Simulator][FIFOBufferDevice][FilteredTextBuffer]
  * Fix issues with dynamic memory allocation on Linux (closes #6119);
  * Fix occasional issue with long lines getting partially repeated in output;
  * Fixes filter buffer getting overwhelmed with some very verbose Horus startups (observed on Linux);
  * Adjust buffer max. size settings to int type (to match QByteArray size type);
  * Re-implement QIODevice bytesAvailable() and canReadLine() for efficiency;
  * Remove some unnecessary vars, other minor optimizations, cosmetics.

* [Simulator] Slightly optimize DebugOutput::processBytesReceived() by using QByteArray directly.
This commit is contained in:
Bertrand Songis
2019-12-06 16:51:36 +01:00
committed by GitHub
parent 13cee8786c
commit bb4909f51f
3 changed files with 115 additions and 137 deletions
+6 -7
View File
@@ -164,20 +164,19 @@ void DebugOutput::restoreState()
void DebugOutput::processBytesReceived()
{
static char buf[512];
static QByteArray text;
if (text.capacity() < 512)
text.reserve(512);
const QTextCursor savedCursor(ui->console->textCursor());
const int sbValue = ui->console->verticalScrollBar()->value();
const bool sbAtBottom = (sbValue == ui->console->verticalScrollBar()->maximum());
qint64 len;
QString text;
while (m_dataBufferDevice && m_dataBufferDevice->bytesAvailable() > 0) {
len = m_dataBufferDevice->read(buf, sizeof(buf));
if (len <= 0)
text = m_dataBufferDevice->read(qint64(text.capacity()));
if (text.isEmpty())
break;
text = QString::fromLocal8Bit(buf, len);
ui->console->moveCursor(QTextCursor::End);
ui->console->textCursor().insertText(text);
ui->console->textCursor().insertText(QString(text));
if (sbAtBottom) {
ui->console->moveCursor(QTextCursor::End);
ui->console->verticalScrollBar()->setValue(ui->console->verticalScrollBar()->maximum());