diff options
| author | 2015-05-15 20:54:48 -0700 | |
|---|---|---|
| committer | 2015-05-15 20:54:48 -0700 | |
| commit | ba2fe7f795ebc8da4acd247436afeefb900645d3 (patch) | |
| tree | be9a2cbcdd840f41be5353a33a98bff3ca31544e /src/common/logging/backend.cpp | |
| parent | Merge pull request #780 from citra-emu/roadmap (diff) | |
| parent | Remove unused concurrent_ring_buffer.h (diff) | |
| download | yuzu-ba2fe7f795ebc8da4acd247436afeefb900645d3.tar.gz yuzu-ba2fe7f795ebc8da4acd247436afeefb900645d3.tar.xz yuzu-ba2fe7f795ebc8da4acd247436afeefb900645d3.zip | |
Merge pull request #758 from yuriks/sync-logging
Common: Remove async logging
Diffstat (limited to 'src/common/logging/backend.cpp')
| -rw-r--r-- | src/common/logging/backend.cpp | 56 |
1 files changed, 9 insertions, 47 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 7d3534a43..bd2c6a153 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp | |||
| @@ -3,17 +3,17 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <algorithm> | 5 | #include <algorithm> |
| 6 | #include <array> | ||
| 7 | #include <cstdio> | ||
| 6 | 8 | ||
| 7 | #include "common/assert.h" | 9 | #include "common/common_funcs.h" // snprintf compatibility define |
| 8 | |||
| 9 | #include "common/logging/backend.h" | 10 | #include "common/logging/backend.h" |
| 11 | #include "common/logging/filter.h" | ||
| 10 | #include "common/logging/log.h" | 12 | #include "common/logging/log.h" |
| 11 | #include "common/logging/text_formatter.h" | 13 | #include "common/logging/text_formatter.h" |
| 12 | 14 | ||
| 13 | namespace Log { | 15 | namespace Log { |
| 14 | 16 | ||
| 15 | static std::shared_ptr<Logger> global_logger; | ||
| 16 | |||
| 17 | /// Macro listing all log classes. Code should define CLS and SUB as desired before invoking this. | 17 | /// Macro listing all log classes. Code should define CLS and SUB as desired before invoking this. |
| 18 | #define ALL_LOG_CLASSES() \ | 18 | #define ALL_LOG_CLASSES() \ |
| 19 | CLS(Log) \ | 19 | CLS(Log) \ |
| @@ -55,28 +55,8 @@ static std::shared_ptr<Logger> global_logger; | |||
| 55 | SUB(Render, OpenGL) \ | 55 | SUB(Render, OpenGL) \ |
| 56 | CLS(Loader) | 56 | CLS(Loader) |
| 57 | 57 | ||
| 58 | Logger::Logger() { | ||
| 59 | // Register logging classes so that they can be queried at runtime | ||
| 60 | size_t parent_class; | ||
| 61 | all_classes.reserve((size_t)Class::Count); | ||
| 62 | |||
| 63 | #define CLS(x) \ | ||
| 64 | all_classes.push_back(Class::x); \ | ||
| 65 | parent_class = all_classes.size() - 1; | ||
| 66 | #define SUB(x, y) \ | ||
| 67 | all_classes.push_back(Class::x##_##y); \ | ||
| 68 | all_classes[parent_class].num_children += 1; | ||
| 69 | |||
| 70 | ALL_LOG_CLASSES() | ||
| 71 | #undef CLS | ||
| 72 | #undef SUB | ||
| 73 | |||
| 74 | // Ensures that ALL_LOG_CLASSES isn't missing any entries. | ||
| 75 | DEBUG_ASSERT(all_classes.size() == (size_t)Class::Count); | ||
| 76 | } | ||
| 77 | |||
| 78 | // GetClassName is a macro defined by Windows.h, grrr... | 58 | // GetClassName is a macro defined by Windows.h, grrr... |
| 79 | const char* Logger::GetLogClassName(Class log_class) { | 59 | const char* GetLogClassName(Class log_class) { |
| 80 | switch (log_class) { | 60 | switch (log_class) { |
| 81 | #define CLS(x) case Class::x: return #x; | 61 | #define CLS(x) case Class::x: return #x; |
| 82 | #define SUB(x, y) case Class::x##_##y: return #x "." #y; | 62 | #define SUB(x, y) case Class::x##_##y: return #x "." #y; |
| @@ -87,7 +67,7 @@ const char* Logger::GetLogClassName(Class log_class) { | |||
| 87 | return "Unknown"; | 67 | return "Unknown"; |
| 88 | } | 68 | } |
| 89 | 69 | ||
| 90 | const char* Logger::GetLevelName(Level log_level) { | 70 | const char* GetLevelName(Level log_level) { |
| 91 | #define LVL(x) case Level::x: return #x | 71 | #define LVL(x) case Level::x: return #x |
| 92 | switch (log_level) { | 72 | switch (log_level) { |
| 93 | LVL(Trace); | 73 | LVL(Trace); |
| @@ -101,19 +81,6 @@ const char* Logger::GetLevelName(Level log_level) { | |||
| 101 | #undef LVL | 81 | #undef LVL |
| 102 | } | 82 | } |
| 103 | 83 | ||
| 104 | void Logger::LogMessage(Entry entry) { | ||
| 105 | ring_buffer.Push(std::move(entry)); | ||
| 106 | } | ||
| 107 | |||
| 108 | size_t Logger::GetEntries(Entry* out_buffer, size_t buffer_len) { | ||
| 109 | return ring_buffer.BlockingPop(out_buffer, buffer_len); | ||
| 110 | } | ||
| 111 | |||
| 112 | std::shared_ptr<Logger> InitGlobalLogger() { | ||
| 113 | global_logger = std::make_shared<Logger>(); | ||
| 114 | return global_logger; | ||
| 115 | } | ||
| 116 | |||
| 117 | Entry CreateEntry(Class log_class, Level log_level, | 84 | Entry CreateEntry(Class log_class, Level log_level, |
| 118 | const char* filename, unsigned int line_nr, const char* function, | 85 | const char* filename, unsigned int line_nr, const char* function, |
| 119 | const char* format, va_list args) { | 86 | const char* format, va_list args) { |
| @@ -138,7 +105,7 @@ Entry CreateEntry(Class log_class, Level log_level, | |||
| 138 | return std::move(entry); | 105 | return std::move(entry); |
| 139 | } | 106 | } |
| 140 | 107 | ||
| 141 | static Filter* filter; | 108 | static Filter* filter = nullptr; |
| 142 | 109 | ||
| 143 | void SetFilter(Filter* new_filter) { | 110 | void SetFilter(Filter* new_filter) { |
| 144 | filter = new_filter; | 111 | filter = new_filter; |
| @@ -147,7 +114,7 @@ void SetFilter(Filter* new_filter) { | |||
| 147 | void LogMessage(Class log_class, Level log_level, | 114 | void LogMessage(Class log_class, Level log_level, |
| 148 | const char* filename, unsigned int line_nr, const char* function, | 115 | const char* filename, unsigned int line_nr, const char* function, |
| 149 | const char* format, ...) { | 116 | const char* format, ...) { |
| 150 | if (!filter->CheckMessage(log_class, log_level)) | 117 | if (filter != nullptr && !filter->CheckMessage(log_class, log_level)) |
| 151 | return; | 118 | return; |
| 152 | 119 | ||
| 153 | va_list args; | 120 | va_list args; |
| @@ -156,12 +123,7 @@ void LogMessage(Class log_class, Level log_level, | |||
| 156 | filename, line_nr, function, format, args); | 123 | filename, line_nr, function, format, args); |
| 157 | va_end(args); | 124 | va_end(args); |
| 158 | 125 | ||
| 159 | if (global_logger != nullptr && !global_logger->IsClosed()) { | 126 | PrintColoredMessage(entry); |
| 160 | global_logger->LogMessage(std::move(entry)); | ||
| 161 | } else { | ||
| 162 | // Fall back to directly printing to stderr | ||
| 163 | PrintMessage(entry); | ||
| 164 | } | ||
| 165 | } | 127 | } |
| 166 | 128 | ||
| 167 | } | 129 | } |