blob: 99799c1fdabc65fd56cc3cf007731d02f7be3069 [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gtest/gtest.h>
#include <vector>
#include "screen-capture-utils/kmsvnc_utils.h"
namespace screenshot {
void runConvertBuffer(uint32_t crtc_width, uint32_t crtc_height) {
uint32_t stride = crtc_width * kBytesPerPixel;
uint32_t vnc_width = getVncWidth(crtc_width);
uint32_t vnc_height = crtc_height;
// Display buffer initialized with dummy val of 'A'
char dummyDisplayValue = 'A';
std::vector<char> displayBuffer(crtc_width * crtc_height * kBytesPerPixel,
dummyDisplayValue);
std::vector<char> vncBuffer(vnc_width * vnc_height * kBytesPerPixel);
DisplayBuffer::Result display{crtc_width, crtc_height, stride};
display.buffer = displayBuffer.data();
ConvertBuffer(display, vncBuffer.data(), vnc_width);
int index = 0;
bool bufferMatched = true;
int padIdx = crtc_width * kBytesPerPixel;
for (char c : vncBuffer) {
int displayIdx = index % (vnc_width * kBytesPerPixel);
if (displayIdx < padIdx) {
if (c != dummyDisplayValue) {
bufferMatched = false;
break;
}
} else {
if (c != 0) {
bufferMatched = false;
break;
}
}
index++;
}
EXPECT_EQ(bufferMatched, true);
}
TEST(VncServerTest, HandlesPadding) {
EXPECT_EQ(getVncWidth(5), 8);
EXPECT_EQ(getVncWidth(12), 12);
}
TEST(VncServerTest, ConvertBuffer) {
// Given: A display (W x H)
// When: Convert display buffer to VNC Buffer where width is a mult of 4
// Then: VNC Buffer contains display buffer data, but right padded with 0
// if display width is not a multiple of 4
runConvertBuffer(40, 2);
runConvertBuffer(1366, 768); // width not a mult of 4
}
} // namespace screenshot