+ * @brief Adds a callback that is called when the frame rendering is done by the graphics driver.
+ *
+ * @param[in] callback The function to call
+ * @param[in] frameId The Id to specify the frame. It will be passed when the callback is called.
+ *
+ * @note A callback of the following type may be used:
+ * @code
+ * void MyFunction( int32_t frameId );
+ * @endcode
+ * This callback will be deleted once it is called.
+ *
+ * @note Ownership of the callback is passed onto this class.
+ */
+ void AddFrameRenderedCallback(std::unique_ptr<CallbackBase> callback, int32_t frameId);
+
+ /**
+ * @brief Adds a callback that is called when the frame is displayed on the display.
+ *
+ * @param[in] callback The function to call
+ * @param[in] frameId The Id to specify the frame. It will be passed when the callback is called.
+ *
+ * @note A callback of the following type may be used:
+ * @code
+ * void MyFunction( int32_t frameId );
+ * @endcode
+ * This callback will be deleted once it is called.
+ *
+ * @note Ownership of the callback is passed onto this class.
+ */
+ void AddFramePresentedCallback(std::unique_ptr<CallbackBase> callback, int32_t frameId);
+
+ /**
+ * @brief Gets the callback list that is called when the frame rendering is done by the graphics driver.
+ *
+ * @param[out] callbacks The callback list
+ *
+ * @note This is called in the update thread.
+ */
+ void GetFrameRenderedCallback(FrameCallbackContainer& callbacks);
+
+ /**
+ * @brief Gets the callback list that is called when the frame is displayed on the display.
+ *
+ * @param[out] callbacks The callback list
+ *
+ * @note This is called in the update thread.
+ */
+ void GetFramePresentedCallback(FrameCallbackContainer& callbacks);
+
+ /**
+ * @brief Informs the scene that the set surface has been rotated.
+ *
+ * @param[in] width The width of rotated surface
+ * @param[in] height The height of rotated surface
+ * @param[in] orientation The orientation of rotated surface
+ */
+ void SurfaceRotated(float width, float height, int32_t orientation);
+
+ /**
+ * @brief Gets the current surface orientation. It gets the value from the scene object.
+ *
+ * @return The current surface orientation.
+ */
+ int32_t GetCurrentSurfaceOrientation() const;
+
+ /**
+ * @brief Gets the current surface rectangle. It gets the value from the scene object.
+ *
+ * @return The current surface rectangle
+ */
+ const Rect<int32_t>& GetCurrentSurfaceRect() const;
+
+ /**
+ * Query wheter the surface rect is changed or not.
+ * @return true if the surface rect is changed.
+ */
+ bool IsSurfaceRectChanged() const;
+
+ /**
+ * @brief Send message to acknowledge for completing window rotation with current window orientation.
+ *
+ * If this function is called, the message is sent to render thread, then mSurfaceRectChanged in scene-graph-scene is set with true.
+ * After that, render thread checks whether window rotation event is received, mSurfaceRectChanged and the neccessary flag are set.
+ * If they are all true, rotation done function is called to complete window rotation.
+ */
+ void SetRotationCompletedAcknowledgement();
+
+ /**
+ * @brief Query wheter is set to acknowledge for completing surface rotation.
+ * @return true it should be acknowledged.
+ *
+ * If SetRotationCompletedAcknowledgement() is called and the related message is received to scene-graph-scene,
+ * then mSurfaceRectChanged in scene-graph-scene is set with true.
+ *
+ * When this function is called, the mSurfaceRectChanged in scene-graph-scene is return.
+ * Then, the flag will be reset.
+ *
+ * @note This function should be not called the application's main thread.
+ * Because this function should be called in windwow surface's postrender() function to complete window rotation manually.
+ */
+ bool IsRotationCompletedAcknowledgementSet() const;
+
+ /**