Compare commits

..

No commits in common. "7f61dfdb8dde7a46f6856a96c4de95a104ddc405" and "7f4450f930d9bc141c777e32fd1c6ec5cbfef6e8" have entirely different histories.

11 changed files with 30 additions and 38 deletions

View File

@ -21,8 +21,8 @@
#define AMS_PM_I_INFORMATION_INTERFACE_INTERFACE_INFO(C, H) \ #define AMS_PM_I_INFORMATION_INTERFACE_INTERFACE_INFO(C, H) \
AMS_SF_METHOD_INFO(C, H, 0, Result, GetProgramId, (sf::Out<ncm::ProgramId> out, os::ProcessId process_id), (out, process_id)) \ AMS_SF_METHOD_INFO(C, H, 0, Result, GetProgramId, (sf::Out<ncm::ProgramId> out, os::ProcessId process_id), (out, process_id)) \
AMS_SF_METHOD_INFO(C, H, 1, Result, GetAppletResourceLimitCurrentValue, (sf::Out<pm::ResourceLimitValue> out), (out)) \ AMS_SF_METHOD_INFO(C, H, 1, Result, GetAppletCurrentResourceLimitValues, (sf::Out<pm::ResourceLimitValues> out), (out)) \
AMS_SF_METHOD_INFO(C, H, 2, Result, GetAppletResourceLimitPeakValue, (sf::Out<pm::ResourceLimitValue> out), (out)) \ AMS_SF_METHOD_INFO(C, H, 2, Result, GetAppletPeakResourceLimitValues, (sf::Out<pm::ResourceLimitValues> out), (out)) \
AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessId, (sf::Out<os::ProcessId> out, ncm::ProgramId program_id), (out, program_id)) \ AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessId, (sf::Out<os::ProcessId> out, ncm::ProgramId program_id), (out, program_id)) \
AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereHasLaunchedBootProgram, (sf::Out<bool> out, ncm::ProgramId program_id), (out, program_id)) \ AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereHasLaunchedBootProgram, (sf::Out<bool> out, ncm::ProgramId program_id), (out, program_id)) \
AMS_SF_METHOD_INFO(C, H, 65002, Result, AtmosphereGetProcessInfo, (sf::Out<ncm::ProgramLocation> out_loc, sf::Out<cfg::OverrideStatus> out_status, os::ProcessId process_id), (out_loc, out_status, process_id)) AMS_SF_METHOD_INFO(C, H, 65002, Result, AtmosphereGetProcessInfo, (sf::Out<ncm::ProgramLocation> out_loc, sf::Out<cfg::OverrideStatus> out_status, os::ProcessId process_id), (out_loc, out_status, process_id))

View File

@ -29,8 +29,8 @@ namespace ams::pm::info {
Result GetProcessId(os::ProcessId *out_process_id, ncm::ProgramId program_id); Result GetProcessId(os::ProcessId *out_process_id, ncm::ProgramId program_id);
Result HasLaunchedBootProgram(bool *out, ncm::ProgramId program_id); Result HasLaunchedBootProgram(bool *out, ncm::ProgramId program_id);
Result GetAppletResourceLimitCurrentValue(pm::ResourceLimitValue *out); Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out);
Result GetAppletResourceLimitPeakValue(pm::ResourceLimitValue *out); Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out);
Result GetProcessInfo(ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id); Result GetProcessInfo(ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id);

View File

@ -52,7 +52,7 @@ namespace ams::pm {
LaunchFlagsDeprecated_SignalOnStart = (1 << 5), LaunchFlagsDeprecated_SignalOnStart = (1 << 5),
}; };
struct ResourceLimitValue { struct ResourceLimitValues {
u64 physical_memory; u64 physical_memory;
u32 thread_count; u32 thread_count;
u32 event_count; u32 event_count;

View File

@ -28,13 +28,13 @@ namespace ams::pm::info {
R_RETURN(pminfoAtmosphereGetProcessId(reinterpret_cast<u64 *>(out_process_id), static_cast<u64>(program_id))); R_RETURN(pminfoAtmosphereGetProcessId(reinterpret_cast<u64 *>(out_process_id), static_cast<u64>(program_id)));
} }
Result GetAppletResourceLimitCurrentValue(pm::ResourceLimitValue *out) { Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out) {
static_assert(sizeof(pm::ResourceLimitValue) == sizeof(::PmResourceLimitValues)); static_assert(sizeof(pm::ResourceLimitValues) == sizeof(::PmResourceLimitValues));
R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out))); R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
} }
Result GetAppletResourceLimitPeakValue(pm::ResourceLimitValue *out) { Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out) {
static_assert(sizeof(pm::ResourceLimitValue) == sizeof(::PmResourceLimitValues)); static_assert(sizeof(pm::ResourceLimitValues) == sizeof(::PmResourceLimitValues));
R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out))); R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
} }

View File

@ -719,12 +719,12 @@ namespace ams::pm::impl {
R_RETURN(resource::BoostSystemThreadResourceLimit()); R_RETURN(resource::BoostSystemThreadResourceLimit());
} }
Result GetAppletResourceLimitCurrentValue(pm::ResourceLimitValue *out) { Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out) {
R_RETURN(resource::GetResourceLimitCurrentValue(ResourceLimitGroup_Applet, out)); R_RETURN(resource::GetCurrentResourceLimitValues(ResourceLimitGroup_Applet, out));
} }
Result GetAppletResourceLimitPeakValue(pm::ResourceLimitValue *out) { Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out) {
R_RETURN(resource::GetResourceLimitPeakValue(ResourceLimitGroup_Applet, out)); R_RETURN(resource::GetPeakResourceLimitValues(ResourceLimitGroup_Applet, out));
} }
Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource) { Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource) {

View File

@ -52,8 +52,8 @@ namespace ams::pm::impl {
Result BoostSystemMemoryResourceLimit(u64 boost_size); Result BoostSystemMemoryResourceLimit(u64 boost_size);
Result BoostApplicationThreadResourceLimit(); Result BoostApplicationThreadResourceLimit();
Result BoostSystemThreadResourceLimit(); Result BoostSystemThreadResourceLimit();
Result GetAppletResourceLimitCurrentValue(pm::ResourceLimitValue *out); Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out);
Result GetAppletResourceLimitPeakValue(pm::ResourceLimitValue *out); Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out);
Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource); Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource);
Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size); Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size);

View File

@ -170,18 +170,10 @@ namespace ams::pm::resource {
} }
void WaitApplicationMemoryAvailable() { void WaitApplicationMemoryAvailable() {
/* Get firmware version. */
const auto fw_ver = hos::GetVersion();
/* On 15.0.0+, pm considers application memory to be available if there is exactly 96 MB outstanding. */
/* This is probably because this corresponds to the gameplay-recording memory. */
constexpr u64 AllowedUsedApplicationMemory = 96_MB;
/* Wait for memory to be available. */
u64 value = 0; u64 value = 0;
while (true) { while (true) {
R_ABORT_UNLESS(svc::GetSystemInfo(&value, svc::SystemInfoType_UsedPhysicalMemorySize, svc::InvalidHandle, svc::PhysicalMemorySystemInfo_Application)); R_ABORT_UNLESS(svc::GetSystemInfo(&value, svc::SystemInfoType_UsedPhysicalMemorySize, svc::InvalidHandle, svc::PhysicalMemorySystemInfo_Application));
if (value == 0 || (fw_ver >= hos::Version_15_0_0 && value == AllowedUsedApplicationMemory)) { if (value == 0) {
break; break;
} }
os::SleepThread(TimeSpan::FromMilliSeconds(1)); os::SleepThread(TimeSpan::FromMilliSeconds(1));
@ -210,7 +202,7 @@ namespace ams::pm::resource {
} }
template<auto GetResourceLimitValueImpl> template<auto GetResourceLimitValueImpl>
ALWAYS_INLINE Result GetResourceLimitValuesImpl(ResourceLimitGroup group, pm::ResourceLimitValue *out) { ALWAYS_INLINE Result GetResourceLimitValuesImpl(ResourceLimitGroup group, pm::ResourceLimitValues *out) {
/* Sanity check group. */ /* Sanity check group. */
AMS_ABORT_UNLESS(group < ResourceLimitGroup_Count); AMS_ABORT_UNLESS(group < ResourceLimitGroup_Count);
@ -459,15 +451,15 @@ namespace ams::pm::resource {
} }
} }
Result GetResourceLimitCurrentValue(ResourceLimitGroup group, pm::ResourceLimitValue *out) { Result GetCurrentResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out) {
R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitCurrentValue>(group, out)); R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitCurrentValue>(group, out));
} }
Result GetResourceLimitPeakValue(ResourceLimitGroup group, pm::ResourceLimitValue *out) { Result GetPeakResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out) {
R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitPeakValue>(group, out)); R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitPeakValue>(group, out));
} }
Result GetResourceLimitLimitValue(ResourceLimitGroup group, pm::ResourceLimitValue *out) { Result GetLimitResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out) {
R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitLimitValue>(group, out)); R_RETURN(GetResourceLimitValuesImpl<::ams::svc::GetResourceLimitLimitValue>(group, out));
} }

View File

@ -31,9 +31,9 @@ namespace ams::pm::resource {
void WaitResourceAvailable(const ldr::ProgramInfo *info); void WaitResourceAvailable(const ldr::ProgramInfo *info);
Result GetResourceLimitCurrentValue(ResourceLimitGroup group, pm::ResourceLimitValue *out); Result GetCurrentResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out);
Result GetResourceLimitPeakValue(ResourceLimitGroup group, pm::ResourceLimitValue *out); Result GetPeakResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out);
Result GetResourceLimitLimitValue(ResourceLimitGroup group, pm::ResourceLimitValue *out); Result GetLimitResourceLimitValues(ResourceLimitGroup group, pm::ResourceLimitValues *out);
Result GetResourceLimitValues(s64 *out_cur, s64 *out_lim, ResourceLimitGroup group, svc::LimitableResource resource); Result GetResourceLimitValues(s64 *out_cur, s64 *out_lim, ResourceLimitGroup group, svc::LimitableResource resource);

View File

@ -33,12 +33,12 @@ namespace ams::pm {
R_RETURN(impl::GetProgramId(out.GetPointer(), process_id)); R_RETURN(impl::GetProgramId(out.GetPointer(), process_id));
} }
Result InformationService::GetAppletResourceLimitCurrentValue(sf::Out<pm::ResourceLimitValue> out) { Result InformationService::GetAppletCurrentResourceLimitValues(sf::Out<pm::ResourceLimitValues> out) {
R_RETURN(impl::GetAppletResourceLimitCurrentValue(out.GetPointer())); R_RETURN(impl::GetAppletCurrentResourceLimitValues(out.GetPointer()));
} }
Result InformationService::GetAppletResourceLimitPeakValue(sf::Out<pm::ResourceLimitValue> out) { Result InformationService::GetAppletPeakResourceLimitValues(sf::Out<pm::ResourceLimitValues> out) {
R_RETURN(impl::GetAppletResourceLimitPeakValue(out.GetPointer())); R_RETURN(impl::GetAppletPeakResourceLimitValues(out.GetPointer()));
} }
/* Atmosphere extension commands. */ /* Atmosphere extension commands. */

View File

@ -22,8 +22,8 @@ namespace ams::pm {
public: public:
/* Actual command implementations. */ /* Actual command implementations. */
Result GetProgramId(sf::Out<ncm::ProgramId> out, os::ProcessId process_id); Result GetProgramId(sf::Out<ncm::ProgramId> out, os::ProcessId process_id);
Result GetAppletResourceLimitCurrentValue(sf::Out<pm::ResourceLimitValue> out); Result GetAppletCurrentResourceLimitValues(sf::Out<pm::ResourceLimitValues> out);
Result GetAppletResourceLimitPeakValue(sf::Out<pm::ResourceLimitValue> out); Result GetAppletPeakResourceLimitValues(sf::Out<pm::ResourceLimitValues> out);
/* Atmosphere extension commands. */ /* Atmosphere extension commands. */
Result AtmosphereGetProcessId(sf::Out<os::ProcessId> out, ncm::ProgramId program_id); Result AtmosphereGetProcessId(sf::Out<os::ProcessId> out, ncm::ProgramId program_id);