Bug report UE5.5 / 5.6 Call Function GetAsyncLoadPercentage(PackageName) ,The return value is incorrect(return -1)

1.Call Funtion :

COREUOBJECT_API int32 LoadPackageAsync(const FString& InName, FLoadPackageAsyncDelegate InCompletionDelegate, TAsyncLoadPriority InPackagePriority = 0, EPackageFlags InPackageFlags = PKG_None, int32 InPIEInstanceID = INDEX_NONE);

InName is a map asset.for example InName = “Maps/TestMap”

2.Call the function GetAsyncLoadPercentage(InName) before the asset loading is completed.

It was functioning properly from 4.27 to 5.4, but from 5.5 to 5.6 it would only return -1.

5.5 and 5.6it will call:

float FAsyncLoadingThread2::GetAsyncLoadPercentage(const FName& PackageName)
{
	float LoadPercentage = -1.0f;
	/*
	FAsyncPackage2* Package = FindAsyncPackage(PackageName);
	if (Package)
	{
		LoadPercentage = Package->GetLoadPercentage();
	}
	*/
	return LoadPercentage;
}

It was invoked from 4.27 to 5.4 as follows:

loat FAsyncLoadingThread::GetAsyncLoadPercentage(const FName& PackageName)
{
	float LoadPercentage = -1.0f;
	{
#if THREADSAFE_UOBJECTS
		FScopeLock LockAsyncPackages(&AsyncPackagesCritical);
#endif
		FAsyncPackage* Package = AsyncPackageNameLookup.FindRef(PackageName);
		if (Package)
		{
			LoadPercentage = Package->GetLoadPercentage();
		}
	}
	if (LoadPercentage < 0.0f)
	{
#if THREADSAFE_UOBJECTS
		FScopeLock LockLoadedPackages(&LoadedPackagesCritical);
#endif
		FAsyncPackage* Package = LoadedPackagesNameLookup.FindRef(PackageName);
		if (Package)
		{
			LoadPercentage = Package->GetLoadPercentage();
		}
	}
	if (LoadPercentage < 0.0f)
	{
		checkSlow(IsInGameThread());
		FAsyncPackage* Package = LoadedPackagesToProcessNameLookup.FindRef(PackageName);
		if (Package)
		{
			LoadPercentage = Package->GetLoadPercentage();
		}
	}

	return LoadPercentage;
}
1 Like