summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lloyd Pique <lpique@google.com> 2018-01-17 13:42:24 -0800
committer Lloyd Pique <lpique@google.com> 2018-03-19 17:51:33 -0700
commitac648ee7ead13b4c23fb0d12e00b7f15f844f04f (patch)
treedc7911c4c51ff5c8ff3f1df075d1e7b1962cd9a3
parenta618d855a2c1192c3817863b373a9cbfcba3ffbb (diff)
SF: libsurfaceflinger_unittest should skip SF ctor
This reduces the cost of constructing a SurfaceFlinger instance for each test, but it means the tests must take care to set up all internal state that is needed for each test. [Test execution time reduced from 6.1 to 3.1ms] Test: libsurfaceflinger_unittest passes on Pixel XL Bug: 74827900 Change-Id: I7eed4fd274cae521fe0f22b655cf3343cee66342
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp6
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h3
-rw-r--r--services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h2
3 files changed, 8 insertions, 3 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index cb410a14e1..db472a7396 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -162,7 +162,7 @@ SurfaceFlingerBE::SurfaceFlingerBE()
mComposerSequenceId(0) {
}
-SurfaceFlinger::SurfaceFlinger()
+SurfaceFlinger::SurfaceFlinger(SurfaceFlinger::SkipInitializationTag)
: BnSurfaceComposer(),
mTransactionFlags(0),
mTransactionPending(false),
@@ -194,7 +194,9 @@ SurfaceFlinger::SurfaceFlinger()
mNumLayers(0),
mVrFlingerRequestsDisplay(false),
mMainThreadId(std::this_thread::get_id()),
- mCreateBufferQueue(&BufferQueue::createBufferQueue) {
+ mCreateBufferQueue(&BufferQueue::createBufferQueue) {}
+
+SurfaceFlinger::SurfaceFlinger() : SurfaceFlinger(SkipInitialization) {
ALOGI("SurfaceFlinger is starting");
vsyncPhaseOffsetNs = getInt64< ISurfaceFlingerConfigs,
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 392acaa0a6..db541fe747 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -265,6 +265,9 @@ public:
return "SurfaceFlinger";
}
+ struct SkipInitializationTag {};
+ static constexpr SkipInitializationTag SkipInitialization;
+ explicit SurfaceFlinger(SkipInitializationTag) ANDROID_API;
SurfaceFlinger() ANDROID_API;
// must be called before clients can connect
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index 067b09ad02..3e58eb8813 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -98,7 +98,7 @@ public:
auto& mutableConfigs() { return this->mConfigs; }
};
- sp<SurfaceFlinger> mFlinger = new SurfaceFlinger();
+ sp<SurfaceFlinger> mFlinger = new SurfaceFlinger(SurfaceFlinger::SkipInitialization);
};
} // namespace android