Merge changes I6f6853a3,I2c6234a1,Iad51c4cf,Ib5e658df,Ia6f0df08, ...
* changes:
SF: Define mock::EventThread
SF: Separate EventThread into interface and impl
SF: Define mock::RE::RenderEngine et al
SF: Separate RenderEngine into interface and impl
SF: Define Hwc2::mock::Composer
SF: Separate Hwc2::Composer into interface and impl
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index e583b40..1e8d94c 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -1331,6 +1331,7 @@
uint32_t allocHeight = 0;
PixelFormat allocFormat = PIXEL_FORMAT_UNKNOWN;
uint64_t allocUsage = 0;
+ std::string allocName;
{ // Autolock scope
Mutex::Autolock lock(mCore->mMutex);
mCore->waitWhileAllocatingLocked();
@@ -1350,6 +1351,7 @@
allocHeight = height > 0 ? height : mCore->mDefaultHeight;
allocFormat = format != 0 ? format : mCore->mDefaultBufferFormat;
allocUsage = usage | mCore->mConsumerUsageBits;
+ allocName.assign(mCore->mConsumerName.string(), mCore->mConsumerName.size());
mCore->mIsAllocating = true;
} // Autolock scope
@@ -1358,7 +1360,7 @@
for (size_t i = 0; i < newBufferCount; ++i) {
sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(
allocWidth, allocHeight, allocFormat, BQ_LAYER_COUNT,
- allocUsage, {mConsumerName.string(), mConsumerName.size()});
+ allocUsage, allocName);
status_t result = graphicBuffer->initCheck();
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index a4aec6e..e08d6b0 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -881,6 +881,10 @@
*value = mGraphicBufferProducer != nullptr ? 1 : 0;
return NO_ERROR;
}
+ case NATIVE_WINDOW_DATASPACE: {
+ *value = static_cast<int>(mDataSpace);
+ return NO_ERROR;
+ }
}
}
return mGraphicBufferProducer->query(what, value);
diff --git a/libs/input/VelocityTracker.cpp b/libs/input/VelocityTracker.cpp
index e54f147..e0d2113 100644
--- a/libs/input/VelocityTracker.cpp
+++ b/libs/input/VelocityTracker.cpp
@@ -325,8 +325,8 @@
eventTime = event->getHistoricalEventTime(h);
for (size_t i = 0; i < pointerCount; i++) {
uint32_t index = pointerIndex[i];
- positions[index].x = event->getHistoricalX(i, h);
- positions[index].y = event->getHistoricalY(i, h);
+ positions[index].x = event->getHistoricalRawX(i, h);
+ positions[index].y = event->getHistoricalRawY(i, h);
}
addMovement(eventTime, idBits, positions);
}
@@ -334,8 +334,8 @@
eventTime = event->getEventTime();
for (size_t i = 0; i < pointerCount; i++) {
uint32_t index = pointerIndex[i];
- positions[index].x = event->getX(i);
- positions[index].y = event->getY(i);
+ positions[index].x = event->getRawX(i);
+ positions[index].y = event->getRawY(i);
}
addMovement(eventTime, idBits, positions);
}
diff --git a/libs/nativewindow/ANativeWindow.cpp b/libs/nativewindow/ANativeWindow.cpp
index c6994c3..2598451 100644
--- a/libs/nativewindow/ANativeWindow.cpp
+++ b/libs/nativewindow/ANativeWindow.cpp
@@ -33,6 +33,27 @@
return res < 0 ? res : value;
}
+static bool isDataSpaceValid(ANativeWindow* window, int32_t dataSpace) {
+ bool supported = false;
+ switch (dataSpace) {
+ case HAL_DATASPACE_UNKNOWN:
+ case HAL_DATASPACE_V0_SRGB:
+ return true;
+ // These data space need wide gamut support.
+ case HAL_DATASPACE_V0_SCRGB_LINEAR:
+ case HAL_DATASPACE_V0_SCRGB:
+ case HAL_DATASPACE_DISPLAY_P3:
+ native_window_get_wide_color_support(window, &supported);
+ return supported;
+ // These data space need HDR support.
+ case HAL_DATASPACE_BT2020_PQ:
+ native_window_get_hdr_support(window, &supported);
+ return supported;
+ default:
+ return false;
+ }
+}
+
/**************************************************************************************************
* NDK
**************************************************************************************************/
@@ -101,6 +122,28 @@
return native_window_set_buffers_transform(window, transform);
}
+int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace) {
+ static_assert(ADATASPACE_UNKNOWN == HAL_DATASPACE_UNKNOWN);
+ static_assert(ADATASPACE_SCRGB_LINEAR == HAL_DATASPACE_V0_SCRGB_LINEAR);
+ static_assert(ADATASPACE_SRGB == HAL_DATASPACE_V0_SRGB);
+ static_assert(ADATASPACE_SCRGB == HAL_DATASPACE_V0_SCRGB);
+ static_assert(ADATASPACE_DISPLAY_P3 == HAL_DATASPACE_DISPLAY_P3);
+ static_assert(ADATASPACE_BT2020_PQ == HAL_DATASPACE_BT2020_PQ);
+
+ if (!window || !query(window, NATIVE_WINDOW_IS_VALID) ||
+ !isDataSpaceValid(window, dataSpace)) {
+ return -EINVAL;
+ }
+ return native_window_set_buffers_data_space(window,
+ static_cast<android_dataspace_t>(dataSpace));
+}
+
+int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window) {
+ if (!window || !query(window, NATIVE_WINDOW_IS_VALID))
+ return -EINVAL;
+ return query(window, NATIVE_WINDOW_DATASPACE);
+}
+
/**************************************************************************************************
* vndk-stable
**************************************************************************************************/
@@ -209,10 +252,6 @@
return native_window_set_buffers_timestamp(window, timestamp);
}
-int ANativeWindow_setBufferDataSpace(ANativeWindow* window, android_dataspace_t dataSpace) {
- return native_window_set_buffers_data_space(window, dataSpace);
-}
-
int ANativeWindow_setSharedBufferMode(ANativeWindow* window, bool sharedBufferMode) {
return native_window_set_shared_buffer_mode(window, sharedBufferMode);
}
diff --git a/libs/nativewindow/include/android/data_space.h b/libs/nativewindow/include/android/data_space.h
new file mode 100644
index 0000000..3ac1c58
--- /dev/null
+++ b/libs/nativewindow/include/android/data_space.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright 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.
+ */
+
+/**
+ * @file data_space.h
+ */
+
+#ifndef ANDROID_DATA_SPACE_H
+#define ANDROID_DATA_SPACE_H
+
+#include <inttypes.h>
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+/**
+ * ADataSpace.
+ */
+enum ADataSpace {
+ /**
+ * Default-assumption data space, when not explicitly specified.
+ *
+ * It is safest to assume the buffer is an image with sRGB primaries and
+ * encoding ranges, but the consumer and/or the producer of the data may
+ * simply be using defaults. No automatic gamma transform should be
+ * expected, except for a possible display gamma transform when drawn to a
+ * screen.
+ */
+ ADATASPACE_UNKNOWN = 0,
+
+ /**
+ * scRGB linear encoding:
+ *
+ * The red, green, and blue components are stored in extended sRGB space,
+ * but are linear, not gamma-encoded.
+ * The RGB primaries and the white point are the same as BT.709.
+ *
+ * The values are floating point.
+ * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits.
+ * Values beyond the range [0.0 - 1.0] would correspond to other colors
+ * spaces and/or HDR content.
+ */
+ ADATASPACE_SCRGB_LINEAR = 406913024, // STANDARD_BT709 | TRANSFER_LINEAR | RANGE_EXTENDED
+
+ /**
+ * sRGB gamma encoding:
+ *
+ * The red, green and blue components are stored in sRGB space, and
+ * converted to linear space when read, using the SRGB transfer function
+ * for each of the R, G and B components. When written, the inverse
+ * transformation is performed.
+ *
+ * The alpha component, if present, is always stored in linear space and
+ * is left unmodified when read or written.
+ *
+ * Use full range and BT.709 standard.
+ */
+ ADATASPACE_SRGB = 142671872, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_FULL
+
+ /**
+ * scRGB:
+ *
+ * The red, green, and blue components are stored in extended sRGB space,
+ * but are linear, not gamma-encoded.
+ * The RGB primaries and the white point are the same as BT.709.
+ *
+ * The values are floating point.
+ * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits.
+ * Values beyond the range [0.0 - 1.0] would correspond to other colors
+ * spaces and/or HDR content.
+ */
+ ADATASPACE_SCRGB = 411107328, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED
+
+ /**
+ * Display P3
+ *
+ * Use same primaries and white-point as DCI-P3
+ * but sRGB transfer function.
+ */
+ ADATASPACE_DISPLAY_P3 = 143261696, // STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_FULL
+
+ /**
+ * ITU-R Recommendation 2020 (BT.2020)
+ *
+ * Ultra High-definition television
+ *
+ * Use full range, SMPTE 2084 (PQ) transfer and BT2020 standard
+ */
+ ADATASPACE_BT2020_PQ = 163971072, // STANDARD_BT2020 | TRANSFER_ST2084 | RANGE_FULL
+};
+
+__END_DECLS
+
+#endif // ANDROID_DATA_SPACE_H
diff --git a/libs/nativewindow/include/android/native_window.h b/libs/nativewindow/include/android/native_window.h
index 5290dd5..f2d6f7a 100644
--- a/libs/nativewindow/include/android/native_window.h
+++ b/libs/nativewindow/include/android/native_window.h
@@ -29,6 +29,7 @@
#include <sys/cdefs.h>
+#include <android/data_space.h>
#include <android/hardware_buffer.h>
#include <android/rect.h>
@@ -189,6 +190,33 @@
#endif // __ANDROID_API__ >= __ANDROID_API_O__
+#if __ANDROID_API__ >= __ANDROID_API_P__
+
+/**
+ * All buffers queued after this call will be associated with the dataSpace
+ * parameter specified.
+ *
+ * dataSpace specifies additional information about the buffer.
+ * For example, it can be used to convey the color space of the image data in
+ * the buffer, or it can be used to indicate that the buffers contain depth
+ * measurement data instead of color images. The default dataSpace is 0,
+ * ADATASPACE_UNKNOWN, unless it has been overridden by the producer.
+ *
+ * \param dataSpace data space of all buffers queued after this call.
+ * \return 0 for success, -EINVAL if window is invalid or the dataspace is not
+ * supported.
+ */
+int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace);
+
+/**
+ * Get the dataspace of the buffers in window.
+ * \return the dataspace of buffers in window, ADATASPACE_UNKNOWN is returned if
+ * dataspace is unknown, or -EINVAL if window is invalid.
+ */
+int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window);
+
+#endif // __ANDROID_API__ >= __ANDROID_API_P__
+
#ifdef __cplusplus
};
#endif
diff --git a/libs/nativewindow/include/system/window.h b/libs/nativewindow/include/system/window.h
index 69e0951..5fa1212 100644
--- a/libs/nativewindow/include/system/window.h
+++ b/libs/nativewindow/include/system/window.h
@@ -179,6 +179,11 @@
* with GRALLOC_USAGE_PROTECTED usage bits on.
*/
NATIVE_WINDOW_CONSUMER_IS_PROTECTED = 19,
+
+ /*
+ * Returns data space for the buffers.
+ */
+ NATIVE_WINDOW_DATASPACE = 20,
};
/* Valid operations for the (*perform)() hook.
diff --git a/libs/nativewindow/include/vndk/window.h b/libs/nativewindow/include/vndk/window.h
index a7b340a..995ba44 100644
--- a/libs/nativewindow/include/vndk/window.h
+++ b/libs/nativewindow/include/vndk/window.h
@@ -306,20 +306,6 @@
/*
- * All buffers queued after this call will be associated with the dataSpace
- * parameter specified.
- *
- * dataSpace specifies additional information about the buffer that's dependent
- * on the buffer format and the endpoints. For example, it can be used to convey
- * the color space of the image data in the buffer, or it can be used to
- * indicate that the buffers contain depth measurement data instead of color
- * images. The default dataSpace is 0, HAL_DATASPACE_UNKNOWN, unless it has been
- * overridden by the consumer.
- */
-int ANativeWindow_setBufferDataSpace(ANativeWindow* window, android_dataspace_t dataSpace);
-
-
-/*
* Enable/disable shared buffer mode
*/
int ANativeWindow_setSharedBufferMode(ANativeWindow* window, bool sharedBufferMode);
diff --git a/libs/nativewindow/libnativewindow.map.txt b/libs/nativewindow/libnativewindow.map.txt
index 105d01b..d2ba971 100644
--- a/libs/nativewindow/libnativewindow.map.txt
+++ b/libs/nativewindow/libnativewindow.map.txt
@@ -15,6 +15,7 @@
ANativeWindow_acquire;
ANativeWindow_cancelBuffer; # vndk
ANativeWindow_dequeueBuffer; # vndk
+ ANativeWindow_getBuffersDataSpace; # introduced=28
ANativeWindow_getFormat;
ANativeWindow_getHeight;
ANativeWindow_getWidth;
@@ -25,7 +26,7 @@
ANativeWindow_release;
ANativeWindow_setAutoRefresh; # vndk
ANativeWindow_setBufferCount; # vndk
- ANativeWindow_setBufferDataSpace; # vndk
+ ANativeWindow_setBuffersDataSpace; # introduced=28
ANativeWindow_setBuffersDimensions; # vndk
ANativeWindow_setBuffersFormat; # vndk
ANativeWindow_setBuffersGeometry;
diff --git a/libs/vr/libdvr/tests/Android.bp b/libs/vr/libdvr/tests/Android.bp
index e8aa6b7..8c81e8d 100644
--- a/libs/vr/libdvr/tests/Android.bp
+++ b/libs/vr/libdvr/tests/Android.bp
@@ -36,7 +36,6 @@
cc_test {
srcs: [
- "dvr_buffer_queue-test.cpp",
"dvr_display_manager-test.cpp",
"dvr_named_buffer-test.cpp",
],
@@ -53,3 +52,25 @@
],
name: "dvr_api-test",
}
+
+cc_test {
+ srcs: [
+ "dvr_buffer_queue-test.cpp",
+ ],
+
+ header_libs: [
+ "libdvr_headers",
+ "libbase_headers",
+ ],
+ shared_libs: [
+ "liblog",
+ "libnativewindow",
+ ],
+ cflags: [
+ "-DLOG_TAG=\"dvr_buffer_queue-test\"",
+ "-DTRACE=0",
+ "-O0",
+ "-g",
+ ],
+ name: "dvr_buffer_queue-test",
+}
diff --git a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
index 62cd8d4..ff0588c 100644
--- a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
@@ -1,6 +1,7 @@
+#include <android-base/unique_fd.h>
#include <android/log.h>
#include <android/native_window.h>
-#include <android-base/unique_fd.h>
+#include <dlfcn.h>
#include <dvr/dvr_api.h>
#include <dvr/dvr_buffer_queue.h>
@@ -13,6 +14,8 @@
#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#endif
+#define ASSERT_NOT_NULL(x) ASSERT_TRUE((x) != nullptr)
+
#ifndef ALOGD_IF
#define ALOGD_IF(cond, ...) \
((__predict_false(cond)) ? ((void)ALOGD(__VA_ARGS__)) : (void)0)
@@ -40,11 +43,26 @@
}
protected:
+ void SetUp() override {
+ platform_handle_ = dlopen("libdvr.so", RTLD_NOW | RTLD_LOCAL);
+ ASSERT_NOT_NULL(platform_handle_) << "Dvr shared library missing.";
+
+ auto dvr_get_api = reinterpret_cast<decltype(&dvrGetApi)>(
+ dlsym(platform_handle_, "dvrGetApi"));
+ ASSERT_NOT_NULL(dvr_get_api) << "Platform library missing dvrGetApi.";
+
+ ASSERT_EQ(dvr_get_api(&api_, sizeof(api_), /*version=*/1), 0)
+ << "Unable to find compatible Dvr API.";
+ }
+
void TearDown() override {
if (write_queue_ != nullptr) {
- dvrWriteBufferQueueDestroy(write_queue_);
+ api_.WriteBufferQueueDestroy(write_queue_);
write_queue_ = nullptr;
}
+ if (platform_handle_ != nullptr) {
+ dlclose(platform_handle_);
+ }
}
void HandleBufferAvailable() {
@@ -61,88 +79,90 @@
DvrWriteBufferQueue* write_queue_{nullptr};
int buffer_available_count_{0};
int buffer_removed_count_{0};
+ void* platform_handle_{nullptr};
+ DvrApi_v1 api_{};
};
TEST_F(DvrBufferQueueTest, WriteQueueCreateDestroy) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
/*capacity=*/0, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
- dvrWriteBufferQueueDestroy(write_queue_);
+ api_.WriteBufferQueueDestroy(write_queue_);
write_queue_ = nullptr;
}
TEST_F(DvrBufferQueueTest, WriteQueueGetCapacity) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
- size_t capacity = dvrWriteBufferQueueGetCapacity(write_queue_);
+ size_t capacity = api_.WriteBufferQueueGetCapacity(write_queue_);
ALOGD_IF(TRACE, "TestWrite_QueueGetCapacity, capacity=%zu", capacity);
ASSERT_EQ(kQueueCapacity, capacity);
}
TEST_F(DvrBufferQueueTest, CreateReadQueueFromWriteQueue) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
/*capacity=*/0, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
DvrReadBufferQueue* read_queue = nullptr;
- ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
+ ret = api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, read_queue);
- dvrReadBufferQueueDestroy(read_queue);
+ api_.ReadBufferQueueDestroy(read_queue);
}
TEST_F(DvrBufferQueueTest, CreateReadQueueFromReadQueue) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
/*capacity=*/0, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
DvrReadBufferQueue* read_queue1 = nullptr;
DvrReadBufferQueue* read_queue2 = nullptr;
- ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue1);
+ ret = api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue1);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, read_queue1);
- ret = dvrReadBufferQueueCreateReadQueue(read_queue1, &read_queue2);
+ ret = api_.ReadBufferQueueCreateReadQueue(read_queue1, &read_queue2);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, read_queue2);
ASSERT_NE(read_queue1, read_queue2);
- dvrReadBufferQueueDestroy(read_queue1);
- dvrReadBufferQueueDestroy(read_queue2);
+ api_.ReadBufferQueueDestroy(read_queue1);
+ api_.ReadBufferQueueDestroy(read_queue2);
}
TEST_F(DvrBufferQueueTest, GainBuffer) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(ret, 0);
DvrWriteBuffer* wb = nullptr;
- EXPECT_FALSE(dvrWriteBufferIsValid(wb));
+ EXPECT_FALSE(api_.WriteBufferIsValid(wb));
DvrNativeBufferMetadata meta;
int fence_fd = -1;
- ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb, &meta,
- &fence_fd);
+ ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb, &meta,
+ &fence_fd);
ASSERT_EQ(ret, 0);
EXPECT_EQ(fence_fd, -1);
EXPECT_NE(wb, nullptr);
- EXPECT_TRUE(dvrWriteBufferIsValid(wb));
+ EXPECT_TRUE(api_.WriteBufferIsValid(wb));
}
TEST_F(DvrBufferQueueTest, AcquirePostGainRelease) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(ret, 0);
@@ -154,40 +174,40 @@
DvrNativeBufferMetadata meta2;
int fence_fd = -1;
- ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
+ ret = api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
ASSERT_EQ(ret, 0);
ASSERT_NE(read_queue, nullptr);
- dvrReadBufferQueueSetBufferAvailableCallback(read_queue,
- &BufferAvailableCallback, this);
+ api_.ReadBufferQueueSetBufferAvailableCallback(
+ read_queue, &BufferAvailableCallback, this);
// Gain buffer for writing.
- ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb, &meta1,
- &fence_fd);
+ ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb,
+ &meta1, &fence_fd);
ASSERT_EQ(ret, 0);
ASSERT_NE(wb, nullptr);
- ASSERT_TRUE(dvrWriteBufferIsValid(wb));
+ ASSERT_TRUE(api_.WriteBufferIsValid(wb));
ALOGD_IF(TRACE, "TestDequeuePostDequeueRelease, gain buffer %p, fence_fd=%d",
wb, fence_fd);
android::base::unique_fd release_fence(fence_fd);
// Post buffer to the read_queue.
meta1.timestamp = 42;
- ret = dvrWriteBufferQueuePostBuffer(write_queue_, wb, &meta1, /*fence=*/-1);
+ ret = api_.WriteBufferQueuePostBuffer(write_queue_, wb, &meta1, /*fence=*/-1);
ASSERT_EQ(ret, 0);
- ASSERT_FALSE(dvrWriteBufferIsValid(wb));
+ ASSERT_FALSE(api_.WriteBufferIsValid(wb));
wb = nullptr;
// Acquire buffer for reading.
- ret = dvrReadBufferQueueAcquireBuffer(read_queue, /*timeout=*/10, &rb, &meta2,
- &fence_fd);
+ ret = api_.ReadBufferQueueAcquireBuffer(read_queue, /*timeout=*/10, &rb,
+ &meta2, &fence_fd);
ASSERT_EQ(ret, 0);
ASSERT_NE(rb, nullptr);
// Dequeue is successfully, BufferAvailableCallback should be fired once.
ASSERT_EQ(buffer_available_count_, 1);
- ASSERT_TRUE(dvrReadBufferIsValid(rb));
+ ASSERT_TRUE(api_.ReadBufferIsValid(rb));
// Metadata should be passed along from producer to consumer properly.
ASSERT_EQ(meta1.timestamp, meta2.timestamp);
@@ -198,31 +218,31 @@
android::base::unique_fd acquire_fence(fence_fd);
// Release buffer to the write_queue.
- ret = dvrReadBufferQueueReleaseBuffer(read_queue, rb, &meta2,
- /*release_fence_fd=*/-1);
+ ret = api_.ReadBufferQueueReleaseBuffer(read_queue, rb, &meta2,
+ /*release_fence_fd=*/-1);
ASSERT_EQ(ret, 0);
- ASSERT_FALSE(dvrReadBufferIsValid(rb));
+ ASSERT_FALSE(api_.ReadBufferIsValid(rb));
rb = nullptr;
// TODO(b/34387835) Currently buffer allocation has to happen after all queues
// are initialized.
- size_t capacity = dvrReadBufferQueueGetCapacity(read_queue);
+ size_t capacity = api_.ReadBufferQueueGetCapacity(read_queue);
ALOGD_IF(TRACE, "TestDequeuePostDequeueRelease, capacity=%zu", capacity);
ASSERT_EQ(kQueueCapacity, capacity);
- dvrReadBufferQueueDestroy(read_queue);
+ api_.ReadBufferQueueDestroy(read_queue);
}
TEST_F(DvrBufferQueueTest, GetANativeWindow) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
/*capacity=*/0, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, write_queue_);
ANativeWindow* window = nullptr;
- ret = dvrWriteBufferQueueGetANativeWindow(write_queue_, &window);
+ ret = api_.WriteBufferQueueGetANativeWindow(write_queue_, &window);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, window);
@@ -238,7 +258,7 @@
// Before each dequeue operation, we resize the buffer queue and expect the
// queue always return buffer with desired dimension.
TEST_F(DvrBufferQueueTest, ResizeBuffer) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
@@ -255,37 +275,37 @@
AHardwareBuffer* ahb3 = nullptr;
AHardwareBuffer_Desc buffer_desc;
- ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
+ ret = api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, read_queue);
- dvrReadBufferQueueSetBufferRemovedCallback(read_queue, &BufferRemovedCallback,
- this);
+ api_.ReadBufferQueueSetBufferRemovedCallback(read_queue,
+ &BufferRemovedCallback, this);
// Handle all pending events on the read queue.
- ret = dvrReadBufferQueueHandleEvents(read_queue);
+ ret = api_.ReadBufferQueueHandleEvents(read_queue);
ASSERT_EQ(0, ret);
- size_t capacity = dvrReadBufferQueueGetCapacity(read_queue);
+ size_t capacity = api_.ReadBufferQueueGetCapacity(read_queue);
ALOGD_IF(TRACE, "TestResizeBuffer, capacity=%zu", capacity);
ASSERT_EQ(kQueueCapacity, capacity);
// Resize before dequeuing.
constexpr uint32_t w1 = 10;
- ret = dvrWriteBufferQueueResizeBuffer(write_queue_, w1, kBufferHeight);
+ ret = api_.WriteBufferQueueResizeBuffer(write_queue_, w1, kBufferHeight);
ASSERT_EQ(0, ret);
// Gain first buffer for writing. All buffers will be resized.
- ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb1, &meta,
- &fence_fd);
+ ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb1,
+ &meta, &fence_fd);
ASSERT_EQ(0, ret);
- ASSERT_TRUE(dvrWriteBufferIsValid(wb1));
+ ASSERT_TRUE(api_.WriteBufferIsValid(wb1));
ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p", wb1);
android::base::unique_fd release_fence1(fence_fd);
// Check the buffer dimension.
- ret = dvrWriteBufferGetAHardwareBuffer(wb1, &ahb1);
+ ret = api_.WriteBufferGetAHardwareBuffer(wb1, &ahb1);
ASSERT_EQ(0, ret);
AHardwareBuffer_describe(ahb1, &buffer_desc);
ASSERT_EQ(w1, buffer_desc.width);
@@ -294,26 +314,26 @@
// For the first resize, all buffers are reallocated.
int expected_buffer_removed_count = kQueueCapacity;
- ret = dvrReadBufferQueueHandleEvents(read_queue);
+ ret = api_.ReadBufferQueueHandleEvents(read_queue);
ASSERT_EQ(0, ret);
ASSERT_EQ(expected_buffer_removed_count, buffer_removed_count_);
// Resize the queue. We are testing with blob format, keep height to be 1.
constexpr uint32_t w2 = 20;
- ret = dvrWriteBufferQueueResizeBuffer(write_queue_, w2, kBufferHeight);
+ ret = api_.WriteBufferQueueResizeBuffer(write_queue_, w2, kBufferHeight);
ASSERT_EQ(0, ret);
// The next buffer we dequeued should have new width.
- ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb2, &meta,
- &fence_fd);
+ ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb2,
+ &meta, &fence_fd);
ASSERT_EQ(0, ret);
- ASSERT_TRUE(dvrWriteBufferIsValid(wb2));
+ ASSERT_TRUE(api_.WriteBufferIsValid(wb2));
ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p, fence_fd=%d", wb2,
fence_fd);
android::base::unique_fd release_fence2(fence_fd);
// Check the buffer dimension, should be new width
- ret = dvrWriteBufferGetAHardwareBuffer(wb2, &ahb2);
+ ret = api_.WriteBufferGetAHardwareBuffer(wb2, &ahb2);
ASSERT_EQ(0, ret);
AHardwareBuffer_describe(ahb2, &buffer_desc);
ASSERT_EQ(w2, buffer_desc.width);
@@ -321,26 +341,26 @@
// For the second resize, all but one buffers are reallocated.
expected_buffer_removed_count += (kQueueCapacity - 1);
- ret = dvrReadBufferQueueHandleEvents(read_queue);
+ ret = api_.ReadBufferQueueHandleEvents(read_queue);
ASSERT_EQ(0, ret);
ASSERT_EQ(expected_buffer_removed_count, buffer_removed_count_);
// Resize the queue for the third time.
constexpr uint32_t w3 = 30;
- ret = dvrWriteBufferQueueResizeBuffer(write_queue_, w3, kBufferHeight);
+ ret = api_.WriteBufferQueueResizeBuffer(write_queue_, w3, kBufferHeight);
ASSERT_EQ(0, ret);
// The next buffer we dequeued should have new width.
- ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb3, &meta,
- &fence_fd);
+ ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/0, &wb3,
+ &meta, &fence_fd);
ASSERT_EQ(0, ret);
- ASSERT_TRUE(dvrWriteBufferIsValid(wb3));
+ ASSERT_TRUE(api_.WriteBufferIsValid(wb3));
ALOGD_IF(TRACE, "TestResizeBuffer, gain buffer %p, fence_fd=%d", wb3,
fence_fd);
android::base::unique_fd release_fence3(fence_fd);
// Check the buffer dimension, should be new width
- ret = dvrWriteBufferGetAHardwareBuffer(wb3, &ahb3);
+ ret = api_.WriteBufferGetAHardwareBuffer(wb3, &ahb3);
ASSERT_EQ(0, ret);
AHardwareBuffer_describe(ahb3, &buffer_desc);
ASSERT_EQ(w3, buffer_desc.width);
@@ -348,26 +368,26 @@
// For the third resize, all but two buffers are reallocated.
expected_buffer_removed_count += (kQueueCapacity - 2);
- ret = dvrReadBufferQueueHandleEvents(read_queue);
+ ret = api_.ReadBufferQueueHandleEvents(read_queue);
ASSERT_EQ(0, ret);
ASSERT_EQ(expected_buffer_removed_count, buffer_removed_count_);
- dvrReadBufferQueueDestroy(read_queue);
+ api_.ReadBufferQueueDestroy(read_queue);
}
TEST_F(DvrBufferQueueTest, ReadQueueEventFd) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
DvrReadBufferQueue* read_queue = nullptr;
- ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
+ ret = api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
ASSERT_EQ(0, ret);
ASSERT_NE(nullptr, read_queue);
- int event_fd = dvrReadBufferQueueGetEventFd(read_queue);
+ int event_fd = api_.ReadBufferQueueGetEventFd(read_queue);
ASSERT_GT(event_fd, 0);
}
@@ -375,14 +395,14 @@
// Dvr{Read,Write}Buffer(s) during their lifecycles. And for the same buffer_id,
// the corresponding AHardwareBuffer handle stays the same.
TEST_F(DvrBufferQueueTest, StableBufferIdAndHardwareBuffer) {
- int ret = dvrWriteBufferQueueCreate(
+ int ret = api_.WriteBufferQueueCreate(
kBufferWidth, kBufferHeight, kBufferFormat, kLayerCount, kBufferUsage,
kQueueCapacity, sizeof(DvrNativeBufferMetadata), &write_queue_);
ASSERT_EQ(0, ret);
int fence_fd = -1;
DvrReadBufferQueue* read_queue = nullptr;
- EXPECT_EQ(0, dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue));
+ EXPECT_EQ(0, api_.WriteBufferQueueCreateReadQueue(write_queue_, &read_queue));
// Read buffers.
std::array<DvrReadBuffer*, kQueueCapacity> rbs;
@@ -400,16 +420,16 @@
// This test runs the following operations many many times. Thus we prefer to
// use ASSERT_XXX rather than EXPECT_XXX to avoid spamming the output.
std::function<void(size_t i)> Gain = [&](size_t i) {
- int ret = dvrWriteBufferQueueGainBuffer(write_queue_, /*timeout=*/10,
- &wbs[i], &metas[i], &fence_fd);
+ int ret = api_.WriteBufferQueueGainBuffer(write_queue_, /*timeout=*/10,
+ &wbs[i], &metas[i], &fence_fd);
ASSERT_EQ(ret, 0);
ASSERT_LT(fence_fd, 0); // expect invalid fence.
- ASSERT_TRUE(dvrWriteBufferIsValid(wbs[i]));
- int buffer_id = dvrWriteBufferGetId(wbs[i]);
+ ASSERT_TRUE(api_.WriteBufferIsValid(wbs[i]));
+ int buffer_id = api_.WriteBufferGetId(wbs[i]);
ASSERT_GT(buffer_id, 0);
AHardwareBuffer* hb = nullptr;
- ASSERT_EQ(0, dvrWriteBufferGetAHardwareBuffer(wbs[i], &hb));
+ ASSERT_EQ(0, api_.WriteBufferGetAHardwareBuffer(wbs[i], &hb));
auto whb_it = whbs.find(buffer_id);
if (whb_it == whbs.end()) {
@@ -425,26 +445,26 @@
};
std::function<void(size_t i)> Post = [&](size_t i) {
- ASSERT_TRUE(dvrWriteBufferIsValid(wbs[i]));
+ ASSERT_TRUE(api_.WriteBufferIsValid(wbs[i]));
metas[i].timestamp++;
- int ret = dvrWriteBufferQueuePostBuffer(write_queue_, wbs[i], &metas[i],
- /*fence=*/-1);
+ int ret = api_.WriteBufferQueuePostBuffer(write_queue_, wbs[i], &metas[i],
+ /*fence=*/-1);
ASSERT_EQ(ret, 0);
};
std::function<void(size_t i)> Acquire = [&](size_t i) {
- int ret = dvrReadBufferQueueAcquireBuffer(read_queue, /*timeout=*/10,
- &rbs[i], &metas[i], &fence_fd);
+ int ret = api_.ReadBufferQueueAcquireBuffer(read_queue, /*timeout=*/10,
+ &rbs[i], &metas[i], &fence_fd);
ASSERT_EQ(ret, 0);
ASSERT_LT(fence_fd, 0); // expect invalid fence.
- ASSERT_TRUE(dvrReadBufferIsValid(rbs[i]));
+ ASSERT_TRUE(api_.ReadBufferIsValid(rbs[i]));
- int buffer_id = dvrReadBufferGetId(rbs[i]);
+ int buffer_id = api_.ReadBufferGetId(rbs[i]);
ASSERT_GT(buffer_id, 0);
AHardwareBuffer* hb = nullptr;
- ASSERT_EQ(0, dvrReadBufferGetAHardwareBuffer(rbs[i], &hb));
+ ASSERT_EQ(0, api_.ReadBufferGetAHardwareBuffer(rbs[i], &hb));
auto rhb_it = rhbs.find(buffer_id);
if (rhb_it == rhbs.end()) {
@@ -460,10 +480,10 @@
};
std::function<void(size_t i)> Release = [&](size_t i) {
- ASSERT_TRUE(dvrReadBufferIsValid(rbs[i]));
+ ASSERT_TRUE(api_.ReadBufferIsValid(rbs[i]));
- int ret = dvrReadBufferQueueReleaseBuffer(read_queue, rbs[i], &metas[i],
- /*release_fence_fd=*/-1);
+ int ret = api_.ReadBufferQueueReleaseBuffer(read_queue, rbs[i], &metas[i],
+ /*release_fence_fd=*/-1);
ASSERT_EQ(ret, 0);
};
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp
index 1fceb4a..a9d473d 100644
--- a/vulkan/libvulkan/driver.cpp
+++ b/vulkan/libvulkan/driver.cpp
@@ -1170,8 +1170,7 @@
const auto& data = GetData(device);
data.driver.GetDeviceQueue2(device, pQueueInfo, pQueue);
- if (pQueue != VK_NULL_HANDLE)
- SetData(*pQueue, data);
+ if (*pQueue != VK_NULL_HANDLE) SetData(*pQueue, data);
}
VKAPI_ATTR VkResult