mirror of
https://github.com/GreemDev/Ryujinx
synced 2024-12-22 20:06:33 +01:00
Linq.Any/Linq.FirstOrDefault are now faster than List.Exists/List.Find
This commit is contained in:
parent
8c2988375a
commit
3fd40ae5d7
10 changed files with 30 additions and 26 deletions
|
@ -8,6 +8,7 @@ using Ryujinx.Graphics.Texture;
|
||||||
using Ryujinx.Memory.Range;
|
using Ryujinx.Memory.Range;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Gpu.Image
|
namespace Ryujinx.Graphics.Gpu.Image
|
||||||
|
@ -998,7 +999,7 @@ namespace Ryujinx.Graphics.Gpu.Image
|
||||||
{
|
{
|
||||||
bool dataOverlaps = texture.DataOverlaps(overlap, compatibility);
|
bool dataOverlaps = texture.DataOverlaps(overlap, compatibility);
|
||||||
|
|
||||||
if (!overlap.IsView && dataOverlaps && !incompatibleOverlaps.Exists(incompatible => incompatible.Group == overlap.Group))
|
if (!overlap.IsView && dataOverlaps && !incompatibleOverlaps.Any(incompatible => incompatible.Group == overlap.Group))
|
||||||
{
|
{
|
||||||
incompatibleOverlaps.Add(new TextureIncompatibleOverlap(overlap.Group, compatibility));
|
incompatibleOverlaps.Add(new TextureIncompatibleOverlap(overlap.Group, compatibility));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ using Ryujinx.Memory.Range;
|
||||||
using Ryujinx.Memory.Tracking;
|
using Ryujinx.Memory.Tracking;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Gpu.Image
|
namespace Ryujinx.Graphics.Gpu.Image
|
||||||
|
@ -1555,7 +1556,7 @@ namespace Ryujinx.Graphics.Gpu.Image
|
||||||
/// <param name="copy">True if the overlap should register copy dependencies</param>
|
/// <param name="copy">True if the overlap should register copy dependencies</param>
|
||||||
public void RegisterIncompatibleOverlap(TextureIncompatibleOverlap other, bool copy)
|
public void RegisterIncompatibleOverlap(TextureIncompatibleOverlap other, bool copy)
|
||||||
{
|
{
|
||||||
if (!_incompatibleOverlaps.Exists(overlap => overlap.Group == other.Group))
|
if (!_incompatibleOverlaps.Any(overlap => overlap.Group == other.Group))
|
||||||
{
|
{
|
||||||
if (copy && other.Compatibility == TextureViewCompatibility.LayoutIncompatible)
|
if (copy && other.Compatibility == TextureViewCompatibility.LayoutIncompatible)
|
||||||
{
|
{
|
||||||
|
@ -1701,3 +1702,4 @@ namespace Ryujinx.Graphics.Gpu.Image
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -397,7 +397,7 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
if (locationList != null)
|
if (locationList != null)
|
||||||
{
|
{
|
||||||
LocationEntry entry =
|
LocationEntry entry =
|
||||||
locationList.ToList().Find(x => x.TitleId == titleId && x.ContentType == contentType);
|
locationList.ToList().FirstOrDefault(x => x.TitleId == titleId && x.ContentType == contentType);
|
||||||
|
|
||||||
if (entry.ContentPath != null)
|
if (entry.ContentPath != null)
|
||||||
{
|
{
|
||||||
|
@ -425,7 +425,7 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
{
|
{
|
||||||
LinkedList<LocationEntry> locationList = _locationEntries[storageId];
|
LinkedList<LocationEntry> locationList = _locationEntries[storageId];
|
||||||
|
|
||||||
return locationList.ToList().Find(x => x.TitleId == titleId && x.ContentType == contentType);
|
return locationList.ToList().FirstOrDefault(x => x.TitleId == titleId && x.ContentType == contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InstallFirmware(string firmwareSource)
|
public void InstallFirmware(string firmwareSource)
|
||||||
|
@ -720,7 +720,7 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
|
|
||||||
if (updateNcas.TryGetValue(SystemUpdateTitleId, out var ncaEntry))
|
if (updateNcas.TryGetValue(SystemUpdateTitleId, out var ncaEntry))
|
||||||
{
|
{
|
||||||
string metaPath = ncaEntry.Find(x => x.type == NcaContentType.Meta).path;
|
string metaPath = ncaEntry.FirstOrDefault(x => x.type == NcaContentType.Meta).path;
|
||||||
|
|
||||||
CnmtContentMetaEntry[] metaEntries = null;
|
CnmtContentMetaEntry[] metaEntries = null;
|
||||||
|
|
||||||
|
@ -756,7 +756,7 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
|
|
||||||
if (updateNcas.TryGetValue(SystemVersionTitleId, out var updateNcasItem))
|
if (updateNcas.TryGetValue(SystemVersionTitleId, out var updateNcasItem))
|
||||||
{
|
{
|
||||||
string versionEntry = updateNcasItem.Find(x => x.type != NcaContentType.Meta).path;
|
string versionEntry = updateNcasItem.FirstOrDefault(x => x.type != NcaContentType.Meta).path;
|
||||||
|
|
||||||
using Stream ncaStream = GetZipStream(archive.GetEntry(versionEntry));
|
using Stream ncaStream = GetZipStream(archive.GetEntry(versionEntry));
|
||||||
Nca nca = new(_virtualFileSystem.KeySet, ncaStream.AsStorage());
|
Nca nca = new(_virtualFileSystem.KeySet, ncaStream.AsStorage());
|
||||||
|
@ -775,9 +775,9 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
{
|
{
|
||||||
if (updateNcas.TryGetValue(metaEntry.TitleId, out ncaEntry))
|
if (updateNcas.TryGetValue(metaEntry.TitleId, out ncaEntry))
|
||||||
{
|
{
|
||||||
metaPath = ncaEntry.Find(x => x.type == NcaContentType.Meta).path;
|
metaPath = ncaEntry.FirstOrDefault(x => x.type == NcaContentType.Meta).path;
|
||||||
|
|
||||||
string contentPath = ncaEntry.Find(x => x.type != NcaContentType.Meta).path;
|
string contentPath = ncaEntry.FirstOrDefault(x => x.type != NcaContentType.Meta).path;
|
||||||
|
|
||||||
// Nintendo in 9.0.0, removed PPC and only kept the meta nca of it.
|
// Nintendo in 9.0.0, removed PPC and only kept the meta nca of it.
|
||||||
// This is a perfect valid case, so we should just ignore the missing content nca and continue.
|
// This is a perfect valid case, so we should just ignore the missing content nca and continue.
|
||||||
|
@ -916,8 +916,8 @@ namespace Ryujinx.HLE.FileSystem
|
||||||
{
|
{
|
||||||
if (updateNcas.TryGetValue(metaEntry.TitleId, out var ncaEntry))
|
if (updateNcas.TryGetValue(metaEntry.TitleId, out var ncaEntry))
|
||||||
{
|
{
|
||||||
string metaNcaPath = ncaEntry.Find(x => x.type == NcaContentType.Meta).path;
|
string metaNcaPath = ncaEntry.FirstOrDefault(x => x.type == NcaContentType.Meta).path;
|
||||||
string contentPath = ncaEntry.Find(x => x.type != NcaContentType.Meta).path;
|
string contentPath = ncaEntry.FirstOrDefault(x => x.type != NcaContentType.Meta).path;
|
||||||
|
|
||||||
// Nintendo in 9.0.0, removed PPC and only kept the meta nca of it.
|
// Nintendo in 9.0.0, removed PPC and only kept the meta nca of it.
|
||||||
// This is a perfect valid case, so we should just ignore the missing content nca and continue.
|
// This is a perfect valid case, so we should just ignore the missing content nca and continue.
|
||||||
|
|
|
@ -200,7 +200,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
|
||||||
|
|
||||||
WakeThreads(_condVarThreads, count, TryAcquireMutex, x => x.CondVarAddress == address);
|
WakeThreads(_condVarThreads, count, TryAcquireMutex, x => x.CondVarAddress == address);
|
||||||
|
|
||||||
if (!_condVarThreads.Exists(x => x.CondVarAddress == address))
|
if (!_condVarThreads.Any(x => x.CondVarAddress == address))
|
||||||
{
|
{
|
||||||
KernelTransfer.KernelToUser(address, 0);
|
KernelTransfer.KernelToUser(address, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ namespace Ryujinx.HLE.HOS
|
||||||
|
|
||||||
if (StrEquals(RomfsDir, modDir.Name))
|
if (StrEquals(RomfsDir, modDir.Name))
|
||||||
{
|
{
|
||||||
var modData = modMetadata.Mods.Find(x => modDir.FullName.Contains(x.Path));
|
var modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path));
|
||||||
var enabled = modData?.Enabled ?? true;
|
var enabled = modData?.Enabled ?? true;
|
||||||
|
|
||||||
mods.RomfsDirs.Add(mod = new Mod<DirectoryInfo>(dir.Name, modDir, enabled));
|
mods.RomfsDirs.Add(mod = new Mod<DirectoryInfo>(dir.Name, modDir, enabled));
|
||||||
|
@ -176,7 +176,7 @@ namespace Ryujinx.HLE.HOS
|
||||||
}
|
}
|
||||||
else if (StrEquals(ExefsDir, modDir.Name))
|
else if (StrEquals(ExefsDir, modDir.Name))
|
||||||
{
|
{
|
||||||
var modData = modMetadata.Mods.Find(x => modDir.FullName.Contains(x.Path));
|
var modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path));
|
||||||
var enabled = modData?.Enabled ?? true;
|
var enabled = modData?.Enabled ?? true;
|
||||||
|
|
||||||
mods.ExefsDirs.Add(mod = new Mod<DirectoryInfo>(dir.Name, modDir, enabled));
|
mods.ExefsDirs.Add(mod = new Mod<DirectoryInfo>(dir.Name, modDir, enabled));
|
||||||
|
@ -275,7 +275,7 @@ namespace Ryujinx.HLE.HOS
|
||||||
var fsFile = new FileInfo(Path.Combine(applicationDir.FullName, RomfsContainer));
|
var fsFile = new FileInfo(Path.Combine(applicationDir.FullName, RomfsContainer));
|
||||||
if (fsFile.Exists)
|
if (fsFile.Exists)
|
||||||
{
|
{
|
||||||
var modData = modMetadata.Mods.Find(x => fsFile.FullName.Contains(x.Path));
|
var modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path));
|
||||||
var enabled = modData == null || modData.Enabled;
|
var enabled = modData == null || modData.Enabled;
|
||||||
|
|
||||||
mods.RomfsContainers.Add(new Mod<FileInfo>($"<{applicationDir.Name} RomFs>", fsFile, enabled));
|
mods.RomfsContainers.Add(new Mod<FileInfo>($"<{applicationDir.Name} RomFs>", fsFile, enabled));
|
||||||
|
@ -284,7 +284,7 @@ namespace Ryujinx.HLE.HOS
|
||||||
fsFile = new FileInfo(Path.Combine(applicationDir.FullName, ExefsContainer));
|
fsFile = new FileInfo(Path.Combine(applicationDir.FullName, ExefsContainer));
|
||||||
if (fsFile.Exists)
|
if (fsFile.Exists)
|
||||||
{
|
{
|
||||||
var modData = modMetadata.Mods.Find(x => fsFile.FullName.Contains(x.Path));
|
var modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path));
|
||||||
var enabled = modData == null || modData.Enabled;
|
var enabled = modData == null || modData.Enabled;
|
||||||
|
|
||||||
mods.ExefsContainers.Add(new Mod<FileInfo>($"<{applicationDir.Name} ExeFs>", fsFile, enabled));
|
mods.ExefsContainers.Add(new Mod<FileInfo>($"<{applicationDir.Name} ExeFs>", fsFile, enabled));
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
|
@ -104,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
||||||
|
|
||||||
if (virtualAmiiboFile.ApplicationAreas.Exists(item => item.ApplicationAreaId == applicationAreaId))
|
if (virtualAmiiboFile.ApplicationAreas.Any(item => item.ApplicationAreaId == applicationAreaId))
|
||||||
{
|
{
|
||||||
_openedApplicationAreaId = applicationAreaId;
|
_openedApplicationAreaId = applicationAreaId;
|
||||||
|
|
||||||
|
@ -133,7 +134,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
||||||
|
|
||||||
if (virtualAmiiboFile.ApplicationAreas.Exists(item => item.ApplicationAreaId == applicationAreaId))
|
if (virtualAmiiboFile.ApplicationAreas.Any(item => item.ApplicationAreaId == applicationAreaId))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +154,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp
|
||||||
{
|
{
|
||||||
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId);
|
||||||
|
|
||||||
if (virtualAmiiboFile.ApplicationAreas.Exists(item => item.ApplicationAreaId == _openedApplicationAreaId))
|
if (virtualAmiiboFile.ApplicationAreas.Any(item => item.ApplicationAreaId == _openedApplicationAreaId))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < virtualAmiiboFile.ApplicationAreas.Count; i++)
|
for (int i = 0; i < virtualAmiiboFile.ApplicationAreas.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -321,7 +321,7 @@ namespace Ryujinx.Input.HLE
|
||||||
{
|
{
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
{
|
{
|
||||||
return _inputConfig.Find(x => x.PlayerIndex == (Common.Configuration.Hid.PlayerIndex)index);
|
return _inputConfig.FirstOrDefault(x => x.PlayerIndex == (Common.Configuration.Hid.PlayerIndex)index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,7 +332,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
|
|
||||||
private void SelectLastScannedAmiibo()
|
private void SelectLastScannedAmiibo()
|
||||||
{
|
{
|
||||||
AmiiboApi scanned = _amiiboList.Find(amiibo => amiibo.GetId() == LastScannedAmiiboId);
|
AmiiboApi scanned = _amiiboList.FirstOrDefault(amiibo => amiibo.GetId() == LastScannedAmiiboId);
|
||||||
|
|
||||||
SeriesSelectedIndex = AmiiboSeries.IndexOf(scanned.AmiiboSeries);
|
SeriesSelectedIndex = AmiiboSeries.IndexOf(scanned.AmiiboSeries);
|
||||||
AmiiboSelectedIndex = AmiiboList.IndexOf(scanned);
|
AmiiboSelectedIndex = AmiiboList.IndexOf(scanned);
|
||||||
|
@ -393,7 +393,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
|
|
||||||
AmiiboApi selected = _amiibos[_amiiboSelectedIndex];
|
AmiiboApi selected = _amiibos[_amiiboSelectedIndex];
|
||||||
|
|
||||||
string imageUrl = _amiiboList.Find(amiibo => amiibo.Equals(selected)).Image;
|
string imageUrl = _amiiboList.FirstOrDefault(amiibo => amiibo.Equals(selected)).Image;
|
||||||
|
|
||||||
StringBuilder usageStringBuilder = new();
|
StringBuilder usageStringBuilder = new();
|
||||||
|
|
||||||
|
|
|
@ -287,7 +287,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||||
|
|
||||||
private void LoadConfiguration(InputConfig inputConfig = null)
|
private void LoadConfiguration(InputConfig inputConfig = null)
|
||||||
{
|
{
|
||||||
Config = inputConfig ?? ConfigurationState.Instance.Hid.InputConfig.Value.Find(inputConfig => inputConfig.PlayerIndex == _playerId);
|
Config = inputConfig ?? ConfigurationState.Instance.Hid.InputConfig.Value.FirstOrDefault(inputConfig => inputConfig.PlayerIndex == _playerId);
|
||||||
|
|
||||||
if (Config is StandardKeyboardInputConfig keyboardInputConfig)
|
if (Config is StandardKeyboardInputConfig keyboardInputConfig)
|
||||||
{
|
{
|
||||||
|
@ -597,7 +597,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||||
}
|
}
|
||||||
else if (activeDevice.Type == DeviceType.Controller)
|
else if (activeDevice.Type == DeviceType.Controller)
|
||||||
{
|
{
|
||||||
bool isNintendoStyle = Devices.ToList().Find(x => x.Id == activeDevice.Id).Name.Contains("Nintendo");
|
bool isNintendoStyle = Devices.ToList().FirstOrDefault(x => x.Id == activeDevice.Id).Name.Contains("Nintendo");
|
||||||
|
|
||||||
string id = activeDevice.Id.Split(" ")[0];
|
string id = activeDevice.Id.Split(" ")[0];
|
||||||
|
|
||||||
|
@ -823,11 +823,11 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||||
|
|
||||||
newConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value);
|
newConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value);
|
||||||
|
|
||||||
newConfig.Remove(newConfig.Find(x => x == null));
|
newConfig.Remove(newConfig.FirstOrDefault(x => x == null));
|
||||||
|
|
||||||
if (Device == 0)
|
if (Device == 0)
|
||||||
{
|
{
|
||||||
newConfig.Remove(newConfig.Find(x => x.PlayerIndex == this.PlayerId));
|
newConfig.Remove(newConfig.FirstOrDefault(x => x.PlayerIndex == this.PlayerId));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -354,7 +354,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||||
|
|
||||||
if (_launchApplicationId != null)
|
if (_launchApplicationId != null)
|
||||||
{
|
{
|
||||||
applicationData = applications.Find(application => application.IdString == _launchApplicationId);
|
applicationData = applications.FirstOrDefault(application => application.IdString == _launchApplicationId);
|
||||||
|
|
||||||
if (applicationData != null)
|
if (applicationData != null)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue