handle surfaces posts independently from composition
surfaceflinger will now handle each surface post
as soon as possible and handle the composition
itself at VSYNC time as usual.
Change-Id: I6b1ae33fd56062d86e5419ebab8def0ca5803fbf
diff --git a/services/surfaceflinger/MessageQueue.cpp b/services/surfaceflinger/MessageQueue.cpp
index 290fff4..1ff3567 100644
--- a/services/surfaceflinger/MessageQueue.cpp
+++ b/services/surfaceflinger/MessageQueue.cpp
@@ -133,8 +133,7 @@
}
void MessageQueue::invalidate() {
-// mHandler->signalInvalidate();
- mEvents->requestNextVsync();
+ mHandler->signalInvalidate();
}
void MessageQueue::refresh() {
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index ce6c4a0..c68f5c1 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -407,8 +407,7 @@
{
ATRACE_CALL();
switch (what) {
- case MessageQueue::REFRESH: {
-// case MessageQueue::INVALIDATE: {
+ case MessageQueue::INVALIDATE: {
// if we're in a global transaction, don't do anything.
const uint32_t mask = eTransactionNeeded | eTraversalNeeded;
uint32_t transactionFlags = peekTransactionFlags(mask);
@@ -419,20 +418,16 @@
// post surfaces (if needed)
handlePageFlip();
-// signalRefresh();
-//
-// } break;
-//
-// case MessageQueue::REFRESH: {
+ signalRefresh();
+
+ } break;
+
+ case MessageQueue::REFRESH: {
handleRefresh();
const DisplayHardware& hw(graphicPlane(0).displayHardware());
-// if (mDirtyRegion.isEmpty()) {
-// return;
-// }
-
if (CC_UNLIKELY(mHwWorkListDirty)) {
// build the h/w work list
handleWorkList();