Просмотр исходного кода

misc: Avoid copy of ApplicationControlProperty (#4849)

Avoid more giant copy when passing it around.
Mary 2 лет назад
Родитель
Сommit
0e06aace45

+ 1 - 1
src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs

@@ -116,7 +116,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions
                 device,
                 device.System.KernelContext,
                 metaLoader,
-                nacpData.Value,
+                nacpData,
                 enablePtc,
                 allowCodeMemoryForJit,
                 programName,

+ 1 - 1
src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs

@@ -209,7 +209,7 @@ namespace Ryujinx.HLE.Loaders.Processes
             ProcessResult processResult = ProcessLoaderHelper.LoadNsos(_device,
                                                                        _device.System.KernelContext,
                                                                        dummyExeFs.GetNpdm(),
-                                                                       nacpData.Value,
+                                                                       nacpData,
                                                                        diskCacheEnabled: false,
                                                                        allowCodeMemoryForJit: true,
                                                                        programName,

+ 2 - 2
src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs

@@ -219,7 +219,7 @@ namespace Ryujinx.HLE.Loaders.Processes
             Switch device,
             KernelContext context,
             MetaLoader metaLoader,
-            ApplicationControlProperty applicationControlProperties,
+            BlitStruct<ApplicationControlProperty> applicationControlProperties,
             bool diskCacheEnabled,
             bool allowCodeMemoryForJit,
             string name,
@@ -355,7 +355,7 @@ namespace Ryujinx.HLE.Loaders.Processes
                 context.Device.System.TickSource,
                 context.Device.Gpu,
                 $"{programId:x16}",
-                applicationControlProperties.DisplayVersionString.ToString(),
+                applicationControlProperties.Value.DisplayVersionString.ToString(),
                 diskCacheEnabled,
                 codeStart,
                 codeSize);

+ 13 - 12
src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs

@@ -1,4 +1,5 @@
-using LibHac.Loader;
+using LibHac.Common;
+using LibHac.Loader;
 using LibHac.Ns;
 using Ryujinx.Common.Logging;
 using Ryujinx.Cpu;
@@ -11,7 +12,7 @@ namespace Ryujinx.HLE.Loaders.Processes
 {
     public class ProcessResult
     {
-        public static ProcessResult Failed => new(null, new ApplicationControlProperty(), false, false, null, 0, 0, 0, TitleLanguage.AmericanEnglish);
+        public static ProcessResult Failed => new(null, new BlitStruct<ApplicationControlProperty>(1), false, false, null, 0, 0, 0, TitleLanguage.AmericanEnglish);
 
         private readonly byte _mainThreadPriority;
         private readonly uint _mainThreadStackSize;
@@ -31,15 +32,15 @@ namespace Ryujinx.HLE.Loaders.Processes
         public readonly bool   AllowCodeMemoryForJit;
 
         public ProcessResult(
-            MetaLoader                 metaLoader,
-            ApplicationControlProperty applicationControlProperties,
-            bool                       diskCacheEnabled,
-            bool                       allowCodeMemoryForJit,
-            IDiskCacheLoadState        diskCacheLoadState,
-            ulong                      pid,
-            byte                       mainThreadPriority,
-            uint                       mainThreadStackSize,
-            TitleLanguage              titleLanguage)
+            MetaLoader                             metaLoader,
+            BlitStruct<ApplicationControlProperty> applicationControlProperties,
+            bool                                   diskCacheEnabled,
+            bool                                   allowCodeMemoryForJit,
+            IDiskCacheLoadState                    diskCacheLoadState,
+            ulong                                  pid,
+            byte                                   mainThreadPriority,
+            uint                                   mainThreadStackSize,
+            TitleLanguage                          titleLanguage)
         {
             _mainThreadPriority  = mainThreadPriority;
             _mainThreadStackSize = mainThreadStackSize;
@@ -48,7 +49,7 @@ namespace Ryujinx.HLE.Loaders.Processes
             ProcessId          = pid;
 
             MetaLoader                   = metaLoader;
-            ApplicationControlProperties = applicationControlProperties;
+            ApplicationControlProperties = applicationControlProperties.Value;
 
             if (metaLoader is not null)
             {