summaryrefslogtreecommitdiff
path: root/src/common/logging/backend.cpp
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2015-05-15 20:54:48 -0700
committerGravatar Yuri Kunde Schlesner2015-05-15 20:54:48 -0700
commitba2fe7f795ebc8da4acd247436afeefb900645d3 (patch)
treebe9a2cbcdd840f41be5353a33a98bff3ca31544e /src/common/logging/backend.cpp
parentMerge pull request #780 from citra-emu/roadmap (diff)
parentRemove unused concurrent_ring_buffer.h (diff)
downloadyuzu-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.cpp56
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
13namespace Log { 15namespace Log {
14 16
15static 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
58Logger::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...
79const char* Logger::GetLogClassName(Class log_class) { 59const 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
90const char* Logger::GetLevelName(Level log_level) { 70const 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
104void Logger::LogMessage(Entry entry) {
105 ring_buffer.Push(std::move(entry));
106}
107
108size_t Logger::GetEntries(Entry* out_buffer, size_t buffer_len) {
109 return ring_buffer.BlockingPop(out_buffer, buffer_len);
110}
111
112std::shared_ptr<Logger> InitGlobalLogger() {
113 global_logger = std::make_shared<Logger>();
114 return global_logger;
115}
116
117Entry CreateEntry(Class log_class, Level log_level, 84Entry 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
141static Filter* filter; 108static Filter* filter = nullptr;
142 109
143void SetFilter(Filter* new_filter) { 110void SetFilter(Filter* new_filter) {
144 filter = new_filter; 111 filter = new_filter;
@@ -147,7 +114,7 @@ void SetFilter(Filter* new_filter) {
147void LogMessage(Class log_class, Level log_level, 114void 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}