forked from suyu/suyu
kernel/svc: Implement TotalMemoryUsedWithoutMmHeap/TotalMemoryAvailableWithoutMmHeap
Given we don't currently implement the personal heap yet, the existing memory querying functions are essentially doing what the memory querying types introduced in 6.0.0 do. So, we can build the necessary machinery over the top of those and just use them as part of info types.
This commit is contained in:
parent
c1a8f684df
commit
3f87664d8f
3 changed files with 42 additions and 2 deletions
|
@ -72,10 +72,26 @@ SharedPtr<ResourceLimit> Process::GetResourceLimit() const {
|
||||||
return resource_limit;
|
return resource_limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u64 Process::GetTotalPhysicalMemoryAvailable() const {
|
||||||
|
return vm_manager.GetTotalPhysicalMemoryAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 Process::GetTotalPhysicalMemoryAvailableWithoutMmHeap() const {
|
||||||
|
// TODO: Subtract the personal heap size from this when the
|
||||||
|
// personal heap is implemented.
|
||||||
|
return GetTotalPhysicalMemoryAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
u64 Process::GetTotalPhysicalMemoryUsed() const {
|
u64 Process::GetTotalPhysicalMemoryUsed() const {
|
||||||
return vm_manager.GetCurrentHeapSize() + main_thread_stack_size + code_memory_size;
|
return vm_manager.GetCurrentHeapSize() + main_thread_stack_size + code_memory_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u64 Process::GetTotalPhysicalMemoryUsedWithoutMmHeap() const {
|
||||||
|
// TODO: Subtract the personal heap size from this when the
|
||||||
|
// personal heap is implemented.
|
||||||
|
return GetTotalPhysicalMemoryUsed();
|
||||||
|
}
|
||||||
|
|
||||||
void Process::RegisterThread(const Thread* thread) {
|
void Process::RegisterThread(const Thread* thread) {
|
||||||
thread_list.push_back(thread);
|
thread_list.push_back(thread);
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,9 +186,20 @@ public:
|
||||||
return random_entropy.at(index);
|
return random_entropy.at(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Retrieves the total physical memory available to this process in bytes.
|
||||||
|
u64 GetTotalPhysicalMemoryAvailable() const;
|
||||||
|
|
||||||
|
/// Retrieves the total physical memory available to this process in bytes,
|
||||||
|
/// without the size of the personal heap added to it.
|
||||||
|
u64 GetTotalPhysicalMemoryAvailableWithoutMmHeap() const;
|
||||||
|
|
||||||
/// Retrieves the total physical memory used by this process in bytes.
|
/// Retrieves the total physical memory used by this process in bytes.
|
||||||
u64 GetTotalPhysicalMemoryUsed() const;
|
u64 GetTotalPhysicalMemoryUsed() const;
|
||||||
|
|
||||||
|
/// Retrieves the total physical memory used by this process in bytes,
|
||||||
|
/// without the size of the personal heap added to it.
|
||||||
|
u64 GetTotalPhysicalMemoryUsedWithoutMmHeap() const;
|
||||||
|
|
||||||
/// Gets the list of all threads created with this process as their owner.
|
/// Gets the list of all threads created with this process as their owner.
|
||||||
const std::list<const Thread*>& GetThreadList() const {
|
const std::list<const Thread*>& GetThreadList() const {
|
||||||
return thread_list;
|
return thread_list;
|
||||||
|
|
|
@ -730,6 +730,9 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, u64 ha
|
||||||
PrivilegedProcessId = 19,
|
PrivilegedProcessId = 19,
|
||||||
// 5.0.0+
|
// 5.0.0+
|
||||||
UserExceptionContextAddr = 20,
|
UserExceptionContextAddr = 20,
|
||||||
|
// 6.0.0+
|
||||||
|
TotalPhysicalMemoryAvailableWithoutMmHeap = 21,
|
||||||
|
TotalPhysicalMemoryUsedWithoutMmHeap = 22,
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto info_id_type = static_cast<GetInfoType>(info_id);
|
const auto info_id_type = static_cast<GetInfoType>(info_id);
|
||||||
|
@ -750,7 +753,9 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, u64 ha
|
||||||
case GetInfoType::IsVirtualAddressMemoryEnabled:
|
case GetInfoType::IsVirtualAddressMemoryEnabled:
|
||||||
case GetInfoType::PersonalMmHeapUsage:
|
case GetInfoType::PersonalMmHeapUsage:
|
||||||
case GetInfoType::TitleId:
|
case GetInfoType::TitleId:
|
||||||
case GetInfoType::UserExceptionContextAddr: {
|
case GetInfoType::UserExceptionContextAddr:
|
||||||
|
case GetInfoType::TotalPhysicalMemoryAvailableWithoutMmHeap:
|
||||||
|
case GetInfoType::TotalPhysicalMemoryUsedWithoutMmHeap: {
|
||||||
if (info_sub_id != 0) {
|
if (info_sub_id != 0) {
|
||||||
return ERR_INVALID_ENUM_VALUE;
|
return ERR_INVALID_ENUM_VALUE;
|
||||||
}
|
}
|
||||||
|
@ -804,7 +809,7 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, u64 ha
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
|
|
||||||
case GetInfoType::TotalPhysicalMemoryAvailable:
|
case GetInfoType::TotalPhysicalMemoryAvailable:
|
||||||
*result = process->VMManager().GetTotalPhysicalMemoryAvailable();
|
*result = process->GetTotalPhysicalMemoryAvailable();
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
|
|
||||||
case GetInfoType::TotalPhysicalMemoryUsed:
|
case GetInfoType::TotalPhysicalMemoryUsed:
|
||||||
|
@ -825,6 +830,14 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, u64 ha
|
||||||
*result = 0;
|
*result = 0;
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
|
|
||||||
|
case GetInfoType::TotalPhysicalMemoryAvailableWithoutMmHeap:
|
||||||
|
*result = process->GetTotalPhysicalMemoryAvailable();
|
||||||
|
return RESULT_SUCCESS;
|
||||||
|
|
||||||
|
case GetInfoType::TotalPhysicalMemoryUsedWithoutMmHeap:
|
||||||
|
*result = process->GetTotalPhysicalMemoryUsedWithoutMmHeap();
|
||||||
|
return RESULT_SUCCESS;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue