14#include "gmock/gmock.h"
15#include "gtest/gtest.h"
21using ::testing::Return;
23class MockFlutterWindowsView :
public FlutterWindowsView {
26 std::unique_ptr<WindowBindingHandler>
window)
35 PresentSoftwareBitmap,
36 (
const void* allocation,
size_t row_bytes,
size_t height),
38 MOCK_METHOD(
bool, ClearSoftwareBitmap, (), (
override));
44class CompositorSoftwareTest :
public WindowsTest {
46 CompositorSoftwareTest() =
default;
47 virtual ~CompositorSoftwareTest() =
default;
50 FlutterWindowsEngine*
engine() {
return engine_.get(); }
51 MockFlutterWindowsView*
view() {
return view_.get(); }
53 void UseEngineWithView() {
54 FlutterWindowsEngineBuilder builder{GetContext()};
56 auto window = std::make_unique<MockWindowBindingHandler>();
57 EXPECT_CALL(*
window.get(), SetView).Times(1);
58 EXPECT_CALL(*
window.get(), GetWindowHandle).WillRepeatedly(Return(
nullptr));
60 engine_ = builder.Build();
61 view_ = std::make_unique<MockFlutterWindowsView>(engine_.get(),
66 std::unique_ptr<FlutterWindowsEngine> engine_;
67 std::unique_ptr<MockFlutterWindowsView> view_;
74TEST_F(CompositorSoftwareTest, CreateBackingStore) {
84TEST_F(CompositorSoftwareTest, Present) {
99 EXPECT_CALL(*
view(), PresentSoftwareBitmap).WillOnce(Return(
true));
100 EXPECT_TRUE(compositor.
Present(
view(), &layer_ptr, 1));
105TEST_F(CompositorSoftwareTest, PresentEmpty) {
110 EXPECT_CALL(*
view(), ClearSoftwareBitmap).WillOnce(Return(
true));
111 EXPECT_TRUE(compositor.
Present(
view(),
nullptr, 0));
121TEST_F(CompositorSoftwareTest, PresentMultiLayers) {
133 uint32_t pixels0[4] = {0xff000000, 0xff0000ff, 0xff00ff00, 0xffffffff};
134 uint32_t pixels1[4] = {0x7f0000ff, 0x00ffffff, 0x7fff0000, 0xff000000};
137 sizeof(uint32_t) * 4);
139 sizeof(uint32_t) * 4);
145 layer0.
size = {2, 2};
151 EXPECT_CALL(*
view(), PresentSoftwareBitmap)
152 .WillOnce([&](
const void* allocation,
size_t row_bytes,
size_t height) {
153 auto pixel_data =
static_cast<const uint32_t*
>(allocation);
154 EXPECT_EQ(row_bytes, 2 *
sizeof(uint32_t));
156 EXPECT_EQ(pixel_data[0], 0xff00007f);
157 EXPECT_EQ(pixel_data[1], 0xff0000ff);
158 EXPECT_EQ(pixel_data[2], 0xff7f8000);
159 EXPECT_EQ(pixel_data[3], 0xff000000);
162 EXPECT_TRUE(compositor.
Present(
view(), layer_ptr, 2));
171TEST_F(CompositorSoftwareTest, PresentOffsetLayers) {
186 uint32_t pixels0 = 0xff0000ff;
187 uint32_t pixels1[2] = {0xffff0000, 0xffff0000};
190 sizeof(uint32_t) * 1);
192 sizeof(uint32_t) * 2);
198 layer0.
size = {1, 1};
203 layer1.
size = {2, 1};
206 EXPECT_CALL(*
view(), PresentSoftwareBitmap)
207 .WillOnce([&](
const void* allocation,
size_t row_bytes,
size_t height) {
208 auto pixel_data =
static_cast<const uint32_t*
>(allocation);
209 EXPECT_EQ(row_bytes, 2 *
sizeof(uint32_t));
211 EXPECT_EQ(pixel_data[0], 0xff0000ff);
212 EXPECT_EQ(pixel_data[1], 0xff000000);
213 EXPECT_EQ(pixel_data[2], 0xffff0000);
214 EXPECT_EQ(pixel_data[3], 0xffff0000);
217 EXPECT_TRUE(compositor.
Present(
view(), layer_ptr, 2));
bool CollectBackingStore(const FlutterBackingStore *store) override
|Compositor|
bool Present(FlutterWindowsView *view, const FlutterLayer **layers, size_t layers_count) override
|Compositor|
bool CreateBackingStore(const FlutterBackingStoreConfig &config, FlutterBackingStore *result) override
|Compositor|
FlutterWindowsView(FlutterViewId view_id, FlutterWindowsEngine *engine, std::unique_ptr< WindowBindingHandler > window_binding, bool is_sized_to_content, const BoxConstraints &box_constraints, FlutterWindowsViewSizingDelegate *sizing_delegate=nullptr, std::shared_ptr< WindowsProcTable > windows_proc_table=nullptr)
~MockFlutterWindowsView()
MOCK_METHOD(void, NotifyWinEventWrapper,(ui::AXPlatformNodeWin *, ax::mojom::Event),(override))
MockFlutterWindowsView(FlutterWindowsEngine *engine, std::unique_ptr< WindowBindingHandler > wbh)
@ kFlutterLayerContentTypeBackingStore
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
TEST_F(DisplayListTest, Defaults)
constexpr int64_t kImplicitViewId
FlutterSoftwareBackingStore software
The description of the software backing store.
FlutterLayerContentType type
const FlutterBackingStore * backing_store
FlutterSize size
The size of the layer (in physical pixels).