From b1daeafe24bfb93f75f4c7e63f52f8dcc09cdc2b Mon Sep 17 00:00:00 2001 From: vbs Date: Mon, 12 Sep 2016 13:31:44 +0200 Subject: [PATCH 1/2] Added flag for GUI components to indicate activate background processing. ES won't enter sleep mode if any component has the processing flag set. (In sleep mode no more calls to update() on any components are invoked) --- es-app/src/guis/GuiScraperMulti.cpp | 4 ++++ es-core/src/GuiComponent.cpp | 8 +++++++- es-core/src/GuiComponent.h | 5 +++++ es-core/src/Window.cpp | 8 +++++++- es-core/src/Window.h | 3 +++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index afbfe0a3d..8da0377df 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -21,6 +21,8 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queuepushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); + + mIsProcessing = false; } std::vector GuiScraperMulti::getHelpPrompts() diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 2b4fbe3c1..d079930de 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -6,7 +6,8 @@ #include "ThemeData.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), - mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()) + mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), + mIsProcessing(false) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) mAnimationMap[i] = NULL; @@ -339,3 +340,8 @@ HelpStyle GuiComponent::getHelpStyle() { return HelpStyle(); } + +bool GuiComponent::isProcessing() const +{ + return mIsProcessing; +} diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 0b8734a2f..566b2a615 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -90,6 +90,9 @@ public: virtual HelpStyle getHelpStyle(); + // Returns true if the component is busy doing background processing (e.g. HTTP downloads) + bool isProcessing() const; + protected: void renderChildren(const Eigen::Affine3f& transform) const; void updateSelf(int deltaTime); // updates animations @@ -104,6 +107,8 @@ protected: Eigen::Vector3f mPosition; Eigen::Vector2f mSize; + bool mIsProcessing; + public: const static unsigned char MAX_ANIMATIONS = 4; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index d9dea2050..c8db08089 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -4,6 +4,7 @@ #include "AudioManager.h" #include "Log.h" #include "Settings.h" +#include #include #include "components/HelpComponent.h" #include "components/ImageComponent.h" @@ -202,7 +203,7 @@ void Window::render() } unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); - if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && mAllowSleep) + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && !isProcessing() && mAllowSleep) { // go to sleep mSleeping = true; @@ -335,3 +336,8 @@ void Window::onWake() { } + +bool Window::isProcessing() +{ + return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; +} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 6576cb04a..54e014c76 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -41,6 +41,9 @@ private: void onSleep(); void onWake(); + // Returns true if at least one component on the stack is processing + bool isProcessing(); + HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; From 329730cc3eac734f4fda4e317e9378db098d9768 Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 17 Sep 2016 15:21:24 +0200 Subject: [PATCH 2/2] Decoupled screensaver and sleep mode: background jobs will only prevent sleep mode but screen saver (dimming) will still be active. --- es-core/src/Window.cpp | 23 ++++++++++++++++------- es-core/src/Window.h | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index c8db08089..e5622e8ca 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -203,11 +203,16 @@ void Window::render() } unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); - if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && !isProcessing() && mAllowSleep) + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { - // go to sleep - mSleeping = true; - onSleep(); + renderScreenSaver(); + + if (!isProcessing() && mAllowSleep) + { + // go to sleep + mSleeping = true; + onSleep(); + } } } @@ -327,9 +332,6 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt void Window::onSleep() { - Renderer::setMatrix(Eigen::Affine3f::Identity()); - unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); } void Window::onWake() @@ -341,3 +343,10 @@ bool Window::isProcessing() { return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; } + +void Window::renderScreenSaver() +{ + Renderer::setMatrix(Eigen::Affine3f::Identity()); + unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); +} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 54e014c76..5eee873a2 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -43,6 +43,7 @@ private: // Returns true if at least one component on the stack is processing bool isProcessing(); + void renderScreenSaver(); HelpComponent* mHelp; ImageComponent* mBackgroundOverlay;