diff options
| author | 2009-06-26 19:06:36 -0700 | |
|---|---|---|
| committer | 2009-06-26 19:06:36 -0700 | |
| commit | b8a5560e1303cb10f5cd482af466fc04d2bdfcab (patch) | |
| tree | 3d8e2c45d87cb1dcb85e36978ea1658d6cd7db91 | |
| parent | 17b2ad027b4b72b96dfb663c0ea001972da7ef58 (diff) | |
fix an update bug with SHOW_UPDATE debug feature. Fix a problem with the debug binder codes too
| -rw-r--r-- | libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp | 5 | ||||
| -rw-r--r-- | libs/surfaceflinger/SurfaceFlinger.cpp | 25 |
2 files changed, 19 insertions, 11 deletions
diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp index 1719b7443b..b981319b2b 100644 --- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp @@ -318,9 +318,8 @@ void DisplayHardware::flip(const Region& dirty) const #ifdef EGL_ANDROID_swap_rectangle if (mFlags & SWAP_RECTANGLE) { - Region newDirty(dirty); - newDirty.andSelf(Rect(mWidth, mHeight)); - const Rect& b(newDirty.bounds()); + const Region newDirty(dirty.intersect(bounds())); + const Rect b(newDirty.getBounds()); eglSetSwapRectangleANDROID(dpy, surface, b.left, b.top, b.width(), b.height()); } diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp index 2e7bbeafcf..106af3f8bc 100644 --- a/libs/surfaceflinger/SurfaceFlinger.cpp +++ b/libs/surfaceflinger/SurfaceFlinger.cpp @@ -803,19 +803,24 @@ void SurfaceFlinger::unlockPageFlip(const LayerVector& currentLayers) } } + void SurfaceFlinger::handleRepaint() { - // set the frame buffer - const DisplayHardware& hw(graphicPlane(0).displayHardware()); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); + // compute the invalid region + mInvalidRegion.orSelf(mDirtyRegion); + if (mInvalidRegion.isEmpty()) { + // nothing to do + return; + } if (UNLIKELY(mDebugRegion)) { debugFlashRegions(); } - // compute the invalid region - mInvalidRegion.orSelf(mDirtyRegion); + // set the frame buffer + const DisplayHardware& hw(graphicPlane(0).displayHardware()); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); uint32_t flags = hw.getFlags(); if ((flags & DisplayHardware::SWAP_RECTANGLE) || @@ -945,8 +950,11 @@ void SurfaceFlinger::debugFlashRegions() glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } - hw.flip(mDirtyRegion.merge(mInvalidRegion)); - mInvalidRegion.clear(); + if (mInvalidRegion.isEmpty()) { + mDirtyRegion.dump("mDirtyRegion"); + mInvalidRegion.dump("mInvalidRegion"); + } + hw.flip(mInvalidRegion); if (mDebugRegion > 1) usleep(mDebugRegion * 1000); @@ -1549,6 +1557,7 @@ status_t SurfaceFlinger::onTransact( } status_t err = BnSurfaceComposer::onTransact(code, data, reply, flags); if (err == UNKNOWN_TRANSACTION || err == PERMISSION_DENIED) { + CHECK_INTERFACE(ISurfaceComposer, data, reply); if (UNLIKELY(!mHardwareTest.checkCalling())) { IPCThreadState* ipc = IPCThreadState::self(); const int pid = ipc->getCallingPid(); |