~aleteoryx/muditaos

65650cee97b025bc441b0e6d2e474be846334fd0 — Lucjan Bryndza 5 years ago cd88079
[EGD-6006] Stack optimization in the EventManager

Tweak stack usage in the EventManager service
M module-services/service-evtmgr/EventManager.cpp => module-services/service-evtmgr/EventManager.cpp +11 -31
@@ 44,7 44,7 @@
#include <vibra/Vibra.hpp>

EventManager::EventManager(const std::string &name)
    : sys::Service(name), settings(std::make_shared<settings::Settings>(this)),
    : sys::Service(name, "", stackDepth), settings(std::make_shared<settings::Settings>(this)),
      screenLightControl(std::make_unique<screen_light_control::ScreenLightControl>(settings, this)),
      Vibra(std::make_unique<vibra_handle::Vibra>(this))
{


@@ 297,37 297,17 @@ sys::ReturnCodes EventManager::InitHandler()
    // initialize keyboard worker
    EventWorker = std::make_unique<WorkerEvent>(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<sys::WorkerQueueInfo> 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();

M module-services/service-evtmgr/service-evtmgr/EventManager.hpp => module-services/service-evtmgr/service-evtmgr/EventManager.hpp +1 -0
@@ 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<sys::ms>(1000));

M module-sys/Service/Worker.hpp => module-sys/Service/Worker.hpp +3 -0
@@ 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;