From 11e097d696b8b8050b58beb640d519379a96014a Mon Sep 17 00:00:00 2001 From: Eauldane Date: Wed, 3 Sep 2025 12:53:21 +0100 Subject: [PATCH] Sort syncshells by VRAM usage --- .../Configurations/MareConfig.cs | 1 + MareSynchronos/MareSynchronos.csproj | 8 ++- MareSynchronos/Snowcloak.json | 2 +- MareSynchronos/UI/Components/DrawGroupPair.cs | 3 + MareSynchronos/UI/Components/GroupPanel.cs | 11 ++- MareSynchronos/UI/SettingsUi.cs | 8 ++- MareSynchronos/packages.lock.json | 69 +++++++++++-------- 7 files changed, 67 insertions(+), 35 deletions(-) diff --git a/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs b/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs index 6047545..3d4ee44 100644 --- a/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs +++ b/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs @@ -7,6 +7,7 @@ namespace MareSynchronos.MareConfiguration.Configurations; [Serializable] public class MareConfig : IMareConfiguration { + public bool SortSyncshellsByVRAM { get; set; } = false; public int ExpectedTOSVersion = 2; public int AcceptedTOSVersion { get; set; } = 0; public bool AcceptedAgreement { get; set; } = false; diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 179d63f..b10b01e 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -14,10 +14,12 @@ - + - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -29,6 +31,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/MareSynchronos/Snowcloak.json b/MareSynchronos/Snowcloak.json index 39b04e3..03f8f97 100644 --- a/MareSynchronos/Snowcloak.json +++ b/MareSynchronos/Snowcloak.json @@ -9,6 +9,6 @@ "customization" ], "IconUrl": "https://raw.githubusercontent.com/Eauldane/SnowcloakClient/refs/heads/main/MareSynchronos/images/logo.png", - "RepoUrl": "https://github.com/Eauldane/SnowcloakClient", + "RepoUrl": "https://git.snowcloak-sync.com/Eauldane/SnowcloakClient", "CanUnloadAsync": true } diff --git a/MareSynchronos/UI/Components/DrawGroupPair.cs b/MareSynchronos/UI/Components/DrawGroupPair.cs index 64db21f..7f546f0 100644 --- a/MareSynchronos/UI/Components/DrawGroupPair.cs +++ b/MareSynchronos/UI/Components/DrawGroupPair.cs @@ -20,6 +20,7 @@ public class DrawGroupPair : DrawPairBase private readonly GroupPairFullInfoDto _fullInfoDto; private readonly GroupFullInfoDto _group; private readonly CharaDataManager _charaDataManager; + public long _VRAMBytes; public DrawGroupPair(string id, Pair entry, ApiController apiController, MareMediator mareMediator, GroupFullInfoDto group, GroupPairFullInfoDto fullInfoDto, @@ -80,11 +81,13 @@ public class DrawGroupPair : DrawPairBase } if (_pair.LastAppliedDataBytes >= 0) { + presenceText += UiSharedService.TooltipSeparator; presenceText += ((!_pair.IsVisible) ? "(Last) " : string.Empty) + "Mods Info" + Environment.NewLine; presenceText += "Files Size: " + UiSharedService.ByteToString(_pair.LastAppliedDataBytes, true); if (_pair.LastAppliedApproximateVRAMBytes >= 0) { + _VRAMBytes = _pair.LastAppliedApproximateVRAMBytes; presenceText += Environment.NewLine + "Approx. VRAM Usage: " + UiSharedService.ByteToString(_pair.LastAppliedApproximateVRAMBytes, true); } if (_pair.LastAppliedDataTris >= 0) diff --git a/MareSynchronos/UI/Components/GroupPanel.cs b/MareSynchronos/UI/Components/GroupPanel.cs index 067d591..10010ab 100644 --- a/MareSynchronos/UI/Components/GroupPanel.cs +++ b/MareSynchronos/UI/Components/GroupPanel.cs @@ -452,7 +452,16 @@ internal sealed class GroupPanel { ImGui.TextUnformatted("Visible"); ImGui.Separator(); - _uidDisplayHandler.RenderPairList(visibleUsers); + if (_mareConfig.Current.SortSyncshellsByVRAM) + { + List sortedVisibleUsers = visibleUsers.OrderBy(o=>o._VRAMBytes).ToList(); + _uidDisplayHandler.RenderPairList(sortedVisibleUsers); + } + else + { + _uidDisplayHandler.RenderPairList(visibleUsers); + + } } if (onlineUsers.Count > 0) diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index a6ae0bb..1b3788b 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -956,6 +956,7 @@ public class SettingsUi : WindowMediatorSubscriberBase _uiShared.BigText("UI"); var showCharacterNames = _configService.Current.ShowCharacterNames; var showVisibleSeparate = _configService.Current.ShowVisibleUsersSeparately; + var sortSyncshellByVRAM = _configService.Current.SortSyncshellsByVRAM; var showOfflineSeparate = _configService.Current.ShowOfflineUsersSeparately; var showProfiles = _configService.Current.ProfilesShow; var showNsfwProfiles = _configService.Current.ProfilesAllowNsfw; @@ -1074,7 +1075,12 @@ public class SettingsUi : WindowMediatorSubscriberBase _configService.Save(); } _uiShared.DrawHelpText("This will show all currently visible users in a special 'Visible' group in the main UI."); - + if (ImGui.Checkbox("Sort visible syncshell users by VRAM usage", ref sortSyncshellByVRAM)) + { + _configService.Current.SortSyncshellsByVRAM = sortSyncshellByVRAM; + _configService.Save(); + } + _uiShared.DrawHelpText("This will put users using the most VRAM in a syncshell at the top of the list."); if (ImGui.Checkbox("Show separate Offline group", ref showOfflineSeparate)) { _configService.Current.ShowOfflineUsersSeparately = showOfflineSeparate; diff --git a/MareSynchronos/packages.lock.json b/MareSynchronos/packages.lock.json index c478ce3..dc085cb 100644 --- a/MareSynchronos/packages.lock.json +++ b/MareSynchronos/packages.lock.json @@ -10,9 +10,9 @@ }, "DalamudPackager": { "type": "Direct", - "requested": "[13.0.0, )", - "resolved": "13.0.0", - "contentHash": "Mb3cUDSK/vDPQ8gQIeuCw03EMYrej1B4J44a1AvIJ9C759p9XeqdU9Hg4WgOmlnlPe0G7ILTD32PKSUpkQNa8w==" + "requested": "[13.1.0, )", + "resolved": "13.1.0", + "contentHash": "XdoNhJGyFby5M/sdcRhnc5xTop9PHy+H50PTWpzLhJugjB19EDBiHD/AsiDF66RETM+0qKUdJBZrNuebn7qswQ==" }, "DotNet.ReproducibleBuilds": { "type": "Direct", @@ -22,11 +22,11 @@ }, "Downloader": { "type": "Direct", - "requested": "[3.3.4, )", - "resolved": "3.3.4", - "contentHash": "/M/c80e1L0WW1XrLSSiQhgFxk8rrfbpWiWDn2CeBg1tPD393Neo+v184yG/ThyhE9rrNp36yCrugiCmEbRf+VQ==", + "requested": "[4.0.3, )", + "resolved": "4.0.3", + "contentHash": "Vg1+UqPDstpMw2CKXV9XvB8jKHC95KQfbqPxQXvOMRMFnTov4Ixvvw6GZV5DXLnKuL2sfnmVYX9CaQtcURia1Q==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.1" + "Microsoft.Extensions.Logging.Abstractions": "8.0.3" } }, "Glamourer.Api": { @@ -55,11 +55,28 @@ "System.IO.Pipelines": "6.0.3" } }, + "MessagePack": { + "type": "Direct", + "requested": "[3.1.4, )", + "resolved": "3.1.4", + "contentHash": "BH0wlHWmVoZpbAPyyt2Awbq30C+ZsS3eHSkYdnyUAbqVJ22fAJDzn2xTieBeoT5QlcBzp61vHcv878YJGfi3mg==", + "dependencies": { + "MessagePack.Annotations": "3.1.4", + "MessagePackAnalyzer": "3.1.4", + "Microsoft.NET.StringTools": "17.11.4" + } + }, + "MessagePack.Annotations": { + "type": "Direct", + "requested": "[3.1.4, )", + "resolved": "3.1.4", + "contentHash": "aVWrDAkCdqxwQsz/q0ldPh2EFn48M99YUzE9OvZjMq2RNLKz4o2z88iGFvSvbMqOWRweRvKPHBJZe22PRqzslQ==" + }, "Meziantou.Analyzer": { "type": "Direct", - "requested": "[2.0.212, )", - "resolved": "2.0.212", - "contentHash": "U91ktjjTRTccUs3Lk+hrLD9vW+2+lhnsOf4G1GpRSJi1pLn3uK5CU6wGP9Bmz1KlJs6Oz1GGoMhxQBoqQsmAuQ==" + "requested": "[2.0.213, )", + "resolved": "2.0.213", + "contentHash": "LHnFGBqhlBjbf8Uo4OIzGM0llRxFrIMuo/hP9oHq+aldS+28G4LqG12LK0co9b+S0yj1Vbf0rclDHN0Ji2DTkA==" }, "Microsoft.AspNetCore.SignalR.Client": { "type": "Direct", @@ -133,6 +150,12 @@ "Microsoft.IdentityModel.Tokens": "8.14.0" } }, + "System.IO.Pipelines": { + "type": "Direct", + "requested": "[9.0.8, )", + "resolved": "9.0.8", + "contentHash": "6vPmJt73mgUo1gzc/OcXlJvClz/2jxZ4TQPRfriVaLoGRH2mye530D9WHJYbFQRNMxF3PWCoeofsFdCyN7fLzA==" + }, "K4os.Compression.LZ4": { "type": "Transitive", "resolved": "1.3.8", @@ -143,19 +166,10 @@ "resolved": "1.0.8", "contentHash": "Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==" }, - "MessagePack": { + "MessagePackAnalyzer": { "type": "Transitive", - "resolved": "2.5.187", - "contentHash": "uW4j8m4Nc+2Mk5n6arOChavJ9bLjkis0qWASOj2h2OwmfINuzYv+mjCHUymrYhmyyKTu3N+ObtTXAY4uQ7jIhg==", - "dependencies": { - "MessagePack.Annotations": "2.5.187", - "Microsoft.NET.StringTools": "17.6.3" - } - }, - "MessagePack.Annotations": { - "type": "Transitive", - "resolved": "2.5.198", - "contentHash": "3U9OvqQGTra+Mz1k1zfNAScSdNHobnqtQ51qdMGUZppkNDZJl0X/igq6Qz5zDBLEZoYqZrFtZwFx6wBJHHI8BA==" + "resolved": "3.1.4", + "contentHash": "CTaSsN/liJ7MhLCAB7Z4ZLBNuVGCq9lt2BT/cbrc9vzGv89yK3CqIA+z9T19a11eQYl9etZHL6MQJgCqECRVpg==" }, "Microsoft.AspNetCore.Connections.Abstractions": { "type": "Transitive", @@ -499,19 +513,14 @@ }, "Microsoft.NET.StringTools": { "type": "Transitive", - "resolved": "17.6.3", - "contentHash": "N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA==" + "resolved": "17.11.4", + "contentHash": "mudqUHhNpeqIdJoUx2YDWZO/I9uEDYVowan89R6wsomfnUJQk6HteoQTlNjZDixhT2B4IXMkMtgZtoceIjLRmA==" }, "System.Diagnostics.EventLog": { "type": "Transitive", "resolved": "9.0.8", "contentHash": "gebRF3JLLJ76jz1CQpvwezNapZUjFq20JQsaGHzBH0DzlkHBLpdhwkOei9usiOkIGMwU/L0ALWpNe1JE+5/itw==" }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "6.0.3", - "contentHash": "ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==" - }, "System.Net.ServerSentEvents": { "type": "Transitive", "resolved": "9.0.8", @@ -525,7 +534,7 @@ "maresynchronos.api": { "type": "Project", "dependencies": { - "MessagePack.Annotations": "[2.5.198, )" + "MessagePack.Annotations": "[3.1.4, )" } } }