diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-05-07 16:18:41 +0000 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-05-07 16:18:41 +0000 |
commit | feecb7d4beed9dc58a82201acd692631cdf6d0b3 (patch) | |
tree | 4262720fc235b9ff8e896eb45d74a92549598d2e /rbutil | |
parent | 227e619bbfeaf7d5d3112cc35a1865ff96129c5c (diff) | |
download | rockbox-feecb7d4beed9dc58a82201acd692631cdf6d0b3.tar.gz rockbox-feecb7d4beed9dc58a82201acd692631cdf6d0b3.zip |
Add repeat counting to system trace.
This make the system trace check for repeating lines, and only print a "(last
message repeated n lines.)" instead of the real message multiple times. This
keeps the trace much shorter if messages are repeated. The drawback is that the
replacement count message will only get printed on the next line getting
traced, so until that happens it swallows the repeated lines.
Before saving the systrace buffer is flushed, so this should not raise a problem.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25878 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil')
-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); |