blob: e44801574aad0fde7618e840795a71ffc307e880 [file] [edit]
// Copyright 2025 The Fuchsia 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 "src/graphics/display/drivers/coordinator/fidl-conversion.h"
#include <fidl/fuchsia.hardware.display.engine/cpp/wire.h>
#include <lib/fdf/cpp/arena.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/graphics/display/drivers/coordinator/driver-display-config.h"
#include "src/graphics/display/lib/api-types/cpp/color-conversion.h"
#include "src/graphics/display/lib/api-types/cpp/display-id.h"
#include "src/graphics/display/lib/api-types/cpp/driver-layer.h"
#include "src/graphics/display/lib/api-types/cpp/mode-id.h"
namespace display_coordinator {
namespace {
TEST(FidlConversionTest, ToFidlDisplayConfig) {
const display::DriverLayer kLayer0({
.display_destination = display::Rectangle({.x = 10, .y = 20, .width = 300, .height = 400}),
.image_source = display::Rectangle({.x = 30, .y = 40, .width = 500, .height = 600}),
.image_id = display::DriverImageId(4242),
.image_metadata = display::ImageMetadata(
{.width = 700, .height = 800, .tiling_type = display::ImageTilingType::kLinear}),
.fallback_color = display::Color({.format = display::PixelFormat::kR8G8B8A8,
.bytes = {{0xff, 0xdd, 0xcc, 0xbb, 0, 0, 0, 0}}}),
.alpha_mode = display::AlphaMode::kPremultiplied,
.alpha_coefficient = 0.25f,
.image_source_transformation = display::CoordinateTransformation::kReflectX,
});
const display::DriverLayer kLayer1({
.display_destination = display::Rectangle({.x = 11, .y = 22, .width = 303, .height = 404}),
.image_source = display::Rectangle({.x = 33, .y = 44, .width = 505, .height = 606}),
.image_id = display::DriverImageId(2424),
.image_metadata = display::ImageMetadata(
{.width = 707, .height = 808, .tiling_type = display::ImageTilingType::kLinear}),
.fallback_color = display::Color({.format = display::PixelFormat::kR8G8B8A8,
.bytes = {{0xaa, 0x99, 0x88, 0x77, 0, 0, 0, 0}}}),
.alpha_mode = display::AlphaMode::kHwMultiply,
.alpha_coefficient = 0.75f,
.image_source_transformation = display::CoordinateTransformation::kReflectY,
});
const display::DriverLayer kLayers[] = {kLayer0, kLayer1};
const DriverDisplayConfig kDisplayConfig = {
.display_id = display::DisplayId(1),
.mode_id = display::ModeId(2),
.color_conversion = display::ColorConversion({
.preoffsets = {0.1f, 0.2f, 0.3f},
.coefficients =
{
std::array<float, 3>{1.0f, 2.0f, 3.0f},
std::array<float, 3>{4.0f, 5.0f, 6.0f},
std::array<float, 3>{7.0f, 8.0f, 9.0f},
},
.postoffsets = {0.4f, 0.5f, 0.6f},
}),
.layer_count = 2,
};
fdf::Arena arena('TEST');
fuchsia_hardware_display_engine::wire::DisplayConfig fidl_config =
ToFidlDisplayConfig(kDisplayConfig, kLayers, arena);
EXPECT_EQ(fidl_config.display_id.value, 1u);
EXPECT_EQ(fidl_config.mode_id.value, 2u);
EXPECT_THAT(fidl_config.color_conversion.preoffsets, ::testing::ElementsAre(0.1f, 0.2f, 0.3f));
ASSERT_EQ(fidl_config.color_conversion.coefficients.size(), 3u);
EXPECT_THAT(fidl_config.color_conversion.coefficients[0],
::testing::ElementsAre(1.0f, 2.0f, 3.0f));
EXPECT_THAT(fidl_config.color_conversion.coefficients[1],
::testing::ElementsAre(4.0f, 5.0f, 6.0f));
EXPECT_THAT(fidl_config.color_conversion.coefficients[2],
::testing::ElementsAre(7.0f, 8.0f, 9.0f));
EXPECT_THAT(fidl_config.color_conversion.postoffsets, ::testing::ElementsAre(0.4f, 0.5f, 0.6f));
ASSERT_EQ(fidl_config.layers.size(), 2u);
EXPECT_EQ(display::DriverLayer(fidl_config.layers[0]), kLayer0);
EXPECT_EQ(display::DriverLayer(fidl_config.layers[1]), kLayer1);
}
} // namespace
} // namespace display_coordinator