loader: always reload ExHeader for hb, after all
Caching exheader for applications launched through Home Menu has very little benefit, as UnregisterProgram is called a lot, and, for 3DSX, boot.3dsx/target 3DSX can be changed at any time.
This commit is contained in:
parent
ffbd8554d5
commit
0a6b6865ca
@ -11,7 +11,6 @@ extern u32 config, multiConfig, bootConfig;
|
|||||||
extern bool isN3DS, isSdMode;
|
extern bool isN3DS, isSdMode;
|
||||||
|
|
||||||
static u64 g_cached_programHandle;
|
static u64 g_cached_programHandle;
|
||||||
static u64 g_cached_hbldr3dsxTid;
|
|
||||||
static ExHeader_Info g_exheaderInfo;
|
static ExHeader_Info g_exheaderInfo;
|
||||||
|
|
||||||
typedef struct ContentPath {
|
typedef struct ContentPath {
|
||||||
@ -158,7 +157,7 @@ static Result loadCode(const ExHeader_Info *exhi, u64 programHandle, const prog_
|
|||||||
|
|
||||||
static inline bool IsHioId(u64 id)
|
static inline bool IsHioId(u64 id)
|
||||||
{
|
{
|
||||||
// FS load HIO titles at boot when it can. For HIO titles, title/programId and "program handle"
|
// FS loads HIO titles at boot when it can. For HIO titles, title/programId and "program handle"
|
||||||
// are the same thing, although some of them can be aliased with their "real" titleId (i.e. in ExHeader).
|
// are the same thing, although some of them can be aliased with their "real" titleId (i.e. in ExHeader).
|
||||||
|
|
||||||
if (id >> 32 == 0xFFFF0000u)
|
if (id >> 32 == 0xFFFF0000u)
|
||||||
@ -190,13 +189,9 @@ static Result GetProgramInfoImpl(ExHeader_Info *exheaderInfo, u64 programHandle)
|
|||||||
static Result GetProgramInfo(u64 programHandle)
|
static Result GetProgramInfo(u64 programHandle)
|
||||||
{
|
{
|
||||||
Result res = 0;
|
Result res = 0;
|
||||||
|
u64 cachedTitleId = g_exheaderInfo.aci.local_caps.title_id;
|
||||||
|
|
||||||
u64 cachedTid = g_exheaderInfo.aci.local_caps.title_id;
|
if (programHandle != g_cached_programHandle || hbldrIs3dsxTitle(cachedTitleId))
|
||||||
u64 hbldr3dsxTid = Luma_SharedConfig->hbldr_3dsx_tid;
|
|
||||||
bool hbTitleChanged = hbldr3dsxTid != g_cached_hbldr3dsxTid;
|
|
||||||
g_cached_hbldr3dsxTid = Luma_SharedConfig->hbldr_3dsx_tid;
|
|
||||||
|
|
||||||
if (programHandle != g_cached_programHandle || (hbldrIs3dsxTitle(cachedTid) && hbTitleChanged))
|
|
||||||
{
|
{
|
||||||
res = GetProgramInfoImpl(&g_exheaderInfo, programHandle);
|
res = GetProgramInfoImpl(&g_exheaderInfo, programHandle);
|
||||||
g_cached_programHandle = R_SUCCEEDED(res) ? programHandle : 0;
|
g_cached_programHandle = R_SUCCEEDED(res) ? programHandle : 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user