fix(core): change incorrect usage of "deadline" in Rust timer code

pull/3686/merge^2
matejcik 9 months ago
parent b75dbe18e4
commit 424e42dd38

@ -466,7 +466,7 @@ impl EventCtx {
pub const ANIM_FRAME_TIMER: TimerToken = TimerToken(1);
/// How long into the future we should schedule the animation frame timer.
const ANIM_FRAME_DEADLINE: Duration = Duration::from_millis(18);
const ANIM_FRAME_DURATION: Duration = Duration::from_millis(18);
// 0 == `TimerToken::INVALID`,
// 1 == `Self::ANIM_FRAME_TIMER`.
@ -508,10 +508,10 @@ impl EventCtx {
self.paint_requested = true;
}
/// Request a timer event to be delivered after `deadline` elapses.
pub fn request_timer(&mut self, deadline: Duration) -> TimerToken {
/// Request a timer event to be delivered after `duration` elapses.
pub fn request_timer(&mut self, duration: Duration) -> TimerToken {
let token = self.next_timer_token();
self.register_timer(token, deadline);
self.register_timer(token, duration);
token
}
@ -519,7 +519,7 @@ impl EventCtx {
pub fn request_anim_frame(&mut self) {
if !self.anim_frame_scheduled {
self.anim_frame_scheduled = true;
self.register_timer(Self::ANIM_FRAME_TIMER, Self::ANIM_FRAME_DEADLINE);
self.register_timer(Self::ANIM_FRAME_TIMER, Self::ANIM_FRAME_DURATION);
}
}
@ -553,8 +553,8 @@ impl EventCtx {
self.root_repaint_requested = false;
}
fn register_timer(&mut self, token: TimerToken, deadline: Duration) {
if self.timers.push((token, deadline)).is_err() {
fn register_timer(&mut self, token: TimerToken, duration: Duration) {
if self.timers.push((token, duration)).is_err() {
// The timer queue is full, this would be a development error in the layout
// layer. Let's panic in the debug env.
#[cfg(feature = "ui_debug")]

@ -133,7 +133,7 @@ impl LayoutObj {
}
/// Timer callback is expected to be a callable object of the following
/// form: `def timer(token: int, deadline_in_ms: int)`.
/// form: `def timer(token: int, duration_ms: int)`.
fn obj_set_timer_fn(&self, timer_fn: Obj) {
self.inner.borrow_mut().timer_fn = timer_fn;
}
@ -162,13 +162,13 @@ impl LayoutObj {
// painting by now, and we're prepared for a paint pass.
// Drain any pending timers into the callback.
while let Some((token, deadline)) = inner.event_ctx.pop_timer() {
while let Some((token, duration)) = inner.event_ctx.pop_timer() {
let token = token.try_into();
let deadline = deadline.try_into();
if let (Ok(token), Ok(deadline)) = (token, deadline) {
inner.timer_fn.call_with_n_args(&[token, deadline])?;
let duration = duration.try_into();
if let (Ok(token), Ok(duration)) = (token, duration) {
inner.timer_fn.call_with_n_args(&[token, duration])?;
} else {
// Failed to convert token or deadline into `Obj`, skip.
// Failed to convert token or duration into `Obj`, skip.
}
}

@ -86,7 +86,7 @@ impl MultiTapKeyboard {
// If the key has more then one character, we need to set it as pending, so we
// can cycle through on the repeated clicks. We also request a timer so we can
// reset the pending state after a deadline.
// reset the pending state after it elapses.
//
// Note: It might seem that we should make sure to `request_paint` in case we
// progress into a pending state (to display the pending marker), but such

@ -1648,7 +1648,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// """Attach a timer setter function.
///
/// The layout object can call the timer setter with two arguments,
/// `token` and `deadline`. When `deadline` is reached, the layout object
/// `token` and `duration`. When `duration` elapses, the layout object
/// expects a callback to `self.timer(token)`.
/// """
///
@ -1670,7 +1670,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// """Callback for the timer set by `attach_timer_fn`.
///
/// This function should be called by the executor after the corresponding
/// deadline is reached.
/// duration elapses.
/// """
///
/// def paint(self) -> bool:

@ -467,7 +467,7 @@ class LayoutObj(Generic[T]):
def attach_timer_fn(self, fn: Callable[[int, int], None]) -> None:
"""Attach a timer setter function.
The layout object can call the timer setter with two arguments,
`token` and `deadline`. When `deadline` is reached, the layout object
`token` and `duration`. When `duration` elapses, the layout object
expects a callback to `self.timer(token)`.
"""
if utils.USE_TOUCH:
@ -483,7 +483,7 @@ class LayoutObj(Generic[T]):
def timer(self, token: int) -> T | None:
"""Callback for the timer set by `attach_timer_fn`.
This function should be called by the executor after the corresponding
deadline is reached.
duration elapses.
"""
def paint(self) -> bool:
"""Paint the layout object on screen.

@ -279,7 +279,7 @@ class Layout(Generic[T]):
# Turn the brightness on.
backlight_fade(self.BACKLIGHT_LEVEL)
def _set_timer(self, token: int, deadline: int) -> None:
def _set_timer(self, token: int, duration: int) -> None:
"""Timer callback for Rust layouts."""
async def timer_task() -> None:
@ -296,7 +296,8 @@ class Layout(Generic[T]):
assert token not in self.timers
task = timer_task()
self.timers[token] = task
loop.schedule(task, token, deadline)
deadline = utime.ticks_add(utime.ticks_ms(), duration)
loop.schedule(task, deadline=deadline)
def _emit_message(self, msg: Any) -> None:
"""Process a message coming out of the Rust layout. Set is as a result and shut

@ -28,7 +28,7 @@ if __debug__:
def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None:
# Simple drawing not supported for layouts that set timers.
def dummy_set_timer(token: int, deadline: int) -> None:
def dummy_set_timer(token: int, duration: int) -> None:
raise RuntimeError
layout.attach_timer_fn(dummy_set_timer)

@ -28,7 +28,7 @@ if __debug__:
def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None:
# Simple drawing not supported for layouts that set timers.
def dummy_set_timer(token: int, deadline: int) -> None:
def dummy_set_timer(token: int, duration: int) -> None:
raise RuntimeError
layout.attach_timer_fn(dummy_set_timer)

Loading…
Cancel
Save