mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
Added appletGetProgramTotalActiveTime.
This commit is contained in:
parent
2b84eaeaed
commit
a5e4609be3
@ -533,6 +533,13 @@ Result appletSetWirelessPriorityMode(AppletWirelessPriorityMode mode);
|
|||||||
*/
|
*/
|
||||||
Result appletSetAlbumImageTakenNotificationEnabled(bool flag);
|
Result appletSetAlbumImageTakenNotificationEnabled(bool flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the total time in nanoseconds that the current process was actively running (not suspended), relative to when \ref appletInitialize was last used.
|
||||||
|
* @note Only available with [6.0.0+].
|
||||||
|
* @param[out] activeTime Output nanoseconds value.
|
||||||
|
*/
|
||||||
|
Result appletGetProgramTotalActiveTime(u64 *activeTime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sets the Application AlbumUserData.
|
* @brief Sets the Application AlbumUserData.
|
||||||
* @note Only available with [8.0.0+].
|
* @note Only available with [8.0.0+].
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "result.h"
|
#include "result.h"
|
||||||
#include "arm/atomics.h"
|
#include "arm/atomics.h"
|
||||||
|
#include "arm/counter.h"
|
||||||
#include "kernel/ipc.h"
|
#include "kernel/ipc.h"
|
||||||
#include "kernel/tmem.h"
|
#include "kernel/tmem.h"
|
||||||
#include "kernel/event.h"
|
#include "kernel/event.h"
|
||||||
@ -62,6 +63,11 @@ static u32 g_appletRecordingInitialized;
|
|||||||
static TransferMemory g_appletCopyrightTmem;
|
static TransferMemory g_appletCopyrightTmem;
|
||||||
static bool g_appletCopyrightInitialized;
|
static bool g_appletCopyrightInitialized;
|
||||||
|
|
||||||
|
static Event g_appletSuspendedTickEvent;
|
||||||
|
static u64 g_appletInitTickBase;
|
||||||
|
static u64 g_appletSuspendedTick;
|
||||||
|
static bool g_appletSuspendedTickInitialized;
|
||||||
|
|
||||||
static Event g_appletLibraryAppletLaunchableEvent;
|
static Event g_appletLibraryAppletLaunchableEvent;
|
||||||
|
|
||||||
static AppletThemeColorType g_appletThemeColorType = AppletThemeColorType_Default;
|
static AppletThemeColorType g_appletThemeColorType = AppletThemeColorType_Default;
|
||||||
@ -92,6 +98,9 @@ static Result _appletSelfExit(void);
|
|||||||
|
|
||||||
static Result _appletExitProcessAndReturn(void);
|
static Result _appletExitProcessAndReturn(void);
|
||||||
|
|
||||||
|
static Result _appletGetAccumulatedSuspendedTickValue(u64 *tick);
|
||||||
|
static Result _appletGetAccumulatedSuspendedTickChangedEvent(Event *out_event);
|
||||||
|
|
||||||
Result appletInitialize(void)
|
Result appletInitialize(void)
|
||||||
{
|
{
|
||||||
atomicIncrement64(&g_refCnt);
|
atomicIncrement64(&g_refCnt);
|
||||||
@ -203,6 +212,13 @@ Result appletInitialize(void)
|
|||||||
if (R_SUCCEEDED(rc))
|
if (R_SUCCEEDED(rc))
|
||||||
rc = ipcQueryPointerBufferSize(g_appletISelfController.handle, &g_appletISelfController_ptrbufsize);
|
rc = ipcQueryPointerBufferSize(g_appletISelfController.handle, &g_appletISelfController_ptrbufsize);
|
||||||
|
|
||||||
|
Result rc2 = _appletGetAccumulatedSuspendedTickChangedEvent(&g_appletSuspendedTickEvent);
|
||||||
|
if (R_SUCCEEDED(rc2)) {
|
||||||
|
g_appletInitTickBase = armGetSystemTick();
|
||||||
|
g_appletSuspendedTick = 0;
|
||||||
|
g_appletSuspendedTickInitialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
// ICommonStateGetter::GetEventHandle
|
// ICommonStateGetter::GetEventHandle
|
||||||
if (R_SUCCEEDED(rc))
|
if (R_SUCCEEDED(rc))
|
||||||
rc = _appletGetEvent(&g_appletICommonStateGetter, &g_appletMessageEvent, 0, false);
|
rc = _appletGetEvent(&g_appletICommonStateGetter, &g_appletMessageEvent, 0, false);
|
||||||
@ -332,6 +348,11 @@ void appletExit(void)
|
|||||||
|
|
||||||
eventClose(&g_appletMessageEvent);
|
eventClose(&g_appletMessageEvent);
|
||||||
|
|
||||||
|
if (g_appletSuspendedTickInitialized) {
|
||||||
|
eventClose(&g_appletSuspendedTickEvent);
|
||||||
|
g_appletSuspendedTickInitialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
serviceClose(&g_appletIDebugFunctions);
|
serviceClose(&g_appletIDebugFunctions);
|
||||||
serviceClose(&g_appletIDisplayController);
|
serviceClose(&g_appletIDisplayController);
|
||||||
serviceClose(&g_appletIAudioController);
|
serviceClose(&g_appletIAudioController);
|
||||||
@ -2376,6 +2397,39 @@ Result appletSetAlbumImageTakenNotificationEnabled(bool flag) {
|
|||||||
return _appletCmdInBool(&g_appletISelfController, flag, 100);
|
return _appletCmdInBool(&g_appletISelfController, flag, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Result _appletGetAccumulatedSuspendedTickValue(u64 *tick) {
|
||||||
|
if (hosversionBefore(6,0,0))
|
||||||
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
|
||||||
|
return _appletCmdNoInOut64(&g_appletISelfController, tick, 90);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Result _appletGetAccumulatedSuspendedTickChangedEvent(Event *out_event) {
|
||||||
|
if (hosversionBefore(6,0,0))
|
||||||
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
|
||||||
|
return _appletGetEvent(&g_appletISelfController, out_event, 91, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result appletGetProgramTotalActiveTime(u64 *activeTime) {
|
||||||
|
if (!g_appletSuspendedTickInitialized)
|
||||||
|
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||||
|
|
||||||
|
Result rc=0;
|
||||||
|
u64 suspendedTick = 0;
|
||||||
|
|
||||||
|
while (R_SUCCEEDED(eventWait(&g_appletSuspendedTickEvent, 0))) {
|
||||||
|
rc = _appletGetAccumulatedSuspendedTickValue(&suspendedTick);
|
||||||
|
if (R_FAILED(rc)) return rc;
|
||||||
|
|
||||||
|
if (suspendedTick > g_appletSuspendedTick) g_appletSuspendedTick = suspendedTick;
|
||||||
|
}
|
||||||
|
|
||||||
|
*activeTime = armTicksToNs(armGetSystemTick() - g_appletInitTickBase - g_appletSuspendedTick);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
Result appletSetApplicationAlbumUserData(const void* buffer, size_t size) {
|
Result appletSetApplicationAlbumUserData(const void* buffer, size_t size) {
|
||||||
if (hosversionBefore(8,0,0))
|
if (hosversionBefore(8,0,0))
|
||||||
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
Loading…
Reference in New Issue
Block a user