1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-01-09 06:50:58 +00:00

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

This commit is contained in:
matejcik 2023-09-24 16:03:41 +02:00 committed by matejcik
parent 9431f2a77d
commit 2661dbb3d1
11 changed files with 33 additions and 33 deletions

View File

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

View File

@ -173,7 +173,7 @@ impl LayoutObjInner {
} }
/// Timer callback is expected to be a callable object of the following /// 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(&mut self, timer_fn: Obj) { fn obj_set_timer_fn(&mut self, timer_fn: Obj) {
self.timer_fn = timer_fn; self.timer_fn = timer_fn;
} }
@ -226,13 +226,13 @@ impl LayoutObjInner {
// painting by now, and we're prepared for a paint pass. // painting by now, and we're prepared for a paint pass.
// Drain any pending timers into the callback. // Drain any pending timers into the callback.
while let Some((token, deadline)) = self.event_ctx.pop_timer() { while let Some((token, duration)) = self.event_ctx.pop_timer() {
let token = token.try_into(); let token = token.try_into();
let deadline = deadline.try_into(); let duration = duration.try_into();
if let (Ok(token), Ok(deadline)) = (token, deadline) { if let (Ok(token), Ok(duration)) = (token, duration) {
self.timer_fn.call_with_n_args(&[token, deadline])?; self.timer_fn.call_with_n_args(&[token, duration])?;
} else { } else {
// Failed to convert token or deadline into `Obj`, skip. // Failed to convert token or duration into `Obj`, skip.
} }
} }

View File

@ -90,7 +90,7 @@ impl MultiTapKeyboard {
// If the key has more then one character, we need to set it as pending, so we // 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 // 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 a timeout.
// //
// Note: It might seem that we should make sure to `request_paint` in case we // 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 // progress into a pending state (to display the pending marker), but such

View File

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

View File

@ -88,7 +88,7 @@ impl MultiTapKeyboard {
// If the key has more then one character, we need to set it as pending, so we // 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 // 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 // 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 // progress into a pending state (to display the pending marker), but such

View File

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

View File

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

View File

@ -46,8 +46,8 @@ class RustLayout(ui.Layout):
def __del__(self): def __del__(self):
self.layout.__del__() self.layout.__del__()
def set_timer(self, token: int, deadline: int) -> None: def set_timer(self, token: int, duration_ms: int) -> None:
self.timer.schedule(deadline, token) self.timer.schedule(duration_ms, token)
def request_complete_repaint(self) -> None: def request_complete_repaint(self) -> None:
msg = self.layout.request_complete_repaint() msg = self.layout.request_complete_repaint()
@ -270,7 +270,7 @@ class RustLayout(ui.Layout):
def draw_simple(layout: Any) -> None: def draw_simple(layout: Any) -> None:
# Simple drawing not supported for layouts that set timers. # 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 raise RuntimeError
layout.attach_timer_fn(dummy_set_timer, None) layout.attach_timer_fn(dummy_set_timer, None)

View File

@ -40,7 +40,7 @@ class RustProgress:
ui.refresh() ui.refresh()
ui.backlight_fade(ui.BacklightLevels.NORMAL) ui.backlight_fade(ui.BacklightLevels.NORMAL)
def set_timer(self, token: int, deadline: int) -> None: def set_timer(self, token: int, duration_ms: int) -> None:
raise RuntimeError # progress layouts should not set timers raise RuntimeError # progress layouts should not set timers
def report(self, value: int, description: str | None = None): def report(self, value: int, description: str | None = None):

View File

@ -47,8 +47,8 @@ class RustLayout(LayoutParentType[T]):
def __del__(self): def __del__(self):
self.layout.__del__() self.layout.__del__()
def set_timer(self, token: int, deadline: int) -> None: def set_timer(self, token: int, duration_ms: int) -> None:
self.timer.schedule(deadline, token) self.timer.schedule(duration_ms, token)
def request_complete_repaint(self) -> None: def request_complete_repaint(self) -> None:
msg = self.layout.request_complete_repaint() msg = self.layout.request_complete_repaint()
@ -308,7 +308,7 @@ class RustLayout(LayoutParentType[T]):
def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None:
# Simple drawing not supported for layouts that set timers. # 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 raise RuntimeError
layout.attach_timer_fn(dummy_set_timer, None) layout.attach_timer_fn(dummy_set_timer, None)

View File

@ -49,8 +49,8 @@ class RustLayout(LayoutParentType[T]):
def __del__(self): def __del__(self):
self.layout.__del__() self.layout.__del__()
def set_timer(self, token: int, deadline: int) -> None: def set_timer(self, token: int, duration_ms: int) -> None:
self.timer.schedule(deadline, token) self.timer.schedule(duration_ms, token)
def request_complete_repaint(self) -> None: def request_complete_repaint(self) -> None:
msg = self.layout.request_complete_repaint() msg = self.layout.request_complete_repaint()
@ -271,7 +271,7 @@ class RustLayout(LayoutParentType[T]):
def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None:
# Simple drawing not supported for layouts that set timers. # 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 raise RuntimeError
layout.attach_timer_fn(dummy_set_timer, None) layout.attach_timer_fn(dummy_set_timer, None)