[FL-3842] Desktop lockup fix, GUI improvements (#3710)

* Gui: increase ViewDispatcher messages queues size, improves event processing with blocking operations.
* Gui: fix log message text in view dispatcher, loosen some mutexes in view port
This commit is contained in:
あく
2024-06-13 17:47:43 +01:00
committed by GitHub
parent e7d0afdc50
commit 5a8a13639b
2 changed files with 17 additions and 7 deletions

View File

@@ -139,12 +139,17 @@ uint8_t view_port_get_height(const ViewPort* view_port) {
void view_port_enabled_set(ViewPort* view_port, bool enabled) {
furi_check(view_port);
furi_check(furi_mutex_acquire(view_port->mutex, FuriWaitForever) == FuriStatusOk);
// We are not going to lockup system, but will notify you instead
// Make sure that you don't call viewport methods inside of another mutex, especially one that is used in draw call
if(furi_mutex_acquire(view_port->mutex, 2) != FuriStatusOk) {
FURI_LOG_W(TAG, "ViewPort lockup: see %s:%d", __FILE__, __LINE__ - 3);
}
if(view_port->is_enabled != enabled) {
view_port->is_enabled = enabled;
if(view_port->gui) gui_update(view_port->gui);
}
furi_check(furi_mutex_release(view_port->mutex) == FuriStatusOk);
furi_mutex_release(view_port->mutex);
}
bool view_port_is_enabled(const ViewPort* view_port) {
@@ -236,8 +241,13 @@ void view_port_set_orientation(ViewPort* view_port, ViewPortOrientation orientat
}
ViewPortOrientation view_port_get_orientation(const ViewPort* view_port) {
furi_check(furi_mutex_acquire(view_port->mutex, FuriWaitForever) == FuriStatusOk);
furi_check(view_port);
// We are not going to lockup system, but will notify you instead
// Make sure that you don't call viewport methods inside of another mutex, especially one that is used in draw call
if(furi_mutex_acquire(view_port->mutex, 2) != FuriStatusOk) {
FURI_LOG_W(TAG, "ViewPort lockup: see %s:%d", __FILE__, __LINE__ - 3);
}
ViewPortOrientation orientation = view_port->orientation;
furi_check(furi_mutex_release(view_port->mutex) == FuriStatusOk);
furi_mutex_release(view_port->mutex);
return orientation;
}