summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2021-05-14 16:39:28 +0300
committerAndreas Kling <kling@serenityos.org>2021-05-16 19:58:33 +0200
commitdbccfc3281231e0109b275028cfe93791383ef36 (patch)
treeeabaa3cd3f0069a615a79f5c5c22edebca8ad1b4
parent2e565f1b8a048b3f5770b67cebec21c229e3e237 (diff)
downloadserenity-dbccfc3281231e0109b275028cfe93791383ef36.zip
Kernel: Print all logbuffer from ConsoleDevice to debug Virtual Console
-rw-r--r--Kernel/TTY/ConsoleManagement.cpp5
-rw-r--r--Kernel/TTY/VirtualConsole.cpp29
-rw-r--r--Kernel/TTY/VirtualConsole.h6
3 files changed, 35 insertions, 5 deletions
diff --git a/Kernel/TTY/ConsoleManagement.cpp b/Kernel/TTY/ConsoleManagement.cpp
index 20dd12c234..ea1d2c0de0 100644
--- a/Kernel/TTY/ConsoleManagement.cpp
+++ b/Kernel/TTY/ConsoleManagement.cpp
@@ -38,6 +38,11 @@ UNMAP_AFTER_INIT ConsoleManagement::ConsoleManagement()
UNMAP_AFTER_INIT void ConsoleManagement::initialize()
{
for (size_t index = 0; index < 4; index++) {
+ // FIXME: Better determine the debug TTY we chose...
+ if (index == 1) {
+ m_consoles.append(VirtualConsole::create_with_preset_log(index, ConsoleDevice::the().logbuffer()));
+ continue;
+ }
m_consoles.append(VirtualConsole::create(index));
}
// Note: By default the active console is the first one.
diff --git a/Kernel/TTY/VirtualConsole.cpp b/Kernel/TTY/VirtualConsole.cpp
index f08284a339..00dd68067e 100644
--- a/Kernel/TTY/VirtualConsole.cpp
+++ b/Kernel/TTY/VirtualConsole.cpp
@@ -116,10 +116,12 @@ UNMAP_AFTER_INIT NonnullRefPtr<VirtualConsole> VirtualConsole::create(size_t ind
return adopt_ref(*new VirtualConsole(index));
}
-UNMAP_AFTER_INIT VirtualConsole::VirtualConsole(const unsigned index)
- : TTY(4, index)
- , m_index(index)
- , m_console_impl(*this)
+UNMAP_AFTER_INIT NonnullRefPtr<VirtualConsole> VirtualConsole::create_with_preset_log(size_t index, const CircularQueue<char, 16384>& log)
+{
+ return adopt_ref(*new VirtualConsole(index, log));
+}
+
+UNMAP_AFTER_INIT void VirtualConsole::initialize()
{
m_tty_name = String::formatted("/dev/tty{}", m_index);
VERIFY(GraphicsManagement::the().console());
@@ -138,6 +140,25 @@ UNMAP_AFTER_INIT VirtualConsole::VirtualConsole(const unsigned index)
VERIFY(m_cells);
}
+UNMAP_AFTER_INIT VirtualConsole::VirtualConsole(const unsigned index)
+ : TTY(4, index)
+ , m_index(index)
+ , m_console_impl(*this)
+{
+ initialize();
+}
+
+UNMAP_AFTER_INIT VirtualConsole::VirtualConsole(const unsigned index, const CircularQueue<char, 16384>& log)
+ : TTY(4, index)
+ , m_index(index)
+ , m_console_impl(*this)
+{
+ initialize();
+ for (auto& ch : log) {
+ echo(ch);
+ }
+}
+
UNMAP_AFTER_INIT VirtualConsole::~VirtualConsole()
{
VERIFY_NOT_REACHED();
diff --git a/Kernel/TTY/VirtualConsole.h b/Kernel/TTY/VirtualConsole.h
index 3ad2c0f703..c36bf5da17 100644
--- a/Kernel/TTY/VirtualConsole.h
+++ b/Kernel/TTY/VirtualConsole.h
@@ -74,6 +74,7 @@ public:
public:
static NonnullRefPtr<VirtualConsole> create(size_t index);
+ static NonnullRefPtr<VirtualConsole> create_with_preset_log(size_t index, const CircularQueue<char, 16384>&);
virtual ~VirtualConsole() override;
@@ -85,7 +86,8 @@ public:
void emit_char(char);
private:
- VirtualConsole(const unsigned index);
+ explicit VirtualConsole(const unsigned index);
+ VirtualConsole(const unsigned index, const CircularQueue<char, 16384>&);
// ^KeyboardClient
virtual void on_key_pressed(KeyEvent) override;
@@ -119,6 +121,8 @@ private:
RecursiveSpinLock m_lock;
private:
+ void initialize();
+
void invalidate_cursor(size_t row);
void clear();