diff --git a/BuildTime.txt b/BuildTime.txt index f107874..ad5912b 100644 --- a/BuildTime.txt +++ b/BuildTime.txt @@ -1 +1 @@ -2026-03-13 19:25:57 \ No newline at end of file +2026-03-13 23:19:58 \ No newline at end of file diff --git a/GitCommit.txt b/GitCommit.txt index 81e5edd..201c0ac 100644 --- a/GitCommit.txt +++ b/GitCommit.txt @@ -1 +1 @@ -8041376 \ No newline at end of file +518de24 \ No newline at end of file diff --git a/Gui/Gui.cs b/Gui/Gui.cs index b97170b..beb6dd7 100644 --- a/Gui/Gui.cs +++ b/Gui/Gui.cs @@ -61,6 +61,10 @@ namespace CMLeonOS.Gui ProcessManager.AddProcess(windowManager, new Sound.SoundService()).Start(); + ProcessManager.AddProcess(windowManager, new MemService()).Start(); + + Logger.Logger.Instance.Info("Gui", "Memory management service started"); + Console.WriteLine("Starting lock screen..."); ProcessManager.AddProcess(windowManager, new ShellComponents.Lock()).Start(); diff --git a/Gui/WindowManager.cs b/Gui/WindowManager.cs index 3525a3c..a466376 100644 --- a/Gui/WindowManager.cs +++ b/Gui/WindowManager.cs @@ -20,6 +20,7 @@ using CMLeonOS; using CMLeonOS.Gui.ShellComponents; using CMLeonOS.Settings; using CMLeonOS.Driver; +using CMLeonOS.Logger; using System; using System.Collections.Generic; using System.Drawing; @@ -183,12 +184,17 @@ namespace CMLeonOS.Gui Windows.Add(window); + Logger.Logger.Instance.Debug("WindowManager", $"Added window: {window.GetType().Name}"); + UpdateDock(); } internal void RemoveWindow(Window window, bool rerender = true) { Windows.Remove(window); + + Logger.Logger.Instance.Debug("WindowManager", $"Removed window: {window.GetType().Name}"); + for (int i = Windows.Count - 1; i >= 0; i--) { if (i >= Windows.Count) continue; @@ -387,22 +393,30 @@ namespace CMLeonOS.Gui { base.Start(); + Logger.Logger.Instance.Info("WindowManager", "Starting WindowManager service"); + SettingsService settingsService = ProcessManager.GetProcess(); ScreenWidth = (uint)settingsService.Mode.Width; ScreenHeight = (uint)settingsService.Mode.Height; bytesPerPixel = 4; + Logger.Logger.Instance.Info("WindowManager", $"Screen resolution: {ScreenWidth}x{ScreenHeight}"); + SetupDriver(); SetupMouse(); SetupWallpaper(); RenderWallpaper(); + Logger.Logger.Instance.Info("WindowManager", "Driver, mouse, and wallpaper initialized"); + fpsCounter = new Window(this, (int)(ScreenWidth) - 64, (int)(ScreenHeight - 16), 64, 16); if (SettingsManager.GUI_ShowFps) { AddWindow(fpsCounter); } + + Logger.Logger.Instance.Success("WindowManager", "WindowManager started successfully"); } public override void Run() diff --git a/System/MemService.cs b/System/MemService.cs new file mode 100644 index 0000000..bd2eae6 --- /dev/null +++ b/System/MemService.cs @@ -0,0 +1,42 @@ +// The CMLeonOS Project (https://github.com/Leonmmcoset/CMLeonOS) +// Copyright (C) 2025-present LeonOS 2 Developer Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using CMLeonOS.Logger; + +namespace CMLeonOS +{ + internal class MemService : Process + { + internal MemService() : base("MemService", ProcessType.Service) + { + Critical = true; + } + + int ticks = 0; + + public override void Run() + { + if (ticks == 5) + { + ticks = 0; + Cosmos.Core.Memory.Heap.Collect(); + ProcessManager.Sweep(); + Logger.Logger.Instance.Debug("MemService", "Memory garbage collection and process sweep completed"); + } + ticks++; + } + } +} \ No newline at end of file diff --git a/System/ProcessManager.cs b/System/ProcessManager.cs index aeeffc8..ca3dadb 100644 --- a/System/ProcessManager.cs +++ b/System/ProcessManager.cs @@ -15,6 +15,7 @@ // along with this program. If not, see . using System.Collections.Generic; +using CMLeonOS.Logger; namespace CMLeonOS { @@ -43,18 +44,27 @@ namespace CMLeonOS Processes.Add(process); + Logger.Logger.Instance.Debug("ProcessManager", $"Added process: {process.Name} (ID: {process.Id})"); + return process; } public static void Sweep() { + int removedCount = 0; for (int i = Processes.Count - 1; i >= 0; i--) { if (!Processes[i].IsRunning) { Processes.Remove(Processes[i]); + removedCount++; } } + + if (removedCount > 0) + { + Logger.Logger.Instance.Debug("ProcessManager", $"Swept {removedCount} stopped processes"); + } } public static void Yield()