Caching local network info and using an event handler to invalidate as needed (improves menu slow down issue in FE3H) (#2761)
* Update IGeneralService.cs Fix IPV4 local ip related frame drop in fire emblem by rewriting [CommandHipc(12)] * Fix IPV4 Local IP Slowdown & Style Fixes fix a missing space * Remove unnecessary line * Fix for hardcoding which index to use * Replace argument with empty string. By sending an empty string to Dns.GetHostAddresses("") you get back localhost info only. * Add caching, undo change in GetCurrentIpAddress Implement caching and revert the GetCurrentIP() function, speed improvements still present. * Remove unnecessary using * Syntax fixes and removing extra lines Requested changes by AcK77 * Properly unsubscribe from event handler Adds an unsubscribe in the dispose section of IGeneralService
This commit is contained in:
parent
e5ad1dfa48
commit
73feac5819
1 changed files with 23 additions and 0 deletions
|
@ -14,6 +14,9 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
{
|
{
|
||||||
private GeneralServiceDetail _generalServiceDetail;
|
private GeneralServiceDetail _generalServiceDetail;
|
||||||
|
|
||||||
|
private IPInterfaceProperties _targetPropertiesCache = null;
|
||||||
|
private UnicastIPAddressInformation _targetAddressInfoCache = null;
|
||||||
|
|
||||||
public IGeneralService()
|
public IGeneralService()
|
||||||
{
|
{
|
||||||
_generalServiceDetail = new GeneralServiceDetail
|
_generalServiceDetail = new GeneralServiceDetail
|
||||||
|
@ -22,6 +25,8 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
IsAnyInternetRequestAccepted = true // NOTE: Why not accept any internet request?
|
IsAnyInternetRequestAccepted = true // NOTE: Why not accept any internet request?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(LocalInterfaceCacheHandler);
|
||||||
|
|
||||||
GeneralServiceManager.Add(_generalServiceDetail);
|
GeneralServiceManager.Add(_generalServiceDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,6 +170,11 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
return (null, null);
|
return (null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_targetPropertiesCache != null && _targetAddressInfoCache != null)
|
||||||
|
{
|
||||||
|
return (_targetPropertiesCache, _targetAddressInfoCache);
|
||||||
|
}
|
||||||
|
|
||||||
IPInterfaceProperties targetProperties = null;
|
IPInterfaceProperties targetProperties = null;
|
||||||
UnicastIPAddressInformation targetAddressInfo = null;
|
UnicastIPAddressInformation targetAddressInfo = null;
|
||||||
|
|
||||||
|
@ -194,13 +204,26 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_targetPropertiesCache = targetProperties;
|
||||||
|
_targetAddressInfoCache = targetAddressInfo;
|
||||||
|
|
||||||
return (targetProperties, targetAddressInfo);
|
return (targetProperties, targetAddressInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LocalInterfaceCacheHandler(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Logger.Info?.Print(LogClass.ServiceNifm, $"NetworkAddress changed, invalidating cached data.");
|
||||||
|
|
||||||
|
_targetPropertiesCache = null;
|
||||||
|
_targetAddressInfoCache = null;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool isDisposing)
|
protected override void Dispose(bool isDisposing)
|
||||||
{
|
{
|
||||||
if (isDisposing)
|
if (isDisposing)
|
||||||
{
|
{
|
||||||
|
NetworkChange.NetworkAddressChanged -= LocalInterfaceCacheHandler;
|
||||||
|
|
||||||
GeneralServiceManager.Remove(_generalServiceDetail.ClientId);
|
GeneralServiceManager.Remove(_generalServiceDetail.ClientId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue