diff options
-rw-r--r-- | rbutil/rbutilqt/systrace.cpp | 29 | ||||
-rw-r--r-- | rbutil/rbutilqt/systrace.h | 3 |
2 files changed, 29 insertions, 3 deletions
diff --git a/rbutil/rbutilqt/systrace.cpp b/rbutil/rbutilqt/systrace.cpp index 1b9de6b713..a1e8bd0239 100644 --- a/rbutil/rbutilqt/systrace.cpp +++ b/rbutil/rbutilqt/systrace.cpp | |||
@@ -24,6 +24,8 @@ | |||
24 | #include "rbsettings.h" | 24 | #include "rbsettings.h" |
25 | 25 | ||
26 | QString SysTrace::debugbuffer; | 26 | QString SysTrace::debugbuffer; |
27 | QString SysTrace::lastmessage; | ||
28 | unsigned int SysTrace::repeat = 0; | ||
27 | 29 | ||
28 | SysTrace::SysTrace(QWidget *parent) : QDialog(parent) | 30 | SysTrace::SysTrace(QWidget *parent) : QDialog(parent) |
29 | { | 31 | { |
@@ -41,6 +43,7 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent) | |||
41 | void SysTrace::refresh(void) | 43 | void SysTrace::refresh(void) |
42 | { | 44 | { |
43 | int pos = ui.textTrace->verticalScrollBar()->value(); | 45 | int pos = ui.textTrace->verticalScrollBar()->value(); |
46 | flush(); | ||
44 | ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); | 47 | ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); |
45 | ui.textTrace->verticalScrollBar()->setValue(pos); | 48 | ui.textTrace->verticalScrollBar()->setValue(pos); |
46 | QString oldlog = RbSettings::value(RbSettings::CachePath).toString() | 49 | QString oldlog = RbSettings::value(RbSettings::CachePath).toString() |
@@ -54,6 +57,8 @@ void SysTrace::save(QString filename) | |||
54 | if(filename.isEmpty()) | 57 | if(filename.isEmpty()) |
55 | filename = RbSettings::value(RbSettings::CachePath).toString() | 58 | filename = RbSettings::value(RbSettings::CachePath).toString() |
56 | + "/rbutil-trace.log"; | 59 | + "/rbutil-trace.log"; |
60 | // make sure any repeat detection is flushed | ||
61 | flush(); | ||
57 | // append save date to the trace. Append it directly instead of using | 62 | // append save date to the trace. Append it directly instead of using |
58 | // qDebug() as the handler might have been unregistered. | 63 | // qDebug() as the handler might have been unregistered. |
59 | debugbuffer.append("[SysTrace] saving trace at "); | 64 | debugbuffer.append("[SysTrace] saving trace at "); |
@@ -91,11 +96,29 @@ void SysTrace::savePreviousTrace(void) | |||
91 | void SysTrace::debug(QtMsgType type, const char* msg) | 96 | void SysTrace::debug(QtMsgType type, const char* msg) |
92 | { | 97 | { |
93 | (void)type; | 98 | (void)type; |
94 | debugbuffer.append(msg); | 99 | if(lastmessage != msg) { |
95 | debugbuffer.append("\n"); | 100 | lastmessage = msg; |
101 | flush(); | ||
102 | debugbuffer.append(msg); | ||
103 | debugbuffer.append("\n"); | ||
96 | #if !defined(NODEBUG) | 104 | #if !defined(NODEBUG) |
97 | fprintf(stderr, "%s\n", msg); | 105 | fprintf(stderr, "%s\n", msg); |
98 | #endif | 106 | #endif |
107 | repeat = 1; | ||
108 | } | ||
109 | else { | ||
110 | repeat++; | ||
111 | } | ||
112 | } | ||
99 | 113 | ||
114 | void SysTrace::flush(void) | ||
115 | { | ||
116 | if(repeat > 1) { | ||
117 | debugbuffer.append( | ||
118 | QString(" (Last message repeasted %1 times.)\n").arg(repeat)); | ||
119 | #if !defined(NODEBUG) | ||
120 | fprintf(stderr, " (Last message repeated %i times.)\n", repeat); | ||
121 | #endif | ||
122 | } | ||
100 | } | 123 | } |
101 | 124 | ||
diff --git a/rbutil/rbutilqt/systrace.h b/rbutil/rbutilqt/systrace.h index 4e6206a886..f15e33c149 100644 --- a/rbutil/rbutilqt/systrace.h +++ b/rbutil/rbutilqt/systrace.h | |||
@@ -34,8 +34,11 @@ class SysTrace : public QDialog | |||
34 | static QString getTrace() {return debugbuffer;} | 34 | static QString getTrace() {return debugbuffer;} |
35 | static void save(QString filename = ""); | 35 | static void save(QString filename = ""); |
36 | private: | 36 | private: |
37 | static void flush(void); | ||
37 | Ui::SysTraceFrm ui; | 38 | Ui::SysTraceFrm ui; |
38 | static QString debugbuffer; | 39 | static QString debugbuffer; |
40 | static QString lastmessage; | ||
41 | static unsigned int repeat; | ||
39 | 42 | ||
40 | private slots: | 43 | private slots: |
41 | void saveCurrentTrace(void); | 44 | void saveCurrentTrace(void); |