From 65650cee97b025bc441b0e6d2e474be846334fd0 Mon Sep 17 00:00:00 2001 From: Lucjan Bryndza Date: Thu, 4 Mar 2021 10:28:45 +0200 Subject: [PATCH] [EGD-6006] Stack optimization in the EventManager Tweak stack usage in the EventManager service --- .../service-evtmgr/EventManager.cpp | 42 +++++-------------- .../service-evtmgr/EventManager.hpp | 1 + module-sys/Service/Worker.hpp | 3 ++ 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/module-services/service-evtmgr/EventManager.cpp b/module-services/service-evtmgr/EventManager.cpp index d33192b8e05cd317f8db785750a919704dddfc0b..d4d9ba133c40e1a91f6d026b2fbf4fc4a1f9c65b 100644 --- a/module-services/service-evtmgr/EventManager.cpp +++ b/module-services/service-evtmgr/EventManager.cpp @@ -44,7 +44,7 @@ #include EventManager::EventManager(const std::string &name) - : sys::Service(name), settings(std::make_shared(this)), + : sys::Service(name, "", stackDepth), settings(std::make_shared(this)), screenLightControl(std::make_unique(settings, this)), Vibra(std::make_unique(this)) { @@ -297,37 +297,17 @@ sys::ReturnCodes EventManager::InitHandler() // initialize keyboard worker EventWorker = std::make_unique(this); - // create queues for worker - // keyboard irq queue - sys::WorkerQueueInfo qIrq = {"qIrq", sizeof(uint8_t), 10}; - // headset irq queue - sys::WorkerQueueInfo qHeadset = {"qHeadset", sizeof(uint8_t), 10}; - // battery manager queue - sys::WorkerQueueInfo qBattery = {"qBattery", sizeof(uint8_t), 10}; - // RTC irq queue - sys::WorkerQueueInfo qRTC = {"qRTC", sizeof(uint8_t), 20}; - // sim tray queue - sys::WorkerQueueInfo qSIM = {"qSIM", sizeof(uint8_t), 5}; - // magnetometer queue - sys::WorkerQueueInfo qMagnetometer = {"qMagnetometer", sizeof(uint8_t), 5}; - // torch driver queue - sys::WorkerQueueInfo qTorch = {"qTorch", sizeof(uint8_t), 5}; - // light sensor queue - sys::WorkerQueueInfo qLightSensor = {"qLightSensor", sizeof(uint8_t), 5}; - // charger detector queue - sys::WorkerQueueInfo qChargerDetect = {"qChargerDetect", sizeof(uint8_t), 5}; - + using namespace std::string_literals; std::list list; - - list.push_back(qIrq); - list.push_back(qHeadset); - list.push_back(qBattery); - list.push_back(qRTC); - list.push_back(qSIM); - list.push_back(qMagnetometer); - list.push_back(qTorch); - list.push_back(qLightSensor); - list.push_back(qChargerDetect); + list.emplace_back("qIrq"s, sizeof(uint8_t), 10); + list.emplace_back("qHeadset"s, sizeof(uint8_t), 10); + list.emplace_back("qBattery"s, sizeof(uint8_t), 10); + list.emplace_back("qRTC"s, sizeof(uint8_t), 20); + list.emplace_back("qSIM"s, sizeof(uint8_t), 5); + list.emplace_back("qMagnetometer"s, sizeof(uint8_t), 5); + list.emplace_back("qTorch"s, sizeof(uint8_t), 5); + list.emplace_back("qLightSensor"s, sizeof(uint8_t), 5); + list.emplace_back("qChargerDetect"s, sizeof(uint8_t), 5); EventWorker->init(list, settings); EventWorker->run(); diff --git a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp index b4e7f657f44e6f79d7f808111b0da8d69a030ccd..02fd39ffb8f19f8b732e6a2faec8ec3e87f1420f 100644 --- a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp @@ -28,6 +28,7 @@ class WorkerEvent; class EventManager : public sys::Service { private: + static constexpr auto stackDepth = 2048; void handleMinuteUpdate(time_t timestamp); bool processKeypadBacklightRequest(bsp::keypad_backlight::Action act); bool processVibraRequest(bsp::vibrator::Action act, sys::ms RepetitionTime = static_cast(1000)); diff --git a/module-sys/Service/Worker.hpp b/module-sys/Service/Worker.hpp index c6321700644236a367dd0acf68ea37d6874c910a..2d71a88a3022f4a046fc850bf594351288b2ee27 100644 --- a/module-sys/Service/Worker.hpp +++ b/module-sys/Service/Worker.hpp @@ -17,6 +17,9 @@ namespace sys class WorkerQueueInfo { public: + WorkerQueueInfo(std::string_view _name, int _elementSize, int _length) + : name(_name), elementSize(_elementSize), length(_length) + {} std::string name; int elementSize; int length;