Camera2: Tests: Release streams after HAL is unloaded
This fixes a segfault in the HAL where it was trying to write to a locked buffer
that disappeared from underneath it.
Any users of CameraModuleFixture should now call SetUp/TearDown explicitly.
Other classes remain unchanged until we need a custom TearDown order for them.
Change-Id: I9aa8c2d86492a76f2c01c1ad4cbe0cf91e5c7916
diff --git a/tests/camera2/CameraModuleFixture.h b/tests/camera2/CameraModuleFixture.h
index 6ad1ae8..cd8ddc4 100644
--- a/tests/camera2/CameraModuleFixture.h
+++ b/tests/camera2/CameraModuleFixture.h
@@ -37,14 +37,10 @@
TEST_EXTENSION_FORKING_CONSTRUCTOR;
mCameraID = CameraID;
-
- SetUp();
}
~CameraModuleFixture() {
TEST_EXTENSION_FORKING_DESTRUCTOR;
-
- TearDown();
}
camera_metadata_ro_entry GetStaticEntry(uint32_t tag) const {
@@ -53,8 +49,6 @@
return entry;
}
-private:
-
void SetUp() {
TEST_EXTENSION_FORKING_SET_UP;
@@ -88,6 +82,8 @@
}
}
+private:
+
void SetUpMixin() {
/* For using this fixture in other tests only */
if (mCameraID != -1) {
diff --git a/tests/camera2/CameraModuleTests.cpp b/tests/camera2/CameraModuleTests.cpp
index 5e85698..b5b88fc 100644
--- a/tests/camera2/CameraModuleTests.cpp
+++ b/tests/camera2/CameraModuleTests.cpp
@@ -33,6 +33,15 @@
class CameraModuleTest : public ::testing::Test,
public CameraModuleFixture<> {
+
+public:
+ CameraModuleTest() {
+ CameraModuleFixture::SetUp();
+ }
+
+ ~CameraModuleTest() {
+ CameraModuleFixture::TearDown();
+ }
};
TEST_F(CameraModuleTest, LoadModule) {
diff --git a/tests/camera2/CameraStreamFixture.h b/tests/camera2/CameraStreamFixture.h
index 7a6fa31..569b9d1 100644
--- a/tests/camera2/CameraStreamFixture.h
+++ b/tests/camera2/CameraStreamFixture.h
@@ -68,6 +68,8 @@
void SetUp() {
TEST_EXTENSION_FORKING_SET_UP;
+ CameraModuleFixture::SetUp();
+
CameraStreamParams p = mParam;
sp<Camera2Device> device = mDevice;
@@ -89,6 +91,13 @@
}
void TearDown() {
TEST_EXTENSION_FORKING_TEAR_DOWN;
+
+ // important: shut down HAL before releasing streams
+ CameraModuleFixture::TearDown();
+
+ mNativeWindow.clear();
+ mCpuConsumer.clear();
+ mFrameListener.clear();
}
protected: