DSRenderEngineDaliImpl: register WindowDestroyed callback of window object 15/242015/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 21 Aug 2020 05:28:34 +0000 (14:28 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Fri, 21 Aug 2020 10:10:41 +0000 (19:10 +0900)
need to kick the Dali Renderer when the window is destroyed.

Change-Id: I4547baf37dda4863780f1f3d1490641376ba4a76

src/DSRender/DSRenderEngineDaliImpl.cpp
src/DSRender/DSRenderEngineDaliImpl.h

index 1ab9f6c..082e815 100644 (file)
@@ -62,16 +62,20 @@ std::shared_ptr<DSRenderView> DSRenderEngineDaliImpl::makeRenderView(std::shared
 
        // callbacks
        window->registerCallbackBufferChanged(this, std::bind(&DSRenderEngineDaliImpl::__onWindowUpdated, this, std::placeholders::_1));
+       window->registerCallbackWindowDestroyed(this, std::bind(&DSRenderEngineDaliImpl::__onWindowDestroyed, this, std::placeholders::_1));
 
        return renderView;
 }
 
 bool DSRenderEngineDaliImpl::renderFrame()
 {
-       if (__needToRender)
+       if (__needToRender) {
                Adaptor::Get().RenderOnce();
+               DSLOG_DBG("DSRenderEngineDaliImpl", "RENDER RENDER RENDER~!!!!");
+       }
 
        __needToRender = false;
+
        return true;
 }
 
@@ -83,4 +87,16 @@ void DSRenderEngineDaliImpl::__onWindowUpdated(std::shared_ptr<IDSBuffer> buffer
        }
 }
 
+void DSRenderEngineDaliImpl::__onWindowDestroyed(void *data)
+{
+       if (!__needToRender) {
+               DSLOG_DBG("DSRenderEngineDaliImpl", "Window destroyed!!");
+               // TODO: update twice, at this time and at idle handler.
+               //       do not update a frame only once..
+               //       NEED to check why dali does not update a frame at this time by execute one RenderOnce call.
+               Adaptor::Get().RenderOnce();
+               __needToRender = true;
+       }
+}
+
 } // namespace display_server
index d9244f7..2cbdc7b 100644 (file)
@@ -48,6 +48,7 @@ public:
 
 private:
        void __onWindowUpdated(std::shared_ptr<IDSBuffer> buffer);
+       void __onWindowDestroyed(void *data);
 
        std::shared_ptr<IDSBufferQueue> __bufferQueue;
        Dali::OffscreenApplication __offscreenApplication;