Loading include/ui/FramebufferNativeWindow.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ public: framebuffer_device_t const * getDevice() const { return fbDev; } bool isUpdateOnDemand() const { return mUpdateOnDemand; } status_t setUpdateRectangle(const Rect& updateRect); private: friend class LightRefBase<FramebufferNativeWindow>; ~FramebufferNativeWindow(); // this class cannot be overloaded Loading @@ -71,6 +74,7 @@ private: int32_t mNumBuffers; int32_t mNumFreeBuffers; int32_t mBufferHead; bool mUpdateOnDemand; }; // --------------------------------------------------------------------------- Loading libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -183,8 +183,10 @@ void DisplayHardware::init(uint32_t dpy) LOGI("extensions: %s", egl_extensions); LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported"); // TODO: get the real "update_on_demand" behavior (probably should be HAL module) // FIXME: mFlags |= UPDATE_ON_DEMAND; if (mNativeWindow->isUpdateOnDemand()) { mFlags |= UPDATE_ON_DEMAND; } if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy) == EGL_TRUE) { if (dummy == EGL_SLOW_CONFIG) Loading @@ -210,7 +212,7 @@ void DisplayHardware::init(uint32_t dpy) mDpiX = mNativeWindow->xdpi; mDpiX = mNativeWindow->ydpi; mRefreshRate = mNativeWindow->getDevice()->fps; mRefreshRate = fbDev->fps; char property[PROPERTY_VALUE_MAX]; if (property_get("ro.sf.lcd_density", property, NULL) <= 0) { Loading Loading @@ -314,6 +316,10 @@ void DisplayHardware::flip(const Region& dirty) const b.left, b.top, b.width(), b.height()); } if (mFlags & UPDATE_ON_DEMAND) { mNativeWindow->setUpdateRectangle(dirty.bounds()); } mPageFlipCount++; eglSwapBuffers(dpy, surface); checkEGLErrors("eglSwapBuffers"); Loading libs/ui/FramebufferNativeWindow.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ private: */ FramebufferNativeWindow::FramebufferNativeWindow() : BASE(), fbDev(0), grDev(0) : BASE(), fbDev(0), grDev(0), mUpdateOnDemand(false) { hw_module_t const* module; if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { Loading @@ -86,6 +86,8 @@ FramebufferNativeWindow::FramebufferNativeWindow() int err; mUpdateOnDemand = (fbDev->setUpdateRect != 0); // initialize the buffer FIFO mNumBuffers = 2; mNumFreeBuffers = 2; Loading Loading @@ -131,6 +133,14 @@ FramebufferNativeWindow::~FramebufferNativeWindow() { framebuffer_close(fbDev); } status_t FramebufferNativeWindow::setUpdateRectangle(const Rect& r) { if (!mUpdateOnDemand) { return INVALID_OPERATION; } return fbDev->setUpdateRect(fbDev, r.left, r.top, r.width(), r.height()); } int FramebufferNativeWindow::setSwapInterval( android_native_window_t* window, int interval) { Loading Loading
include/ui/FramebufferNativeWindow.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ public: framebuffer_device_t const * getDevice() const { return fbDev; } bool isUpdateOnDemand() const { return mUpdateOnDemand; } status_t setUpdateRectangle(const Rect& updateRect); private: friend class LightRefBase<FramebufferNativeWindow>; ~FramebufferNativeWindow(); // this class cannot be overloaded Loading @@ -71,6 +74,7 @@ private: int32_t mNumBuffers; int32_t mNumFreeBuffers; int32_t mBufferHead; bool mUpdateOnDemand; }; // --------------------------------------------------------------------------- Loading
libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -183,8 +183,10 @@ void DisplayHardware::init(uint32_t dpy) LOGI("extensions: %s", egl_extensions); LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported"); // TODO: get the real "update_on_demand" behavior (probably should be HAL module) // FIXME: mFlags |= UPDATE_ON_DEMAND; if (mNativeWindow->isUpdateOnDemand()) { mFlags |= UPDATE_ON_DEMAND; } if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy) == EGL_TRUE) { if (dummy == EGL_SLOW_CONFIG) Loading @@ -210,7 +212,7 @@ void DisplayHardware::init(uint32_t dpy) mDpiX = mNativeWindow->xdpi; mDpiX = mNativeWindow->ydpi; mRefreshRate = mNativeWindow->getDevice()->fps; mRefreshRate = fbDev->fps; char property[PROPERTY_VALUE_MAX]; if (property_get("ro.sf.lcd_density", property, NULL) <= 0) { Loading Loading @@ -314,6 +316,10 @@ void DisplayHardware::flip(const Region& dirty) const b.left, b.top, b.width(), b.height()); } if (mFlags & UPDATE_ON_DEMAND) { mNativeWindow->setUpdateRectangle(dirty.bounds()); } mPageFlipCount++; eglSwapBuffers(dpy, surface); checkEGLErrors("eglSwapBuffers"); Loading
libs/ui/FramebufferNativeWindow.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ private: */ FramebufferNativeWindow::FramebufferNativeWindow() : BASE(), fbDev(0), grDev(0) : BASE(), fbDev(0), grDev(0), mUpdateOnDemand(false) { hw_module_t const* module; if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { Loading @@ -86,6 +86,8 @@ FramebufferNativeWindow::FramebufferNativeWindow() int err; mUpdateOnDemand = (fbDev->setUpdateRect != 0); // initialize the buffer FIFO mNumBuffers = 2; mNumFreeBuffers = 2; Loading Loading @@ -131,6 +133,14 @@ FramebufferNativeWindow::~FramebufferNativeWindow() { framebuffer_close(fbDev); } status_t FramebufferNativeWindow::setUpdateRectangle(const Rect& r) { if (!mUpdateOnDemand) { return INVALID_OPERATION; } return fbDev->setUpdateRect(fbDev, r.left, r.top, r.width(), r.height()); } int FramebufferNativeWindow::setSwapInterval( android_native_window_t* window, int interval) { Loading