mirror of
https://github.com/devkitPro/wut.git
synced 2026-03-21 17:34:47 -05:00
coreinit: add stopwatch.h and stopwatchatomic.h (#370)
* coreinit: add stopwatch.h and stopwatchatomic.h * Formatting * correct function name
This commit is contained in:
parent
ef057f145b
commit
1da14020ee
93
include/coreinit/stopwatch.h
Normal file
93
include/coreinit/stopwatch.h
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
#pragma once
|
||||
|
||||
#include <wut.h>
|
||||
#include "spinlock.h"
|
||||
#include "time.h"
|
||||
|
||||
/**
|
||||
* \defgroup coreinit_stopwatch Lock-based Stopwatch
|
||||
* \ingroup coreinit
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSStopwatch OSStopwatch;
|
||||
|
||||
struct OSStopwatch
|
||||
{
|
||||
//! Lock
|
||||
OSSpinLock lock;
|
||||
//! Tag
|
||||
const char *name;
|
||||
//! Number of times the stopwatch has been stopped
|
||||
uint32_t hitCount;
|
||||
//! Total time from first start to last stop
|
||||
OSTime totalTime;
|
||||
//! Minimum time between stops
|
||||
OSTime minTime;
|
||||
//! Maximum time between stops
|
||||
OSTime maxTime;
|
||||
//! Last time the watch was started
|
||||
OSTime startTime;
|
||||
//! Whether the stopwatch is running
|
||||
BOOL running;
|
||||
WUT_PADDING_BYTES(0x4);
|
||||
};
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x00, lock);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x10, name);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x14, hitCount);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x18, totalTime);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x20, minTime);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x28, maxTime);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x30, startTime);
|
||||
WUT_CHECK_OFFSET(OSStopwatch, 0x38, running);
|
||||
WUT_CHECK_SIZE(OSStopwatch, 0x40);
|
||||
|
||||
/**
|
||||
* Initialises the stopwatch,
|
||||
* stopwatches must be initialized before any other stopwatch functions are used
|
||||
*/
|
||||
void
|
||||
OSInitStopwatch(OSStopwatch *stopwatch,
|
||||
const char *name);
|
||||
|
||||
/**
|
||||
* Resets all stopwatch data
|
||||
*/
|
||||
void
|
||||
OSResetStopwatch(OSStopwatch *stopwatch);
|
||||
|
||||
/**
|
||||
* Starts the stopwatch.
|
||||
* if already started, will update the start time without resetting the total time
|
||||
*/
|
||||
void
|
||||
OSStartStopwatch(OSStopwatch *stopwatch);
|
||||
|
||||
/**
|
||||
* Stops the stopwatch and increments hit count.
|
||||
* Nothing happens if the stopwatch has already been stopped
|
||||
*/
|
||||
void
|
||||
OSStopStopwatch(OSStopwatch *stopwatch);
|
||||
|
||||
/**
|
||||
* Returns the total time the stopwatch has been running
|
||||
*/
|
||||
OSTime
|
||||
OSCheckStopwatch(OSStopwatch *stopwatch);
|
||||
|
||||
/**
|
||||
* Dumps stopwatch info to the Cafe OS warn log
|
||||
*/
|
||||
void
|
||||
OSDumpStopwatch(OSStopwatch *stopwatch);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
65
include/coreinit/stopwatchatomic.h
Normal file
65
include/coreinit/stopwatchatomic.h
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
#pragma once
|
||||
|
||||
#include <wut.h>
|
||||
#include "time.h"
|
||||
|
||||
/**
|
||||
* \defgroup coreinit_stopwatchatomic Atomic Stopwatch
|
||||
* \ingroup coreinit
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSStopWatchAtomic OSStopWatchAtomic;
|
||||
|
||||
struct OSStopWatchAtomic
|
||||
{
|
||||
//! Last time the watch was started
|
||||
OSTime startTime;
|
||||
//! Total time from first start to last stop
|
||||
OSTime totalTime;
|
||||
};
|
||||
WUT_CHECK_OFFSET(OSStopWatchAtomic, 0x00, startTime);
|
||||
WUT_CHECK_OFFSET(OSStopWatchAtomic, 0x08, totalTime);
|
||||
WUT_CHECK_SIZE(OSStopWatchAtomic, 0x10);
|
||||
|
||||
/**
|
||||
* Start the stopwatch.
|
||||
* Only updates the start time
|
||||
* \returns total time on stopwatch
|
||||
*/
|
||||
OSTime
|
||||
OSStopWatchStart(OSStopWatchAtomic *stopWatch);
|
||||
|
||||
/**
|
||||
* Stop the stopwatch.
|
||||
* Resets the start time to 0
|
||||
* \returns total time on stopwatch
|
||||
*/
|
||||
OSTime
|
||||
OSStopWatchStop(OSStopWatchAtomic *stopWatch);
|
||||
|
||||
/**
|
||||
* Get the current time on the stopwatch
|
||||
* \returns current time on stopwatch
|
||||
*/
|
||||
OSTime
|
||||
OSStopWatchLap(OSStopWatchAtomic *stopWatch);
|
||||
|
||||
|
||||
/**
|
||||
* Stops and resets the stop watch.
|
||||
* Clears start and total time
|
||||
* \returns previous total time
|
||||
*/
|
||||
OSTime
|
||||
OSStopWatchReset(OSStopWatchAtomic *stopWatch);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
|
|
@ -51,6 +51,8 @@
|
|||
#include <coreinit/semaphore.h>
|
||||
#include <coreinit/smd.h>
|
||||
#include <coreinit/spinlock.h>
|
||||
#include <coreinit/stopwatch.h>
|
||||
#include <coreinit/stopwatchatomic.h>
|
||||
#include <coreinit/systeminfo.h>
|
||||
#include <coreinit/taskqueue.h>
|
||||
#include <coreinit/thread.h>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user