SF: Introduce libsurfaceflinger_unittest
This is meant to be a framework for running function-level unit tests
against the various SurfaceFlinger classes.
The point of this patch is to set up the test framework, as well as
demonstrate a pattern to be used to allow private implementation
functions to be tested.
Note that this patch configures the base surfaceflinger code to now use
ThinLTO, and enables -fwhole-program-vtables. This is done as ThinLTO
with that option will perform a devirtualization pass, turning virtual
function calls back into non-virtual function calls (and possibly even
inlining the call) when it detects that there is only one possible
implementation being called. The cost is a slight increase in build time
(similar to -O2), but is still much less than the original LTO.
Even here that LTO pass does something to the surfaceflinger binary,
reducing the file size by 4Kb.
Test: libsurfaceflinger_unittest passes on Pixel XL
Test: atest libsurfaceflinger_unittest runs the new test
Bug: None
Change-Id: I362ec1fcf1a909c4d6769710d8d8a6b0b158600d
diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp
index b1a3017..9f3189a 100644
--- a/services/surfaceflinger/Android.bp
+++ b/services/surfaceflinger/Android.bp
@@ -17,7 +17,6 @@
"-DGL_GLEXT_PROTOTYPES",
"-DEGL_EGLEXT_PROTOTYPES",
],
- logtags: ["EventLog/EventLogTags.logtags"],
shared_libs: [
"android.frameworks.vr.composer@1.0",
"android.hardware.configstore-utils",
@@ -131,10 +130,17 @@
srcs: [
":libsurfaceflinger_sources",
],
+ logtags: ["EventLog/EventLogTags.logtags"],
include_dirs: [
"external/vulkan-validation-layers/libs/vkjson",
"frameworks/native/vulkan/include",
],
+ cppflags: [
+ "-fwhole-program-vtables", // requires ThinLTO
+ ],
+ lto: {
+ thin: true,
+ },
}
cc_binary {