Avoid unnecessary calls to updateTransformHint
It was observed that this could start to take
noticeable time with high layer counts, I guess
due to the acquisition of one mutex per layer per call. Anyway
it looks like there's no need to call it if a display transaction
didn't occur.
Test: Existing tests pass.
Change-Id: I1918d326a6d0ed32a0a5fea4008a746d328b335d
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 142892e..03a9df7 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2338,16 +2338,19 @@
}
}
}
- if (disp == NULL) {
- // NOTE: TEMPORARY FIX ONLY. Real fix should cause layers to
- // redraw after transform hint changes. See bug 8508397.
- // could be null when this layer is using a layerStack
- // that is not visible on any display. Also can occur at
- // screen off/on times.
- disp = getDefaultDisplayDeviceLocked();
+ if (transactionFlags & eDisplayTransactionNeeded) {
+ if (disp == NULL) {
+ // NOTE: TEMPORARY FIX ONLY. Real fix should cause layers to
+ // redraw after transform hint changes. See bug 8508397.
+
+ // could be null when this layer is using a layerStack
+ // that is not visible on any display. Also can occur at
+ // screen off/on times.
+ disp = getDefaultDisplayDeviceLocked();
+ }
+ layer->updateTransformHint(disp);
}
- layer->updateTransformHint(disp);
first = false;
});
@@ -4613,4 +4616,4 @@
#if defined(__gl2_h_)
#error "don't include gl2/gl2.h in this file"
-#endif
\ No newline at end of file
+#endif