M module-services/service-gui/ServiceGUI.cpp => module-services/service-gui/ServiceGUI.cpp +9 -27
@@ 98,13 98,12 @@ namespace service::gui
void ServiceGUI::ProcessCloseReason(sys::CloseReason closeReason)
{
- if (isInState(ServiceGUIState::Idle)) {
+ if (not isDisplaying and not isRendering) {
sendCloseReadyMessage(this);
- setState(ServiceGUIState::ReadyToClose);
return;
}
else {
- setState(ServiceGUIState::Closing);
+ isClosing = true;
}
}
@@ 146,7 145,7 @@ namespace service::gui
void ServiceGUI::notifyRenderer(std::list<std::unique_ptr<::gui::DrawCommand>> &&commands,
::gui::RefreshModes refreshMode)
{
- setState(ServiceGUIState::Rendering);
+ isRendering = true;
enqueueDrawCommands(DrawCommandsQueue::QueueItem{std::move(commands), refreshMode});
worker->notify(WorkerGUI::Signal::Render);
}
@@ 173,11 172,12 @@ namespace service::gui
sys::MessagePointer ServiceGUI::handleGUIRenderingFinished(sys::Message *message)
{
+ isRendering = false;
auto finishedMsg = static_cast<service::gui::RenderingFinished *>(message);
const auto contextId = finishedMsg->getContextId();
auto refreshMode = finishedMsg->getRefreshMode();
- if (not isInState(ServiceGUIState::Displaying)) {
+ if (not isDisplaying) {
if (cache.isRenderCached()) {
refreshMode = getMaxRefreshMode(cache.getCachedRender()->refreshMode, refreshMode);
cache.invalidate();
@@ 201,7 201,8 @@ namespace service::gui
void ServiceGUI::sendOnDisplay(::gui::Context *context, int contextId, ::gui::RefreshModes refreshMode)
{
- setState(ServiceGUIState::Displaying);
+ isDisplaying = true;
+
auto msg = std::make_shared<service::eink::ImageMessage>(contextId, context, refreshMode);
bus.sendUnicast(std::move(msg), service::name::eink);
scheduleContextRelease(contextId);
@@ 228,7 229,7 @@ namespace service::gui
sys::MessagePointer ServiceGUI::handleImageDisplayedNotification(sys::Message *message)
{
- setState(ServiceGUIState::Idle);
+ isDisplaying = false;
const auto msg = static_cast<eink::ImageDisplayedNotification *>(message);
const auto contextId = msg->getContextId();
contextPool->returnContext(contextId);
@@ 236,15 237,11 @@ namespace service::gui
// Even if the next render is already cached, if any context in the pool is currently being processed, then
// we better wait for it.
- if (isInState(ServiceGUIState::ReadyToClose)) {
- LOG_WARN("Post closing notification.");
- }
if (isNextFrameReady() and not isAnyFrameBeingRenderedOrDisplayed()) {
trySendNextFrame();
}
- else if (isInState(ServiceGUIState::Closing)) {
+ else if (isClosing) {
sendCloseReadyMessage(this);
- setState(ServiceGUIState::ReadyToClose);
}
return sys::MessageNone{};
}
@@ 267,19 264,4 @@ namespace service::gui
}
cache.invalidate();
}
-
- void ServiceGUI::setState(const ServiceGUIState &nextState)
- {
- if (isInState(ServiceGUIState::ReadyToClose)) {
- return;
- }
- if (isInState(ServiceGUIState::Closing) && (nextState != ServiceGUIState::ReadyToClose)) {
- return;
- }
- state = nextState;
- }
- bool ServiceGUI::isInState(const ServiceGUIState &serviceState)
- {
- return state == serviceState;
- }
} // namespace service::gui
M module-services/service-gui/service-gui/ServiceGUI.hpp => module-services/service-gui/service-gui/ServiceGUI.hpp +3 -12
@@ 32,15 32,6 @@ namespace service::gui
{
friend WorkerGUI;
- enum class ServiceGUIState
- {
- Idle = 0,
- Rendering,
- Displaying,
- Closing,
- ReadyToClose
- };
-
public:
explicit ServiceGUI(::gui::Size displaySize,
const std::string &name = service::name::gui,
@@ 55,7 46,9 @@ namespace service::gui
sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override;
private:
- ServiceGUIState state = ServiceGUIState::Idle;
+ bool isRendering{};
+ bool isDisplaying{};
+ bool isClosing{};
static void initAssetManagers();
void registerMessageHandlers();
@@ 70,8 63,6 @@ namespace service::gui
bool isNextFrameReady() const noexcept;
bool isAnyFrameBeingRenderedOrDisplayed() const noexcept;
void trySendNextFrame();
- void setState(const ServiceGUIState &nextState);
- bool isInState(const ServiceGUIState &serviceState);
sys::MessagePointer handleDrawMessage(sys::Message *message);
sys::MessagePointer handleGUIRenderingFinished(sys::Message *message);