65 Commits

Author SHA1 Message Date
Hajime Hoshi 0fc8f397a2 internal/clock: use atomic.Int64 for TPS 2025-11-17 01:51:37 +09:00
Hajime Hoshi a4bfa6cb15 all: use Go 1.21's min/max builtin functions 2024-09-12 01:01:05 +09:00
bsski b8df1217c3 all: fix typos (#2864) 2023-12-17 22:42:34 +09:00
Hajime Hoshi f129c23393 all: update URLs in comments 2022-11-21 01:46:50 +09:00
Hajime Hoshi 55adc2113e internal/clock: Update -> UpdateFrame 2022-07-12 13:18:49 +09:00
Hajime Hoshi d4e1787154 internal/clock: refactoring 2022-07-12 12:42:16 +09:00
Hajime Hoshi c5e952d196 internal/ui: refactoring: reduce members from globalState 2022-07-12 12:35:07 +09:00
Hajime Hoshi 2fc691f661 internal/clock: rename CurrentFPS/TPS -> ActualFPS/TPS 2022-04-14 00:57:47 +09:00
Hajime Hoshi f25dda1318 internal/clock: force to sync the timer when TPS is updated 2022-04-14 00:56:37 +09:00
Hajime Hoshi c28bcc26fc internal/clock: Rename UncappedTPS -> SyncWithFPS
Closes #1726
2021-07-22 22:46:24 +09:00
Hajime Hoshi b6364c46fe internal/clock: Misspelling 2021-04-24 23:24:11 +09:00
Hajime Hoshi 2534b78755 internal/clock: Simplify the logic to calculate tick per frame
Updates #1444
Updates #1597
2021-04-24 23:06:27 +09:00
Hajime Hoshi 2e6ecc766d internal/clock: Integrate 'now' implementations
The Go runtime already uses QueryPerformanceCounter at runtime.nanotime.
2021-04-24 22:32:47 +09:00
Hajime Hoshi 011a524ac7 internal/clock: Update comments 2021-04-24 22:10:00 +09:00
Hajime Hoshi 59567993c2 clock: Bug fix: High TPS didn't work well due to the timer precision
When the TPS is high (e.g., 300), the count might be unreliable
since the timer might not be precise on some machines. In this
case, calculate the factor and multiply the count by it.

Fixes #1444
2020-12-21 00:23:29 +09:00
Hajime Hoshi 53d0e1eae0 clock: Add comment 2020-12-20 21:59:09 +09:00
Hajime Hoshi aef104203d clock: Refactoring 2020-12-20 21:54:28 +09:00
Hajime Hoshi 4215678f4c clock: Bug fix: Syncing with the system clock happens more often than expected
When the specified TPS is too big (e.g., 300), the time threshold
to determine whether the clock should be synchronized with the
system clock can be too small, and the decision can be wrong too
often. To fix this, prepare another time assuming the TPS was 60
and use the bigger one.

Fixes #1443
2020-12-20 21:23:40 +09:00
Hajime Hoshi 547621ddad clock: Bug fix: The game was frozen when TPS is <= 4
Fixes #1417
2020-12-13 15:14:15 +09:00
Hajime Hoshi e7a3d29af5 clock: Update a comment 2020-10-17 16:08:41 +09:00
Hajime Hoshi 9b0d95cfcf clock: Integrate now.go and now_js.go
The monotonic timer already uses performance.now, then we don't
have to have the original code.
2020-04-02 01:52:00 +09:00
Hajime Hoshi 7bb2895415 clock: Avoid calling (js.Value).Get() for performance 2019-09-28 01:47:48 +09:00
Hajime Hoshi f9cec31bf6 clock: Assert that now() must be monotonic
This change adds panics to ensure that now() must be monotonic.

Bug: #875
2019-05-24 22:59:02 +09:00
Hajime Hoshi 22dfefab5b clock: Fix coments 2019-05-24 03:18:47 +09:00
Hajime Hoshi bbcee77b02 clock: Use time.Since for monotonic timer
Fixes #875
2019-05-24 03:16:43 +09:00
Hajime Hoshi 9c1b760016 clock: Bug fix: The timer should continue even when the clock is adjusted
If the clock is reversed:
* lastSystemTime should be reset with the current time
* FPS/TPS calculation state should be reset
2019-05-24 02:24:32 +09:00
Hajime Hoshi 0eb5ef0141 clock: Remove unused variables 2019-05-24 02:20:23 +09:00
Hajime Hoshi c2bc6408a3 clock: Bug fix: Do not pacic even when the clock is reversed
It is theoreticaly possible to change the clock. Ebiten should not
panic whatever the clock time is.
2019-05-24 02:14:24 +09:00
Hajime Hoshi 0bed5a96d5 clock: Better URL to explain being monotonic 2019-05-09 02:45:43 +09:00
Hajime Hoshi 009fa9accd clock: Ensure that now() is monotonic 2019-05-09 02:44:14 +09:00
Hajime Hoshi c65d035cc9 clock: Bug fix: Use float64 not to overflow
Bug: #862
2019-05-09 01:14:48 +09:00
Hajime Hoshi 10fb5e33be Replace GopherWasm with syscall/js
Fixes #857
2019-05-01 17:28:00 +09:00
Hajime Hoshi 3ac1996f9d clock: Avoid overflow by using time duration on Windows 2019-01-27 17:31:30 +09:00
Hajime Hoshi 3691083cee clock: Use a more precise timer on Windows
This change is based on @silbinarywolf's change:
https://github.com/hajimehoshi/ebiten/issues/798#issuecomment-457822280

Fixes #798
2019-01-26 21:16:35 +09:00
Hajime Hoshi a6b3f761f8 audio: Refactoring: Remove dependency on clock package 2019-01-10 00:59:38 +09:00
Hajime Hoshi 3d24ffe3e0 clock: Bug fix: function registerd OnStart might not be called
Fixes #645
2018-09-03 00:35:55 +09:00
Hajime Hoshi 0593b77eb8 ui: Implement CurrentTPS 2018-07-18 02:11:00 +09:00
Hajime Hoshi 3a8ca5ad73 ui: Implement TPS/SetTPS
Fixes #605
Fixes #321
2018-07-17 01:58:00 +09:00
Hajime Hoshi 93f8c76310 internal/clock: Remove unused variables 2018-07-17 00:35:51 +09:00
Hajime Hoshi 408cc1e833 internal/clock: Refactoring
Update now returns 0 when tps is 0, and 1 when tps is negative.
2018-07-17 00:29:10 +09:00
Hajime Hoshi 88e6768a30 Use the term 'TPS' ticks per second 2018-07-16 04:36:47 +09:00
Hajime Hoshi bbb777eecc internal/clock: Use constant time to detect if the game is delayed too much 2018-07-16 03:02:55 +09:00
Hajime Hoshi 18ec1d8265 internal/clock: Update takes FPS 2018-07-16 01:03:23 +09:00
Hajime Hoshi 6e51d31524 Use new GopherWasm API (#634)
I plan to merge this right after
https://github.com/gopherjs/gopherwasm/pull/3 is merged.
2018-06-30 00:02:15 +09:00
Hajime Hoshi a9359e4ef8 Use GopherJS/GopherWasm 2018-06-24 16:10:24 +09:00
Hajime Hoshi faaf391619 audio: Give up syncing audio timer and game timer (#617)
Syncing was already incomplete (e.g. decoding takes more than one
frame and delays can happen in this case). Giving up syncing audio
timer and game timer should not affect the game experience so much.
Instead, clock implementation will be much simpler.
2018-05-27 00:30:12 +09:00
Hajime Hoshi 5976e4bbbc audio: More intellegent suspending/resuming (#617)
Before this change, the audio is suspended when the game stops for
1/12[s]. However, as game often stops for more than 1/12[s]
especially on mobiles, this implemntation caused some audio
glitches.

This change fixes this problem by re-implementing suspending/
resumeing audio by detecting the window is active/focused or not.
2018-05-26 23:31:04 +09:00
Hajime Hoshi 2ec075004a clock: Use gopherwasm 2018-05-25 01:14:31 +09:00
Hajime Hoshi 92631e64ed Remove internal/sync
nosync package for GopherJS is problematic since nosync's mutex
assumes that Lock call is never duplicated, which is not true in
actual applications.

See also #603.
2018-05-09 23:41:08 +09:00
Hajime Hoshi d8c0d88960 clock: Add comments 2018-01-07 21:12:25 +09:00