aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Harris <bjh21@bjh21.me.uk>2022-11-13 00:15:00 +0000
committerBen Harris <bjh21@bjh21.me.uk>2022-11-13 00:15:00 +0000
commit5a225bf585ba302dbae1eca567b2070c67ea2981 (patch)
tree6daa8edb2575e78006d2254634ef52d0d205d7ad
parent5a90dd9312ed2568d1d7f4b2f728614c29ee0f85 (diff)
downloadpuzzles-5a225bf585ba302dbae1eca567b2070c67ea2981.zip
puzzles-5a225bf585ba302dbae1eca567b2070c67ea2981.tar.gz
puzzles-5a225bf585ba302dbae1eca567b2070c67ea2981.tar.bz2
puzzles-5a225bf585ba302dbae1eca567b2070c67ea2981.tar.xz
js: Substantially simplify timer code
The C code in the Emscripten front-end already keeps a timer_active variable to ensure that the timer can be activated only when it's inactive, and deactivated only when it's active. Adjusting the JavaScript side to rely on this makes the code much simpler. The only oddity is that it now requests a new animation frame before calling the callback so that it's ready to be cancelled if the callback decides to deactivate the timer.
-rw-r--r--emcclib.js30
-rw-r--r--emccpre.js3
2 files changed, 11 insertions, 22 deletions
diff --git a/emcclib.js b/emcclib.js
index 274da30..88ca4ac 100644
--- a/emcclib.js
+++ b/emcclib.js
@@ -188,22 +188,18 @@ mergeInto(LibraryManager.library, {
* void js_activate_timer();
*
* Start calling the C timer_callback() function every frame.
+ * The C code ensures that the activate and deactivate functions
+ * are called in a sensible order.
*/
js_activate_timer: function() {
- if (!timer_active) {
- timer_reference = performance.now();
- var frame = function(now) {
- timer = null;
- timer_callback((now - timer_reference) / 1000.0);
- /* The callback may have deactivated the timer. */
- if (timer_active) {
- timer_reference = now;
- timer = window.requestAnimationFrame(frame);
- }
- }
- timer_active = true;
+ timer_reference = performance.now();
+ var frame = function(now) {
timer = window.requestAnimationFrame(frame);
- }
+ // The callback might call js_deactivate_timer() below.
+ timer_callback((now - timer_reference) / 1000.0);
+ timer_reference = now;
+ };
+ timer = window.requestAnimationFrame(frame);
},
/*
@@ -212,13 +208,7 @@ mergeInto(LibraryManager.library, {
* Stop calling the C timer_callback() function every frame.
*/
js_deactivate_timer: function() {
- if (timer_active) {
- timer_active = false;
- if (timer !== null) {
- window.cancelAnimationFrame(timer);
- timer = null;
- }
- }
+ window.cancelAnimationFrame(timer);
},
/*
diff --git a/emccpre.js b/emccpre.js
index 16833f5..666d37d 100644
--- a/emccpre.js
+++ b/emccpre.js
@@ -90,8 +90,7 @@ var midpoint_test_str = "ABCDEFGHIKLMNOPRSTUVWXYZ0123456789";
var midpoint_cache = [];
// Variables used by js_activate_timer() and js_deactivate_timer().
-var timer = null;
-var timer_active = false;
+var timer;
var timer_reference;
// void timer_callback(double tplus);