From: Rahul Singhal Date: Fri, 22 Jun 2012 10:26:41 +0000 (+0530) Subject: WindowSystem: Forced composition should also redraw HW layers X-Git-Tag: ivi-layer-management_version_0_9_7_rc2~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c3ab3572d98e9967b18dd0a64280171b70fc5161;p=profile%2Fivi%2Flayer-management.git WindowSystem: Forced composition should also redraw HW layers --- diff --git a/LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h b/LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h index 8687e00..59ca6e2 100644 --- a/LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h +++ b/LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h @@ -47,6 +47,7 @@ protected: public: bool m_damaged; + bool m_forceComposition; }; #endif /* _BASEWINDOWSYSTEM_H_ */ diff --git a/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLESGraphicSystem.cpp b/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLESGraphicSystem.cpp index 00bd2a4..3019a72 100644 --- a/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLESGraphicSystem.cpp +++ b/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLESGraphicSystem.cpp @@ -185,7 +185,7 @@ void GLESGraphicsystem::checkRenderLayer() m_currentLayer->damaged = false; - if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware)) + if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware)) { if (m_currentLayer->renderPropertyChanged) { diff --git a/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLXGraphicSystem.cpp b/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLXGraphicSystem.cpp index 73ab5ee..fbaa4f3 100644 --- a/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLXGraphicSystem.cpp +++ b/LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLXGraphicSystem.cpp @@ -254,7 +254,7 @@ void GLXGraphicsystem::checkRenderLayer() m_currentLayer->damaged = false; - if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware)) + if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware)) { if (m_currentLayer->renderPropertyChanged) { diff --git a/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp b/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp index 61820bd..16d1c76 100644 --- a/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp +++ b/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp @@ -311,7 +311,7 @@ void WaylandBaseWindowSystem::CheckRedrawAllLayers() void WaylandBaseWindowSystem::RedrawAllLayers() { std::list layers = m_pScene->getCurrentRenderOrder(); - bool bRedraw = m_damaged || (m_systemState == REDRAW_STATE); + bool bRedraw = m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE); // m_damaged represents that SW composition is required // At this point if a layer has damaged = true then it must be a HW layer that needs update. @@ -327,7 +327,7 @@ void WaylandBaseWindowSystem::RedrawAllLayers() { if ((*current)->getLayerType() == Hardware) { - if ((*current)->damaged) + if (m_forceComposition || (*current)->damaged) { renderHWLayer(*current); (*current)->damaged = false; @@ -377,7 +377,7 @@ void WaylandBaseWindowSystem::Redraw() m_pScene->unlockScene(); - if (m_damaged || (m_systemState == REDRAW_STATE)) + if (m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE)) { // TODO: This block won't be executed for HW only changes // Is that acceptable? @@ -389,6 +389,7 @@ void WaylandBaseWindowSystem::Redraw() calculateFps(); /* Reset the damage flag, all is up to date */ + m_forceComposition = false; m_damaged = false; m_systemState = IDLE_STATE; } diff --git a/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp b/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp index 8cee5df..f50eac4 100644 --- a/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp +++ b/LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp @@ -610,7 +610,7 @@ void X11WindowSystem::RedrawAllLayers() // m_damaged represents that SW composition is required // At this point if a layer has damaged = true then it must be a HW layer that needs update. // A SW layer which needs update will make m_damaged = true - if (m_damaged) + if (m_forceComposition || m_damaged) { graphicSystem->activateGraphicContext(); graphicSystem->clearBackground(); @@ -619,20 +619,20 @@ void X11WindowSystem::RedrawAllLayers() { if ((*current)->getLayerType() == Hardware) { - if ((*current)->damaged) + if (m_forceComposition || (*current)->damaged) { renderHWLayer(*current); (*current)->damaged = false; } } - else if (m_damaged) + else if (m_forceComposition || m_damaged) { graphicSystem->beginLayer(*current); graphicSystem->renderSWLayer(); graphicSystem->endLayer(); } } - if (m_damaged) + if (m_forceComposition || m_damaged) { graphicSystem->swapBuffers(); graphicSystem->releaseGraphicContext(); @@ -656,7 +656,7 @@ void X11WindowSystem::Redraw() m_pScene->unlockScene(); - if (m_damaged) + if (m_forceComposition || m_damaged) { // TODO: This block won't be executed for HW only changes // Is that acceptable? @@ -668,6 +668,7 @@ void X11WindowSystem::Redraw() calculateFps(); /* Reset the damage flag, all is up to date */ + m_forceComposition = false; m_damaged = false; } } diff --git a/LayerManagerPlugins/Renderers/Platform/GLXRenderer/src/X11GLXRenderer.cpp b/LayerManagerPlugins/Renderers/Platform/GLXRenderer/src/X11GLXRenderer.cpp index 6c88aee..c58c292 100644 --- a/LayerManagerPlugins/Renderers/Platform/GLXRenderer/src/X11GLXRenderer.cpp +++ b/LayerManagerPlugins/Renderers/Platform/GLXRenderer/src/X11GLXRenderer.cpp @@ -148,7 +148,7 @@ void X11GLXRenderer::signalWindowSystemRedraw() void X11GLXRenderer::forceCompositionWindowSystem() { - m_pWindowSystem->m_damaged = true; + m_pWindowSystem->m_forceComposition = true; } extern "C" IRenderer* createX11GLXRenderer(Scene* pScene) { diff --git a/LayerManagerPlugins/Renderers/Platform/WaylandGLESRenderer/src/WaylandGLESRenderer.cpp b/LayerManagerPlugins/Renderers/Platform/WaylandGLESRenderer/src/WaylandGLESRenderer.cpp index 73ad262..51071d0 100644 --- a/LayerManagerPlugins/Renderers/Platform/WaylandGLESRenderer/src/WaylandGLESRenderer.cpp +++ b/LayerManagerPlugins/Renderers/Platform/WaylandGLESRenderer/src/WaylandGLESRenderer.cpp @@ -146,7 +146,7 @@ uint WaylandGLESRenderer::getNumberOfHardwareLayers(uint screenID) uint* WaylandGLESRenderer::getScreenResolution(uint screenID) { uint screen_id; - screen_id = screenID; + screen_id = screenID; // TODO provide value of real screen here uint * resolution = new uint[2]; resolution[0] = m_width; @@ -158,7 +158,7 @@ uint* WaylandGLESRenderer::getScreenIDs(uint* length) { // TODO necessary to implement uint* screenIDS = new uint[1]; - screenIDS[0] = 0; + screenIDS[0] = 0; *length = 1; return screenIDS; } @@ -170,18 +170,18 @@ void WaylandGLESRenderer::signalWindowSystemRedraw() void WaylandGLESRenderer::forceCompositionWindowSystem() { - m_pWindowSystem->m_damaged = true; + m_pWindowSystem->m_forceComposition = true; } Shader* WaylandGLESRenderer::createShader(const string* vertexName, const string* fragmentName) { Shader *result = NULL; m_pWindowSystem->setSystemState(WAKEUP_STATE); - m_pWindowSystem->wakeUpRendererThread(); + m_pWindowSystem->wakeUpRendererThread(); m_pGraphicSystem->activateGraphicContext(); result = Shader::createShader(*vertexName,*fragmentName); m_pGraphicSystem->releaseGraphicContext(); - m_pWindowSystem->setSystemState(IDLE_STATE); + m_pWindowSystem->setSystemState(IDLE_STATE); return result; } diff --git a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp index e2535ba..cd5789b 100644 --- a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp +++ b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp @@ -158,18 +158,18 @@ void X11GLESRenderer::signalWindowSystemRedraw() void X11GLESRenderer::forceCompositionWindowSystem() { - m_pWindowSystem->m_damaged = true; + m_pWindowSystem->m_forceComposition = true; } Shader* X11GLESRenderer::createShader(const string* vertexName, const string* fragmentName) { Shader *result = NULL; m_pWindowSystem->setSystemState(WAKEUP_STATE); - m_pWindowSystem->wakeUpRendererThread(); + m_pWindowSystem->wakeUpRendererThread(); m_pGraphicSystem->activateGraphicContext(); result = Shader::createShader(*vertexName,*fragmentName); m_pGraphicSystem->releaseGraphicContext(); - m_pWindowSystem->setSystemState(IDLE_STATE); + m_pWindowSystem->setSystemState(IDLE_STATE); return result; }