Unravel Engine C++ Reference
Loading...
Searching...
No Matches
console_log_panel.h
Go to the documentation of this file.
1#pragma once
3
4#include <hpp/optional.hpp>
5#include <hpp/ring_buffer.hpp>
6#include <hpp/small_vector.hpp>
7
8// #include <console/console.h>
9#include <logging/logging.h>
10
11#include <array>
12#include <atomic>
13#include <string>
14
15namespace unravel
16{
17
18class console_log_panel : public sinks::base_sink<std::mutex> //, public console
19{
20public:
21 using mem_buf = hpp::small_vector<char, 250>;
22
24 {
25 std::string filename{};
26 std::string funcname{};
27 int line{0};
28 };
29
30 struct log_entry
31 {
33
34 level::level_enum level{level::off};
36
37 uint64_t id{};
38 };
39
40 using display_entries_t = hpp::small_vector<log_entry, 1024>;
41 using entries_t = hpp::stack_ringbuffer<log_entry, 1024>;
42
44 void sink_it_(const details::log_msg& msg) override;
45 void flush_() override;
46
47 void on_frame_ui_render(rtti::context& ctx, const char* name);
48 void draw();
49
50 void draw_details();
51 auto draw_last_log() -> bool;
52
54
55 void on_play();
56 void on_recompile();
57
58private:
59 void select_log(const log_entry& entry);
60 void clear_log();
61 void open_log(const log_entry& entry);
62 auto has_new_entries() const -> bool;
63 void set_has_new_entries(bool val);
64
65 auto draw_log(const log_entry& msg, int num_lines) -> bool;
66 void draw_range(const hpp::string_view& formatted, size_t start, size_t end);
67 void draw_filter_button(level::level_enum level);
68
69 std::array<bool, size_t(level::n_levels)> enabled_categories_{};
70
71 std::recursive_mutex entries_mutex_;
73 entries_t entries_;
75 std::atomic<bool> has_new_entries_ = {false};
76
77 std::atomic<int64_t> new_entries_begin_idx_{-1};
78
79 ImGuiTextFilter filter_;
80
81 uint64_t current_id_{};
82 hpp::optional<log_entry> selected_log_{};
83 std::string name_;
84
85 bool clear_on_play_{true};
86 bool clear_on_recompile_{true};
87};
88} // namespace unravel
hpp::stack_ringbuffer< log_entry, 1024 > entries_t
void on_frame_ui_render(rtti::context &ctx, const char *name)
hpp::small_vector< log_entry, 1024 > display_entries_t
hpp::small_vector< char, 250 > mem_buf
void sink_it_(const details::log_msg &msg) override
std::string name
Definition hub.cpp:27
log_source source
mem_buf formatted
level::level_enum level