-
-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
coreinit: add stopwatch.h and stopwatchatomic.h (#370)
* coreinit: add stopwatch.h and stopwatchatomic.h * Formatting * correct function name
- Loading branch information
1 parent
ef057f1
commit 1da1402
Showing
3 changed files
with
160 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
||
/** @} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
||
/** @} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters