summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2009-06-26 19:06:36 -0700
committerMathias Agopian <mathias@google.com>2009-06-26 19:06:36 -0700
commit8c9687ae291a1e0a63d4236069066284f56192cd (patch)
treee03fd70ad8fbd5a3bad342a381f2f1da1061f947 /libs/surfaceflinger/SurfaceFlinger.cpp
parent5a8d6f44b2ec9132848aee5f608447ff801951b2 (diff)
downloadframeworks_base-8c9687ae291a1e0a63d4236069066284f56192cd.zip
frameworks_base-8c9687ae291a1e0a63d4236069066284f56192cd.tar.gz
frameworks_base-8c9687ae291a1e0a63d4236069066284f56192cd.tar.bz2
fix an update bug with SHOW_UPDATE debug feature. Fix a problem with the debug binder codes too
Diffstat (limited to 'libs/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--libs/surfaceflinger/SurfaceFlinger.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp
index 2e7bbea..106af3f 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();