From 1e55ef8f726ac8dfe56e394ef4558a1003f6cb4a Mon Sep 17 00:00:00 2001 From: "Pawel.Paprocki" Date: Tue, 9 Mar 2021 15:59:09 +0100 Subject: [PATCH] [EGD-6033] Fix Analise and optimize stack for application-phonebook Reduce application-phonebook stack size to 1k Reduce stack usage for Phonebook functions: contactRemove contactBlock showDialogDuplicatedNumber showDialogDuplicatedSpeedDialNumber --- .../ApplicationPhonebook.hpp | 4 +-- .../windows/PhonebookContactOptions.cpp | 32 +++++++++++-------- .../windows/PhonebookNewContact.cpp | 29 +++++++++-------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/module-apps/application-phonebook/ApplicationPhonebook.hpp b/module-apps/application-phonebook/ApplicationPhonebook.hpp index d4bf0bfeb11d944a9a96ce2f394df3ae5f421688..05f91f0b4d88b8c22fbd0099293d0b8d4a45a5fd 100644 --- a/module-apps/application-phonebook/ApplicationPhonebook.hpp +++ b/module-apps/application-phonebook/ApplicationPhonebook.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -25,7 +25,7 @@ namespace gui::window::name namespace app { inline constexpr auto name_phonebook = "ApplicationPhonebook"; - constexpr std::uint16_t phonebook_stack_size = 8192; + constexpr std::uint16_t phonebook_stack_size = 4096; class ApplicationPhonebook : public app::Application { diff --git a/module-apps/application-phonebook/windows/PhonebookContactOptions.cpp b/module-apps/application-phonebook/windows/PhonebookContactOptions.cpp index 1e20132d7c29ff41828e30ca19d068d8425d8fc1..bca973a7bf6458d18f418de2a39bd925af3c7273 100644 --- a/module-apps/application-phonebook/windows/PhonebookContactOptions.cpp +++ b/module-apps/application-phonebook/windows/PhonebookContactOptions.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "PhonebookContactOptions.hpp" @@ -80,8 +80,9 @@ namespace gui auto PhonebookContactOptions::contactBlock(bool shouldBeBlocked) -> bool { LOG_DEBUG("Blocking contact: %" PRIu32, contact->ID); - DialogMetadata meta; - meta.action = [=]() -> bool { + std::unique_ptr meta = std::make_unique(); + + meta->action = [=]() -> bool { contact->addToBlocked(shouldBeBlocked); DBServiceAPI::ContactUpdate(this->application, *contact); if (shouldBeBlocked) { @@ -94,25 +95,27 @@ namespace gui return true; }; if (shouldBeBlocked) { - meta.text = utils::localize.get("app_phonebook_options_block_confirm"); + meta->text = utils::localize.get("app_phonebook_options_block_confirm"); } else { - meta.text = utils::localize.get("app_phonebook_options_unblock_confirm"); + meta->text = utils::localize.get("app_phonebook_options_unblock_confirm"); } auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID); auto cont = !contactRec->empty() ? contactRec->front() : ContactRecord{}; - meta.title = cont.getFormattedName(); - meta.icon = "phonebook_contact_delete_trashcan"; - application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique(meta)); + meta->title = cont.getFormattedName(); + meta->icon = "phonebook_contact_delete_trashcan"; + application->switchWindow(gui::window::name::dialog_yes_no, + std::make_unique(std::move(*meta.release()))); return true; } auto PhonebookContactOptions::contactRemove() -> bool { LOG_DEBUG("Removing contact: %" PRIu32, contact->ID); - DialogMetadata meta; - meta.action = [=]() -> bool { + std::unique_ptr meta = std::make_unique(); + + meta->action = [=]() -> bool { if (!DBServiceAPI::ContactRemove(this->application, contact->ID)) { LOG_ERROR("Contact id=%" PRIu32 " remove failed", contact->ID); return false; @@ -120,12 +123,13 @@ namespace gui showNotification(NotificationType::Delete); return true; }; - meta.text = utils::localize.get("app_phonebook_options_delete_confirm"); + meta->text = utils::localize.get("app_phonebook_options_delete_confirm"); auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID); auto cont = !contactRec->empty() ? contactRec->front() : ContactRecord{}; - meta.title = cont.getFormattedName(); - meta.icon = "phonebook_contact_delete_trashcan"; - application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique(meta)); + meta->title = cont.getFormattedName(); + meta->icon = "phonebook_contact_delete_trashcan"; + application->switchWindow(gui::window::name::dialog_yes_no, + std::make_unique(std::move(*meta.release()))); return true; } diff --git a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp index 777781359ff73d4e272f025e3638417954eee256..e698edfc5c0e762aa6b2791b8d6ec8ecdb65e4cd 100644 --- a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp +++ b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "PhonebookNewContact.hpp" @@ -204,7 +204,7 @@ namespace gui void PhonebookNewContact::showDialogDuplicatedNumber(const utils::PhoneNumber::View &duplicatedNumber) { - DialogMetadata meta; + std::unique_ptr meta = std::make_unique(); auto matchedContact = DBServiceAPI::MatchContactByPhoneNumber(application, duplicatedNumber); auto oldContactRecord = (matchedContact != nullptr) ? *matchedContact : ContactRecord{}; @@ -212,7 +212,7 @@ namespace gui contact->ID = oldContactRecord.ID; } - meta.action = [=]() -> bool { + meta->action = [=]() -> bool { if (!DBServiceAPI::ContactUpdate(application, *contact)) { LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID); return false; @@ -222,10 +222,11 @@ namespace gui }; std::string duplicatedNumberPhrase = utils::localize.get("app_phonebook_duplicate_numbers"); phonebookUtils::fillContactData(duplicatedNumberPhrase, oldContactRecord); - meta.text = duplicatedNumberPhrase; - meta.title = duplicatedNumber.getFormatted(); - meta.icon = "info_big_circle_W_G"; - application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique(meta)); + meta->text = duplicatedNumberPhrase; + meta->title = duplicatedNumber.getFormatted(); + meta->icon = "info_big_circle_W_G"; + application->switchWindow(gui::window::name::dialog_yes_no, + std::make_unique(std::move(*meta.release()))); } void PhonebookNewContact::showDialogDuplicatedSpeedDialNumber() @@ -237,8 +238,8 @@ namespace gui contact->ID = oldContactRecord.ID; } - DialogMetadata metadata; - metadata.action = [=]() -> bool { + std::unique_ptr metadata = std::make_unique(); + metadata->action = [=]() -> bool { if (!DBServiceAPI::ContactUpdate(application, *contact)) { LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID); return false; @@ -250,13 +251,13 @@ namespace gui phonebookUtils::fillContactData(duplicatedSpeedDialPhrase, oldContactRecord); std::string duplicatedSpeedDialTitle = utils::localize.get("app_phonebook_duplicate_speed_dial_title"); phonebookUtils::fillContactData(duplicatedSpeedDialTitle, oldContactRecord); - metadata.text = duplicatedSpeedDialPhrase; - metadata.title = duplicatedSpeedDialTitle; - metadata.icon = "phonebook_empty_grey_circle_speed_dial"; - metadata.iconText = contact->speeddial; + metadata->text = duplicatedSpeedDialPhrase; + metadata->title = duplicatedSpeedDialTitle; + metadata->icon = "phonebook_empty_grey_circle_speed_dial"; + metadata->iconText = contact->speeddial; application->switchWindow(gui::window::name::dialog_yes_no_icon_txt, - std::make_unique(metadata)); + std::make_unique(std::move(*metadata.release()))); } } // namespace gui