From d5024964c86e4a56a732c78d7f05f3516d18fd70 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 24 Dec 2024 13:56:39 -0800 Subject: [PATCH] Improve BeefCon cpu usage --- BeefTools/BeefCon/src/Program.bf | 2 +- IDE/src/util/ConsoleProvider.bf | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/BeefTools/BeefCon/src/Program.bf b/BeefTools/BeefCon/src/Program.bf index 08a52b8e..09f45a1e 100644 --- a/BeefTools/BeefCon/src/Program.bf +++ b/BeefTools/BeefCon/src/Program.bf @@ -48,7 +48,7 @@ class Program { while (true) { - switch (mPipe.ReadMessage(-1)) + switch (mPipe.ReadMessage(20)) { case .Ok(let msg): uint8* ptr = msg.Ptr + 1; diff --git a/IDE/src/util/ConsoleProvider.bf b/IDE/src/util/ConsoleProvider.bf index 2d6ea730..7bb946b0 100644 --- a/IDE/src/util/ConsoleProvider.bf +++ b/IDE/src/util/ConsoleProvider.bf @@ -903,6 +903,7 @@ class BeefConConsoleProvider : ConsoleProvider public bool mConnected; public Thread mThread ~ delete _; public Monitor mDataMonitor = new .() ~ delete _; + public WaitEvent mDataEvent = new .() ~ delete _; public int mPendingReadClear; public bool mExiting; @@ -949,6 +950,7 @@ class BeefConConsoleProvider : ConsoleProvider using (mDataMonitor.Enter()) { mRecvStream.TryWrite(.(&data, len)); + mDataEvent.Set(true); } case .Err(let err): if ((err == .PipeListening) && (!mConnected)) @@ -1022,7 +1024,7 @@ class BeefConConsoleProvider : ConsoleProvider } } - public Result> ReadMessage(int timeoutMS) + Result> DoReadMessage() { using (mDataMonitor.Enter()) { @@ -1044,6 +1046,19 @@ class BeefConConsoleProvider : ConsoleProvider return .Ok(.(mRecvStream.Memory.Ptr + 4, wantTotalLen - 4)); } } + + public Result> ReadMessage(int timeoutMS) + { + if (timeoutMS != 0) + mDataEvent.WaitFor(timeoutMS); + using (mDataMonitor.Enter()) + { + var result = DoReadMessage(); + if (result case .Err) + mDataEvent.Reset(); + return result; + } + } } public static int sConId = 0;