X11GLESRenderer: implements IPlugin for health monitoring support
authorTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Tue, 20 Nov 2012 11:14:33 +0000 (03:14 -0800)
committerTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Tue, 20 Nov 2012 11:57:50 +0000 (03:57 -0800)
Signed-off-by: Timo Lotterbach <timo.lotterbach@bmw-carit.de>
LayerManagerPlugins/Renderers/Base/src/BaseRenderer.cpp
LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h
LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/NullWindowSystem.cpp
LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp
LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp
LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h
LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp
LayerManagerService/include/IRenderer.h

index 90629f3..096eec3 100644 (file)
@@ -28,6 +28,7 @@ BaseRenderer::BaseRenderer(Scene* pScene) : m_pScene(pScene)
 {
     LOG_DEBUG("BaseRenderer", "Creating Renderer");
     m_pInputManager = new InputManager(pScene);
+    setHealth(HealthRunning);
 }
 
 BaseRenderer::~BaseRenderer()
@@ -36,6 +37,7 @@ BaseRenderer::~BaseRenderer()
     {
         delete m_pInputManager;
     }
+    setHealth(HealthStopped);
 }
 
 uint BaseRenderer::getLayerTypeCapabilities(LayerType layerType)
index 3c9a3f2..125512b 100644 (file)
@@ -44,6 +44,7 @@ public:
     virtual void doScreenShotOfLayer(std::string fileName, const uint id) = 0;
     virtual void doScreenShotOfSurface(std::string fileName, const uint id, const uint layer_id) = 0;
 
+    unsigned long int mThreadId; // TODO: remove
 protected:
     virtual void ClearDamage();
     Scene* m_pScene;
index 7974457..4c46e87 100644 (file)
@@ -193,6 +193,7 @@ bool NullWindowSystem::start(int displayWidth, int displayHeight, const char* Di
     {
         return false;
     }
+    mThreadId = renderThread;
     while (!m_initialized)
     {
         sleep(1);
index 4465c03..cf0b908 100644 (file)
@@ -1030,6 +1030,7 @@ bool WaylandBaseWindowSystem::init(BaseGraphicSystem<void*, void*>* base)
         return false;
     }
 
+    mThreadId = renderThread;
     while (false == m_initialized)
     {
         usleep(10000); // TODO
index 69538e3..73e41e6 100644 (file)
@@ -1084,6 +1084,8 @@ bool X11WindowSystem::init(BaseGraphicSystem<Display*,Window>* base)
         pthread_mutex_unlock(&init_lock);
         return false;
     }
+    mThreadId = renderThread;
+    
     pthread_cond_wait(&init_condition,&init_lock);
 /*  while (!m_initialized)
     {
index b08fffa..4e6008a 100644 (file)
@@ -41,6 +41,8 @@ public:
     void forceCompositionWindowSystem();
     Shader* createShader(const string* vertexName, const string* fragmentName);
 
+    virtual HealthCondition getHealth();
+
 private:
     X11WindowSystem* m_pWindowSystem;
     GLESGraphicsystem* m_pGraphicSystem;
index 83afb6f..e10670f 100644 (file)
@@ -24,6 +24,8 @@
 #include "X11/Xlib.h"
 #include "TextureBinders/X11CopyGLES.h"
 #include "TextureBinders/X11EglImage.h"
+#include <pthread.h>
+#include <signal.h>
 
 X11GLESRenderer::X11GLESRenderer(Scene* pScene)
 : BaseRenderer(pScene)
@@ -176,6 +178,16 @@ Shader* X11GLESRenderer::createShader(const string* vertexName, const string* fr
     return result;
 }
 
+HealthCondition X11GLESRenderer::getHealth()
+{
+    HealthCondition health = PluginBase::getHealth();
+    if (0 != pthread_kill(m_pWindowSystem->mThreadId, 0))
+    {
+        health = HealthDead;
+    }
+    return health;
+}
+
 extern "C" BaseRenderer* createX11GLESRenderer(Scene* pScene){
     return new X11GLESRenderer(pScene);
 }
index d6d3b00..8404776 100644 (file)
@@ -21,6 +21,7 @@
 #define _IRENDERER_H_
 
 #include <string>
+#include "PluginBase.h"
 #include "LayerType.h"
 #include "Shader.h"
 
@@ -32,7 +33,7 @@ class InputManager;
  * Abstract Base of all CompositingControllers, ie Renderers.
  * \defgroup RendererAPI Layer Management Renderer API
  */
-class IRenderer
+class IRenderer : public PluginBase
 {
 public:
     /**