gui: Set up libgui_mocks
Move the existing mocks for IGraphicBufferProducer and
IGraphicBufferConsumer over to libs/gui/..., and create a new static
library "libgui_mocks" to hold the mocks.
libsurfaceflinger_unittest is also adjusted as needed to use the new
library.
Test: atest libsurfaceflinger_unittest
Change-Id: I740ae9d999812896f525f86a30c6800f86ed8ca9
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp
index 3f8b436..da51675 100644
--- a/libs/gui/Android.bp
+++ b/libs/gui/Android.bp
@@ -32,6 +32,8 @@
defaults: ["libgui_bufferqueue-defaults"],
srcs: [
+ ":libgui_bufferqueue_sources",
+
"BitTube.cpp",
"BufferHubConsumer.cpp",
"BufferHubProducer.cpp",
@@ -104,32 +106,14 @@
],
defaults: ["libgui_bufferqueue-defaults"],
+
+ srcs: [
+ ":libgui_bufferqueue_sources",
+ ],
}
-// Common build config shared by libgui and libgui_bufferqueue_static.
-cc_defaults {
- name: "libgui_bufferqueue-defaults",
-
- clang: true,
- cflags: [
- "-Wall",
- "-Werror",
- ],
-
- cppflags: [
- "-Wextra",
- "-DDEBUG_ONLY_CODE=0",
- ],
-
- product_variables: {
- eng: {
- cppflags: [
- "-UDEBUG_ONLY_CODE",
- "-DDEBUG_ONLY_CODE=1",
- ],
- },
- },
-
+filegroup {
+ name: "libgui_bufferqueue_sources",
srcs: [
"BufferItem.cpp",
"BufferQueue.cpp",
@@ -157,6 +141,31 @@
"bufferqueue/2.0/H2BProducerListener.cpp",
"bufferqueue/2.0/types.cpp",
],
+}
+
+// Common build config shared by libgui and libgui_bufferqueue_static.
+cc_defaults {
+ name: "libgui_bufferqueue-defaults",
+
+ clang: true,
+ cflags: [
+ "-Wall",
+ "-Werror",
+ ],
+
+ cppflags: [
+ "-Wextra",
+ "-DDEBUG_ONLY_CODE=0",
+ ],
+
+ product_variables: {
+ eng: {
+ cppflags: [
+ "-UDEBUG_ONLY_CODE",
+ "-DDEBUG_ONLY_CODE=1",
+ ],
+ },
+ },
shared_libs: [
"android.hardware.graphics.bufferqueue@1.0",
@@ -204,4 +213,21 @@
],
}
+// GMocks for use by external code
+cc_library_static {
+ name: "libgui_mocks",
+ vendor_available: false,
+
+ defaults: ["libgui_bufferqueue-defaults"],
+ static_libs: [
+ "libgtest",
+ "libgmock",
+ ],
+
+ srcs: [
+ "mock/GraphicBufferConsumer.cpp",
+ "mock/GraphicBufferProducer.cpp",
+ ],
+}
+
subdirs = ["tests"]
diff --git a/libs/gui/include/gui/mock/GraphicBufferConsumer.h b/libs/gui/include/gui/mock/GraphicBufferConsumer.h
new file mode 100644
index 0000000..98f24c2
--- /dev/null
+++ b/libs/gui/include/gui/mock/GraphicBufferConsumer.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <gmock/gmock.h>
+
+#include <gui/IGraphicBufferConsumer.h>
+
+#include <utils/RefBase.h>
+
+namespace android {
+namespace mock {
+
+class GraphicBufferConsumer : public BnGraphicBufferConsumer, public virtual android::RefBase {
+public:
+ GraphicBufferConsumer();
+ ~GraphicBufferConsumer() override;
+
+ MOCK_METHOD3(acquireBuffer, status_t(BufferItem*, nsecs_t, uint64_t));
+ MOCK_METHOD1(detachBuffer, status_t(int));
+ MOCK_METHOD2(attachBuffer, status_t(int*, const sp<GraphicBuffer>&));
+ MOCK_METHOD5(releaseBuffer, status_t(int, uint64_t, EGLDisplay, EGLSyncKHR, const sp<Fence>&));
+ MOCK_METHOD2(consumerConnect, status_t(const sp<IConsumerListener>&, bool));
+ MOCK_METHOD0(consumerDisconnect, status_t());
+ MOCK_METHOD1(getReleasedBuffers, status_t(uint64_t*));
+ MOCK_METHOD2(setDefaultBufferSize, status_t(uint32_t, uint32_t));
+ MOCK_METHOD1(setMaxBufferCount, status_t(int));
+ MOCK_METHOD1(setMaxAcquiredBufferCount, status_t(int));
+ MOCK_METHOD1(setConsumerName, status_t(const String8&));
+ MOCK_METHOD1(setDefaultBufferFormat, status_t(PixelFormat));
+ MOCK_METHOD1(setDefaultBufferDataSpace, status_t(android_dataspace));
+ MOCK_METHOD1(setConsumerUsageBits, status_t(uint64_t));
+ MOCK_METHOD1(setConsumerIsProtected, status_t(bool));
+ MOCK_METHOD1(setTransformHint, status_t(uint32_t));
+ MOCK_CONST_METHOD1(getSidebandStream, status_t(sp<NativeHandle>*));
+ MOCK_METHOD2(getOccupancyHistory, status_t(bool, std::vector<OccupancyTracker::Segment>*));
+ MOCK_METHOD0(discardFreeBuffers, status_t());
+ MOCK_CONST_METHOD2(dumpState, status_t(const String8&, String8*));
+};
+
+} // namespace mock
+} // namespace android
diff --git a/libs/gui/include/gui/mock/GraphicBufferProducer.h b/libs/gui/include/gui/mock/GraphicBufferProducer.h
new file mode 100644
index 0000000..c98f39f
--- /dev/null
+++ b/libs/gui/include/gui/mock/GraphicBufferProducer.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <gmock/gmock.h>
+
+#include <gui/IGraphicBufferProducer.h>
+
+#include <utils/RefBase.h>
+
+namespace android {
+namespace mock {
+
+class GraphicBufferProducer : public BnGraphicBufferProducer, public virtual android::RefBase {
+public:
+ GraphicBufferProducer();
+ ~GraphicBufferProducer() override;
+
+ MOCK_METHOD2(requestBuffer, status_t(int, sp<GraphicBuffer>*));
+ MOCK_METHOD1(setMaxDequeuedBufferCount, status_t(int));
+ MOCK_METHOD1(setAsyncMode, status_t(bool));
+ MOCK_METHOD8(dequeueBuffer,
+ status_t(int*, sp<Fence>*, uint32_t, uint32_t, PixelFormat, uint64_t, uint64_t*,
+ FrameEventHistoryDelta*));
+ MOCK_METHOD1(detachBuffer, status_t(int));
+ MOCK_METHOD2(detachNextBuffer, status_t(sp<GraphicBuffer>*, sp<Fence>*));
+ MOCK_METHOD2(attachBuffer, status_t(int*, const sp<GraphicBuffer>&));
+ MOCK_METHOD3(queueBuffer, status_t(int, const QueueBufferInput&, QueueBufferOutput*));
+ MOCK_METHOD2(cancelBuffer, status_t(int, const sp<Fence>&));
+ MOCK_METHOD2(query, int(int, int*));
+ MOCK_METHOD4(connect, status_t(const sp<IProducerListener>&, int, bool, QueueBufferOutput*));
+ MOCK_METHOD2(disconnect, status_t(int, DisconnectMode));
+ MOCK_METHOD1(setSidebandStream, status_t(const sp<NativeHandle>&));
+ MOCK_METHOD4(allocateBuffers, void(uint32_t, uint32_t, PixelFormat, uint64_t));
+ MOCK_METHOD1(allowAllocation, status_t(bool));
+ MOCK_METHOD1(setGenerationNumber, status_t(uint32_t));
+ MOCK_CONST_METHOD0(getConsumerName, String8());
+ MOCK_METHOD1(setSharedBufferMode, status_t(bool));
+ MOCK_METHOD1(setAutoRefresh, status_t(bool));
+ MOCK_METHOD1(setDequeueTimeout, status_t(nsecs_t));
+ MOCK_METHOD3(getLastQueuedBuffer, status_t(sp<GraphicBuffer>*, sp<Fence>*, float[16]));
+ MOCK_METHOD1(getFrameTimestamps, void(FrameEventHistoryDelta*));
+ MOCK_CONST_METHOD1(getUniqueId, status_t(uint64_t*));
+ MOCK_CONST_METHOD1(getConsumerUsage, status_t(uint64_t*));
+};
+
+} // namespace mock
+} // namespace android
diff --git a/libs/gui/mock/GraphicBufferConsumer.cpp b/libs/gui/mock/GraphicBufferConsumer.cpp
new file mode 100644
index 0000000..4a6c081
--- /dev/null
+++ b/libs/gui/mock/GraphicBufferConsumer.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gui/mock/GraphicBufferConsumer.h>
+
+namespace android {
+namespace mock {
+
+// Explicit default instantiation is recommended.
+GraphicBufferConsumer::GraphicBufferConsumer() = default;
+GraphicBufferConsumer::~GraphicBufferConsumer() = default;
+
+} // namespace mock
+} // namespace android
\ No newline at end of file
diff --git a/libs/gui/mock/GraphicBufferProducer.cpp b/libs/gui/mock/GraphicBufferProducer.cpp
new file mode 100644
index 0000000..239a80a
--- /dev/null
+++ b/libs/gui/mock/GraphicBufferProducer.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gui/mock/GraphicBufferProducer.h>
+
+namespace android {
+namespace mock {
+
+// Explicit default instantiation is recommended.
+GraphicBufferProducer::GraphicBufferProducer() = default;
+GraphicBufferProducer::~GraphicBufferProducer() = default;
+
+} // namespace mock
+} // namespace android
\ No newline at end of file