blob: 283b8ce2e4c1cbe9b5dd0827122b5f9afb3650c8 [file] [log] [blame]
ramindanibab8ba92021-11-18 01:24:11 +00001/**
2 * Copyright (c) 2021, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
ramindani458e53e2022-02-23 17:30:16 +000017#include "ReadbackVts.h"
ramindanibab8ba92021-11-18 01:24:11 +000018#include <aidl/android/hardware/graphics/common/BufferUsage.h>
ramindani458e53e2022-02-23 17:30:16 +000019#include "RenderEngineVts.h"
ramindanibab8ba92021-11-18 01:24:11 +000020#include "renderengine/ExternalTexture.h"
Vishnu Nair59329712022-01-13 07:59:37 -080021#include "renderengine/impl/ExternalTexture.h"
ramindanibab8ba92021-11-18 01:24:11 +000022
ramindanibab8ba92021-11-18 01:24:11 +000023namespace aidl::android::hardware::graphics::composer3::vts {
24
25const std::vector<ColorMode> ReadbackHelper::colorModes = {ColorMode::SRGB, ColorMode::DISPLAY_P3};
26const std::vector<Dataspace> ReadbackHelper::dataspaces = {common::Dataspace::SRGB,
27 common::Dataspace::DISPLAY_P3};
28
Ady Abraham91c9d1a2021-12-15 18:14:45 -080029void TestLayer::write(ComposerClientWriter& writer) {
Ady Abraham3192f3d2021-12-03 16:08:56 -080030 writer.setLayerDisplayFrame(mDisplay, mLayer, mDisplayFrame);
31 writer.setLayerSourceCrop(mDisplay, mLayer, mSourceCrop);
32 writer.setLayerZOrder(mDisplay, mLayer, mZOrder);
33 writer.setLayerSurfaceDamage(mDisplay, mLayer, mSurfaceDamage);
34 writer.setLayerTransform(mDisplay, mLayer, mTransform);
35 writer.setLayerPlaneAlpha(mDisplay, mLayer, mAlpha);
36 writer.setLayerBlendMode(mDisplay, mLayer, mBlendMode);
Alec Mourib1f16722022-02-07 13:03:44 -080037 writer.setLayerBrightness(mDisplay, mLayer, mBrightness);
Alec Mourif6c039a2023-10-06 23:02:17 +000038 writer.setLayerDataspace(mDisplay, mLayer, mDataspace);
ramindanibab8ba92021-11-18 01:24:11 +000039}
40
41std::string ReadbackHelper::getColorModeString(ColorMode mode) {
42 switch (mode) {
43 case ColorMode::SRGB:
44 return {"SRGB"};
45 case ColorMode::DISPLAY_P3:
46 return {"DISPLAY_P3"};
47 default:
48 return {"Unsupported color mode for readback"};
49 }
50}
51
52std::string ReadbackHelper::getDataspaceString(common::Dataspace dataspace) {
53 switch (dataspace) {
54 case common::Dataspace::SRGB:
55 return {"SRGB"};
56 case common::Dataspace::DISPLAY_P3:
57 return {"DISPLAY_P3"};
58 case common::Dataspace::UNKNOWN:
59 return {"UNKNOWN"};
60 default:
61 return {"Unsupported dataspace for readback"};
62 }
63}
64
65Dataspace ReadbackHelper::getDataspaceForColorMode(ColorMode mode) {
66 switch (mode) {
67 case ColorMode::DISPLAY_P3:
68 return Dataspace::DISPLAY_P3;
69 case ColorMode::SRGB:
Sally Qi0ca29272024-02-23 11:07:08 -080070 return Dataspace::SRGB;
ramindanibab8ba92021-11-18 01:24:11 +000071 default:
Sally Qi0ca29272024-02-23 11:07:08 -080072 return Dataspace::UNKNOWN;
ramindanibab8ba92021-11-18 01:24:11 +000073 }
74}
75
76LayerSettings TestLayer::toRenderEngineLayerSettings() {
77 LayerSettings layerSettings;
78
79 layerSettings.alpha = ::android::half(mAlpha);
80 layerSettings.disableBlending = mBlendMode == BlendMode::NONE;
ramindanic7585d92022-04-15 18:30:41 +000081 layerSettings.source.buffer.isOpaque = mBlendMode == BlendMode::NONE;
ramindanibab8ba92021-11-18 01:24:11 +000082 layerSettings.geometry.boundaries = ::android::FloatRect(
83 static_cast<float>(mDisplayFrame.left), static_cast<float>(mDisplayFrame.top),
84 static_cast<float>(mDisplayFrame.right), static_cast<float>(mDisplayFrame.bottom));
85
86 const ::android::mat4 translation = ::android::mat4::translate(::android::vec4(
87 (static_cast<uint64_t>(mTransform) & static_cast<uint64_t>(Transform::FLIP_H)
88 ? static_cast<float>(-mDisplayFrame.right)
89 : 0.0f),
90 (static_cast<uint64_t>(mTransform) & static_cast<uint64_t>(Transform::FLIP_V)
91 ? static_cast<float>(-mDisplayFrame.bottom)
92 : 0.0f),
93 0.0f, 1.0f));
94
95 const ::android::mat4 scale = ::android::mat4::scale(::android::vec4(
96 static_cast<uint64_t>(mTransform) & static_cast<uint64_t>(Transform::FLIP_H) ? -1.0f
97 : 1.0f,
98 static_cast<uint64_t>(mTransform) & static_cast<uint64_t>(Transform::FLIP_V) ? -1.0f
99 : 1.0f,
100 1.0f, 1.0f));
101
102 layerSettings.geometry.positionTransform = scale * translation;
Alec Mouri51067012022-01-06 17:28:39 -0800103 layerSettings.whitePointNits = mWhitePointNits;
Alec Mourif6c039a2023-10-06 23:02:17 +0000104 layerSettings.sourceDataspace = static_cast<::android::ui::Dataspace>(mDataspace);
ramindanibab8ba92021-11-18 01:24:11 +0000105
106 return layerSettings;
107}
108
Brian Lindahle887a252023-01-17 14:54:19 -0700109int32_t ReadbackHelper::GetBytesPerPixel(common::PixelFormat pixelFormat) {
ramindanibab8ba92021-11-18 01:24:11 +0000110 switch (pixelFormat) {
Brian Lindahle887a252023-01-17 14:54:19 -0700111 case common::PixelFormat::RGBA_8888:
ramindanibab8ba92021-11-18 01:24:11 +0000112 return 4;
Brian Lindahle887a252023-01-17 14:54:19 -0700113 case common::PixelFormat::RGB_888:
ramindanibab8ba92021-11-18 01:24:11 +0000114 return 3;
115 default:
116 return -1;
117 }
118}
119
120void ReadbackHelper::fillBuffer(uint32_t width, uint32_t height, uint32_t stride, void* bufferData,
121 common::PixelFormat pixelFormat,
Brian Lindahle887a252023-01-17 14:54:19 -0700122 std::vector<Color> desiredPixelColors) {
ramindanibab8ba92021-11-18 01:24:11 +0000123 ASSERT_TRUE(pixelFormat == common::PixelFormat::RGB_888 ||
124 pixelFormat == common::PixelFormat::RGBA_8888);
125 int32_t bytesPerPixel = GetBytesPerPixel(pixelFormat);
126 ASSERT_NE(-1, bytesPerPixel);
127 for (int row = 0; row < height; row++) {
128 for (int col = 0; col < width; col++) {
Brian Lindahle887a252023-01-17 14:54:19 -0700129 auto pixel = row * static_cast<int32_t>(width) + col;
130 Color srcColor = desiredPixelColors[static_cast<size_t>(pixel)];
ramindanibab8ba92021-11-18 01:24:11 +0000131
132 int offset = (row * static_cast<int32_t>(stride) + col) * bytesPerPixel;
133 uint8_t* pixelColor = (uint8_t*)bufferData + offset;
Brian Lindahle887a252023-01-17 14:54:19 -0700134 pixelColor[0] = static_cast<uint8_t>(std::round(255.0f * srcColor.r));
135 pixelColor[1] = static_cast<uint8_t>(std::round(255.0f * srcColor.g));
136 pixelColor[2] = static_cast<uint8_t>(std::round(255.0f * srcColor.b));
ramindanibab8ba92021-11-18 01:24:11 +0000137
138 if (bytesPerPixel == 4) {
Brian Lindahle887a252023-01-17 14:54:19 -0700139 pixelColor[3] = static_cast<uint8_t>(std::round(255.0f * srcColor.a));
ramindanibab8ba92021-11-18 01:24:11 +0000140 }
141 }
142 }
143}
144
Brian Lindahle887a252023-01-17 14:54:19 -0700145void ReadbackHelper::clearColors(std::vector<Color>& expectedColors, int32_t width, int32_t height,
ramindanibab8ba92021-11-18 01:24:11 +0000146 int32_t displayWidth) {
147 for (int row = 0; row < height; row++) {
148 for (int col = 0; col < width; col++) {
149 int pixel = row * displayWidth + col;
Brian Lindahle887a252023-01-17 14:54:19 -0700150 expectedColors[static_cast<size_t>(pixel)] = BLACK;
ramindanibab8ba92021-11-18 01:24:11 +0000151 }
152 }
153}
154
Brian Lindahle887a252023-01-17 14:54:19 -0700155void ReadbackHelper::fillColorsArea(std::vector<Color>& expectedColors, int32_t stride, Rect area,
156 Color color) {
ramindanibab8ba92021-11-18 01:24:11 +0000157 for (int row = area.top; row < area.bottom; row++) {
158 for (int col = area.left; col < area.right; col++) {
159 int pixel = row * stride + col;
Brian Lindahle887a252023-01-17 14:54:19 -0700160 expectedColors[static_cast<size_t>(pixel)] = color;
ramindanibab8ba92021-11-18 01:24:11 +0000161 }
162 }
163}
164
Brian Lindahle887a252023-01-17 14:54:19 -0700165bool ReadbackHelper::readbackSupported(const common::PixelFormat& pixelFormat,
166 const common::Dataspace& dataspace) {
167 if (pixelFormat != common::PixelFormat::RGB_888 &&
168 pixelFormat != common::PixelFormat::RGBA_8888) {
169 return false;
Brian Lindahld103cd62022-12-09 07:26:28 -0700170 }
Brian Lindahle887a252023-01-17 14:54:19 -0700171 if (std::find(dataspaces.begin(), dataspaces.end(), dataspace) == dataspaces.end()) {
172 return false;
173 }
174 return true;
175}
176
177void ReadbackHelper::compareColorBuffers(const std::vector<Color>& expectedColors, void* bufferData,
178 const uint32_t stride, const uint32_t width,
179 const uint32_t height, common::PixelFormat pixelFormat) {
180 const int32_t bytesPerPixel = ReadbackHelper::GetBytesPerPixel(pixelFormat);
ramindanibab8ba92021-11-18 01:24:11 +0000181 ASSERT_NE(-1, bytesPerPixel);
Brian Lindahle887a252023-01-17 14:54:19 -0700182 for (int row = 0; row < height; row++) {
183 for (int col = 0; col < width; col++) {
184 auto pixel = row * static_cast<int32_t>(width) + col;
Alec Mouri3e037cf2022-01-24 08:58:28 -0800185 int offset = (row * static_cast<int32_t>(stride) + col) * bytesPerPixel;
Brian Lindahle887a252023-01-17 14:54:19 -0700186 uint8_t* pixelColor = (uint8_t*)bufferData + offset;
Ady Abraham1bee7ab2022-01-06 17:22:08 -0800187 const Color expectedColor = expectedColors[static_cast<size_t>(pixel)];
Ady Abraham1bee7ab2022-01-06 17:22:08 -0800188 ASSERT_EQ(std::round(255.0f * expectedColor.r), pixelColor[0]);
189 ASSERT_EQ(std::round(255.0f * expectedColor.g), pixelColor[1]);
190 ASSERT_EQ(std::round(255.0f * expectedColor.b), pixelColor[2]);
ramindanibab8ba92021-11-18 01:24:11 +0000191 }
192 }
193}
194
Alec Mourif6c039a2023-10-06 23:02:17 +0000195void ReadbackHelper::compareColorBuffers(void* expectedBuffer, void* actualBuffer,
196 const uint32_t stride, const uint32_t width,
197 const uint32_t height, common::PixelFormat pixelFormat) {
198 const int32_t bytesPerPixel = ReadbackHelper::GetBytesPerPixel(pixelFormat);
199 ASSERT_NE(-1, bytesPerPixel);
200 for (int row = 0; row < height; row++) {
201 for (int col = 0; col < width; col++) {
202 int offset = (row * static_cast<int32_t>(stride) + col) * bytesPerPixel;
203 uint8_t* expectedColor = (uint8_t*)expectedBuffer + offset;
204 uint8_t* actualColor = (uint8_t*)actualBuffer + offset;
205 ASSERT_EQ(expectedColor[0], actualColor[0]);
206 ASSERT_EQ(expectedColor[1], actualColor[1]);
207 ASSERT_EQ(expectedColor[2], actualColor[2]);
208 }
209 }
210}
211
ramindanidcecfd42022-02-03 23:52:19 +0000212ReadbackBuffer::ReadbackBuffer(int64_t display, const std::shared_ptr<VtsComposerClient>& client,
Brian Lindahle887a252023-01-17 14:54:19 -0700213 int32_t width, int32_t height, common::PixelFormat pixelFormat,
214 common::Dataspace dataspace)
ramindanidcecfd42022-02-03 23:52:19 +0000215 : mComposerClient(client) {
ramindanibab8ba92021-11-18 01:24:11 +0000216 mDisplay = display;
Brian Lindahle887a252023-01-17 14:54:19 -0700217
218 mPixelFormat = pixelFormat;
219 mDataspace = dataspace;
220
ramindanibab8ba92021-11-18 01:24:11 +0000221 mWidth = static_cast<uint32_t>(width);
222 mHeight = static_cast<uint32_t>(height);
223 mLayerCount = 1;
224 mUsage = static_cast<uint64_t>(static_cast<uint64_t>(common::BufferUsage::CPU_READ_OFTEN) |
225 static_cast<uint64_t>(common::BufferUsage::GPU_TEXTURE));
Brian Lindahle887a252023-01-17 14:54:19 -0700226
227 mAccessRegion.top = 0;
228 mAccessRegion.left = 0;
229 mAccessRegion.right = static_cast<int32_t>(width);
230 mAccessRegion.bottom = static_cast<int32_t>(height);
231}
232
233::android::sp<::android::GraphicBuffer> ReadbackBuffer::allocateBuffer() {
234 return ::android::sp<::android::GraphicBuffer>::make(
235 mWidth, mHeight, static_cast<::android::PixelFormat>(mPixelFormat), mLayerCount, mUsage,
236 "ReadbackBuffer");
ramindanibab8ba92021-11-18 01:24:11 +0000237}
238
239void ReadbackBuffer::setReadbackBuffer() {
Brian Lindahle887a252023-01-17 14:54:19 -0700240 mGraphicBuffer = allocateBuffer();
ramindanibab8ba92021-11-18 01:24:11 +0000241 ASSERT_NE(nullptr, mGraphicBuffer);
242 ASSERT_EQ(::android::OK, mGraphicBuffer->initCheck());
Brian Lindahle887a252023-01-17 14:54:19 -0700243 const auto& bufferHandle = mGraphicBuffer->handle;
244 ::ndk::ScopedFileDescriptor fence = ::ndk::ScopedFileDescriptor(-1);
245 EXPECT_TRUE(mComposerClient->setReadbackBuffer(mDisplay, bufferHandle, fence).isOk());
ramindanibab8ba92021-11-18 01:24:11 +0000246}
247
ramindanidcecfd42022-02-03 23:52:19 +0000248void ReadbackBuffer::checkReadbackBuffer(const std::vector<Color>& expectedColors) {
Brian Lindahle887a252023-01-17 14:54:19 -0700249 ASSERT_NE(nullptr, mGraphicBuffer);
ramindanibab8ba92021-11-18 01:24:11 +0000250 // lock buffer for reading
ramindanidcecfd42022-02-03 23:52:19 +0000251 const auto& [fenceStatus, bufferFence] = mComposerClient->getReadbackBufferFence(mDisplay);
Brian Lindahle887a252023-01-17 14:54:19 -0700252 EXPECT_TRUE(fenceStatus.isOk());
253
254 int bytesPerPixel = -1;
255 int bytesPerStride = -1;
256 void* bufData = nullptr;
257
258 auto status = mGraphicBuffer->lockAsync(mUsage, mAccessRegion, &bufData, dup(bufferFence.get()),
259 &bytesPerPixel, &bytesPerStride);
260 EXPECT_EQ(::android::OK, status);
261 ASSERT_TRUE(mPixelFormat == PixelFormat::RGB_888 || mPixelFormat == PixelFormat::RGBA_8888);
262 const uint32_t stride = (bytesPerPixel > 0 && bytesPerStride > 0)
263 ? static_cast<uint32_t>(bytesPerStride / bytesPerPixel)
264 : mGraphicBuffer->getStride();
265 ReadbackHelper::compareColorBuffers(expectedColors, bufData, stride, mWidth, mHeight,
266 mPixelFormat);
267 status = mGraphicBuffer->unlock();
268 EXPECT_EQ(::android::OK, status);
ramindanibab8ba92021-11-18 01:24:11 +0000269}
270
Alec Mourif6c039a2023-10-06 23:02:17 +0000271::android::sp<::android::GraphicBuffer> ReadbackBuffer::getBuffer() {
272 const auto& [fenceStatus, bufferFence] = mComposerClient->getReadbackBufferFence(mDisplay);
273 EXPECT_TRUE(fenceStatus.isOk());
274 if (bufferFence.get() != -1) {
275 sync_wait(bufferFence.get(), -1);
276 }
277 return mGraphicBuffer;
278}
279
Ady Abraham91c9d1a2021-12-15 18:14:45 -0800280void TestColorLayer::write(ComposerClientWriter& writer) {
ramindanibab8ba92021-11-18 01:24:11 +0000281 TestLayer::write(writer);
Ady Abraham3192f3d2021-12-03 16:08:56 -0800282 writer.setLayerCompositionType(mDisplay, mLayer, Composition::SOLID_COLOR);
283 writer.setLayerColor(mDisplay, mLayer, mColor);
ramindanibab8ba92021-11-18 01:24:11 +0000284}
285
286LayerSettings TestColorLayer::toRenderEngineLayerSettings() {
287 LayerSettings layerSettings = TestLayer::toRenderEngineLayerSettings();
288
Ady Abraham1bee7ab2022-01-06 17:22:08 -0800289 layerSettings.source.solidColor = ::android::half3(mColor.r, mColor.g, mColor.b);
290 layerSettings.alpha = mAlpha * mColor.a;
ramindanibab8ba92021-11-18 01:24:11 +0000291 return layerSettings;
292}
293
ramindanidcecfd42022-02-03 23:52:19 +0000294TestBufferLayer::TestBufferLayer(const std::shared_ptr<VtsComposerClient>& client,
Ady Abraham4aa4ead2021-12-03 16:07:19 -0800295 TestRenderEngine& renderEngine, int64_t display, uint32_t width,
ramindanibab8ba92021-11-18 01:24:11 +0000296 uint32_t height, common::PixelFormat format,
Ady Abrahama00d2462023-12-26 14:21:20 -0800297 ComposerClientWriter& writer, Composition composition)
298 : TestLayer{client, display, writer}, mRenderEngine(renderEngine) {
ramindanibab8ba92021-11-18 01:24:11 +0000299 mComposition = composition;
300 mWidth = width;
301 mHeight = height;
302 mLayerCount = 1;
303 mPixelFormat = format;
304 mUsage = (static_cast<uint64_t>(common::BufferUsage::CPU_READ_OFTEN) |
305 static_cast<uint64_t>(common::BufferUsage::CPU_WRITE_OFTEN) |
306 static_cast<uint64_t>(common::BufferUsage::COMPOSER_OVERLAY) |
307 static_cast<uint64_t>(common::BufferUsage::GPU_TEXTURE));
308
309 mAccessRegion.top = 0;
310 mAccessRegion.left = 0;
311 mAccessRegion.right = static_cast<int32_t>(width);
312 mAccessRegion.bottom = static_cast<int32_t>(height);
313
314 setSourceCrop({0, 0, (float)width, (float)height});
315}
316
Ady Abraham91c9d1a2021-12-15 18:14:45 -0800317void TestBufferLayer::write(ComposerClientWriter& writer) {
ramindanibab8ba92021-11-18 01:24:11 +0000318 TestLayer::write(writer);
Ady Abraham3192f3d2021-12-03 16:08:56 -0800319 writer.setLayerCompositionType(mDisplay, mLayer, mComposition);
320 writer.setLayerVisibleRegion(mDisplay, mLayer, std::vector<Rect>(1, mDisplayFrame));
ramindani0a2bee42022-02-10 01:27:42 +0000321 if (mGraphicBuffer) {
322 writer.setLayerBuffer(mDisplay, mLayer, /*slot*/ 0, mGraphicBuffer->handle, mFillFence);
323 }
ramindanibab8ba92021-11-18 01:24:11 +0000324}
325
326LayerSettings TestBufferLayer::toRenderEngineLayerSettings() {
327 LayerSettings layerSettings = TestLayer::toRenderEngineLayerSettings();
Vishnu Nair59329712022-01-13 07:59:37 -0800328 layerSettings.source.buffer.buffer =
329 std::make_shared<::android::renderengine::impl::ExternalTexture>(
Alec Mouri3e037cf2022-01-24 08:58:28 -0800330 mGraphicBuffer, mRenderEngine.getInternalRenderEngine(),
Vishnu Nair59329712022-01-13 07:59:37 -0800331 ::android::renderengine::impl::ExternalTexture::Usage::READABLE);
ramindanibab8ba92021-11-18 01:24:11 +0000332
333 layerSettings.source.buffer.usePremultipliedAlpha = mBlendMode == BlendMode::PREMULTIPLIED;
334
335 const float scaleX = (mSourceCrop.right - mSourceCrop.left) / (static_cast<float>(mWidth));
336 const float scaleY = (mSourceCrop.bottom - mSourceCrop.top) / (static_cast<float>(mHeight));
337 const float translateX = mSourceCrop.left / (static_cast<float>(mWidth));
338 const float translateY = mSourceCrop.top / (static_cast<float>(mHeight));
339
340 layerSettings.source.buffer.textureTransform =
ramindanidcecfd42022-02-03 23:52:19 +0000341 ::android::mat4::translate(::android::vec4(translateX, translateY, 0.0f, 1.0f)) *
342 ::android::mat4::scale(::android::vec4(scaleX, scaleY, 1.0f, 1.0f));
ramindanibab8ba92021-11-18 01:24:11 +0000343
344 return layerSettings;
345}
346
347void TestBufferLayer::fillBuffer(std::vector<Color>& expectedColors) {
348 void* bufData;
Alec Mouri3e037cf2022-01-24 08:58:28 -0800349 int32_t bytesPerPixel = -1;
350 int32_t bytesPerStride = -1;
351 auto status = mGraphicBuffer->lock(mUsage, &bufData, &bytesPerPixel, &bytesPerStride);
352 const uint32_t stride = (bytesPerPixel > 0 && bytesPerStride > 0)
353 ? static_cast<uint32_t>(bytesPerStride / bytesPerPixel)
354 : mGraphicBuffer->getStride();
Brian Lindahle887a252023-01-17 14:54:19 -0700355 EXPECT_EQ(::android::OK, status);
356 ASSERT_NO_FATAL_FAILURE(ReadbackHelper::fillBuffer(mWidth, mHeight, stride, bufData,
357 mPixelFormat, expectedColors));
ramindani0a2bee42022-02-10 01:27:42 +0000358
359 const auto unlockStatus = mGraphicBuffer->unlockAsync(&mFillFence);
360 ASSERT_EQ(::android::OK, unlockStatus);
ramindanibab8ba92021-11-18 01:24:11 +0000361}
362
363void TestBufferLayer::setBuffer(std::vector<Color> colors) {
ramindani0a2bee42022-02-10 01:27:42 +0000364 mGraphicBuffer = allocateBuffer();
ramindanibab8ba92021-11-18 01:24:11 +0000365 ASSERT_NE(nullptr, mGraphicBuffer);
ramindanibab8ba92021-11-18 01:24:11 +0000366 ASSERT_EQ(::android::OK, mGraphicBuffer->initCheck());
Brian Lindahle887a252023-01-17 14:54:19 -0700367 ASSERT_NO_FATAL_FAILURE(fillBuffer(colors));
ramindani0a2bee42022-02-10 01:27:42 +0000368}
369
Brian Lindahle887a252023-01-17 14:54:19 -0700370::android::sp<::android::GraphicBuffer> TestBufferLayer::allocateBuffer() {
371 return ::android::sp<::android::GraphicBuffer>::make(
372 mWidth, mHeight, static_cast<::android::PixelFormat>(mPixelFormat), mLayerCount, mUsage,
373 "TestBufferLayer");
ramindanibab8ba92021-11-18 01:24:11 +0000374}
375
Ady Abraham91c9d1a2021-12-15 18:14:45 -0800376void TestBufferLayer::setToClientComposition(ComposerClientWriter& writer) {
Ady Abraham3192f3d2021-12-03 16:08:56 -0800377 writer.setLayerCompositionType(mDisplay, mLayer, Composition::CLIENT);
ramindanibab8ba92021-11-18 01:24:11 +0000378}
379
Ady Abraham3192f3d2021-12-03 16:08:56 -0800380} // namespace aidl::android::hardware::graphics::composer3::vts