diff options
| author | 2018-07-14 12:47:14 -0600 | |
|---|---|---|
| committer | 2018-07-15 13:02:09 -0600 | |
| commit | 497b81558e2543f3b42e4267d8ea9acc40bdf03b (patch) | |
| tree | 47654b29d6ddd302315de8ff5e0593ca8de9ef77 | |
| parent | Logging: Don't lock the queue for the duration of the write (diff) | |
| download | yuzu-497b81558e2543f3b42e4267d8ea9acc40bdf03b.tar.gz yuzu-497b81558e2543f3b42e4267d8ea9acc40bdf03b.tar.xz yuzu-497b81558e2543f3b42e4267d8ea9acc40bdf03b.zip | |
Logging: Dump all logs in the queue on close in debug mode
Diffstat (limited to '')
| -rw-r--r-- | src/common/logging/backend.cpp | 3 | ||||
| -rw-r--r-- | src/common/logging/filter.cpp | 7 | ||||
| -rw-r--r-- | src/common/logging/filter.h | 3 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 5313b8510..ed1e93cc2 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <algorithm> | 5 | #include <algorithm> |
| 6 | #include <array> | 6 | #include <array> |
| 7 | #include <chrono> | 7 | #include <chrono> |
| 8 | #include <climits> | ||
| 8 | #include <condition_variable> | 9 | #include <condition_variable> |
| 9 | #include <memory> | 10 | #include <memory> |
| 10 | #include <thread> | 11 | #include <thread> |
| @@ -94,7 +95,7 @@ private: | |||
| 94 | } | 95 | } |
| 95 | // Drain the logging queue. Only writes out up to MAX_LOGS_TO_WRITE to prevent a case | 96 | // Drain the logging queue. Only writes out up to MAX_LOGS_TO_WRITE to prevent a case |
| 96 | // where a system is repeatedly spamming logs even on close. | 97 | // where a system is repeatedly spamming logs even on close. |
| 97 | constexpr int MAX_LOGS_TO_WRITE = 100; | 98 | const int MAX_LOGS_TO_WRITE = filter.IsDebug() ? INT_MAX : 100; |
| 98 | int logs_written = 0; | 99 | int logs_written = 0; |
| 99 | while (logs_written++ < MAX_LOGS_TO_WRITE && message_queue.Pop(entry)) { | 100 | while (logs_written++ < MAX_LOGS_TO_WRITE && message_queue.Pop(entry)) { |
| 100 | write_logs(entry); | 101 | write_logs(entry); |
diff --git a/src/common/logging/filter.cpp b/src/common/logging/filter.cpp index 4e783a577..6ed087beb 100644 --- a/src/common/logging/filter.cpp +++ b/src/common/logging/filter.cpp | |||
| @@ -94,4 +94,11 @@ bool Filter::ParseFilterRule(const std::string::const_iterator begin, | |||
| 94 | bool Filter::CheckMessage(Class log_class, Level level) const { | 94 | bool Filter::CheckMessage(Class log_class, Level level) const { |
| 95 | return static_cast<u8>(level) >= static_cast<u8>(class_levels[static_cast<size_t>(log_class)]); | 95 | return static_cast<u8>(level) >= static_cast<u8>(class_levels[static_cast<size_t>(log_class)]); |
| 96 | } | 96 | } |
| 97 | |||
| 98 | bool Filter::IsDebug() const { | ||
| 99 | return std::any_of(class_levels.begin(), class_levels.end(), [](const Level& l) { | ||
| 100 | return static_cast<u8>(l) <= static_cast<u8>(Level::Debug); | ||
| 101 | }); | ||
| 102 | } | ||
| 103 | |||
| 97 | } // namespace Log | 104 | } // namespace Log |
diff --git a/src/common/logging/filter.h b/src/common/logging/filter.h index ccca289bd..2a4f7c845 100644 --- a/src/common/logging/filter.h +++ b/src/common/logging/filter.h | |||
| @@ -47,6 +47,9 @@ public: | |||
| 47 | /// Matches class/level combination against the filter, returning true if it passed. | 47 | /// Matches class/level combination against the filter, returning true if it passed. |
| 48 | bool CheckMessage(Class log_class, Level level) const; | 48 | bool CheckMessage(Class log_class, Level level) const; |
| 49 | 49 | ||
| 50 | /// Returns true if any logging classes are set to debug | ||
| 51 | bool IsDebug() const; | ||
| 52 | |||
| 50 | private: | 53 | private: |
| 51 | std::array<Level, (size_t)Class::Count> class_levels; | 54 | std::array<Level, (size_t)Class::Count> class_levels; |
| 52 | }; | 55 | }; |