6 #include "gtest/gtest.h"
8 #include "flutter/common/constants.h"
9 #include "flutter/fml/synchronization/waitable_event.h"
14 #include <gdk/gdkwayland.h>
16 TEST(FlCompositorSoftwareTest, Render) {
21 g_autoptr(FlCompositorSoftware) compositor =
25 constexpr
size_t width = 100;
26 constexpr
size_t height = 100;
27 size_t row_bytes =
width * 4;
28 g_autofree
unsigned char* layer_data =
29 static_cast<unsigned char*
>(malloc(
height * row_bytes));
30 FlutterBackingStore backing_store = {
31 .type = kFlutterBackingStoreTypeSoftware,
33 .allocation = layer_data, .row_bytes = row_bytes, .height =
height}};
34 FlutterLayer layer = {.type = kFlutterLayerContentTypeBackingStore,
35 .backing_store = &backing_store,
38 const FlutterLayer*
layers[1] = {&layer};
44 int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32,
width);
45 g_autofree
unsigned char* image_data =
46 static_cast<unsigned char*
>(malloc(
height * stride));
47 cairo_surface_t* surface = cairo_image_surface_create_for_data(
48 image_data, CAIRO_FORMAT_ARGB32,
width,
height, stride);
49 cairo_t* cr = cairo_create(surface);
51 cairo_surface_destroy(surface);
55 TEST(FlCompositorSoftwareTest, Resize) {
60 g_autoptr(FlCompositorSoftware) compositor =
64 constexpr
size_t width1 = 90;
65 constexpr
size_t height1 = 90;
66 size_t row_bytes = width1 * 4;
67 g_autofree
unsigned char* layer1_data =
68 static_cast<unsigned char*
>(malloc(height1 * row_bytes));
69 FlutterBackingStore backing_store1 = {
70 .type = kFlutterBackingStoreTypeSoftware,
71 .software = {.allocation = layer1_data,
72 .row_bytes = row_bytes,
74 FlutterLayer layer1 = {.type = kFlutterLayerContentTypeBackingStore,
75 .backing_store = &backing_store1,
77 .size = {width1, height1}};
78 const FlutterLayer* layers1[1] = {&layer1};
84 constexpr
size_t width2 = 100;
85 constexpr
size_t height2 = 100;
86 row_bytes = width2 * 4;
87 g_autofree
unsigned char* layer2_data =
88 static_cast<unsigned char*
>(malloc(height2 * row_bytes));
89 FlutterBackingStore backing_store2 = {
90 .type = kFlutterBackingStoreTypeSoftware,
91 .software = {.allocation = layer2_data,
92 .row_bytes = row_bytes,
94 FlutterLayer layer2 = {.type = kFlutterLayerContentTypeBackingStore,
95 .backing_store = &backing_store2,
97 .size = {width2, height2}};
98 const FlutterLayer* layers2[1] = {&layer2};
99 fml::AutoResetWaitableEvent latch;
106 int stride2 = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width2);
107 g_autofree
unsigned char* image_data =
108 static_cast<unsigned char*
>(malloc(height2 * stride2));
109 cairo_surface_t* surface = cairo_image_surface_create_for_data(
110 image_data, CAIRO_FORMAT_ARGB32, width2, height2, stride2);
111 cairo_t* cr = cairo_create(surface);
113 cairo_surface_destroy(surface);
gboolean fl_compositor_render(FlCompositor *self, cairo_t *cr, GdkWindow *window)
gboolean fl_compositor_present_layers(FlCompositor *self, const FlutterLayer **layers, size_t layers_count)
const FlutterLayer ** layers
g_autoptr(GMutexLocker) locker
FlCompositorSoftware * fl_compositor_software_new(FlTaskRunner *task_runner)
TEST(FlCompositorSoftwareTest, Render)
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
G_MODULE_EXPORT FlEngine * fl_engine_new(FlDartProject *project)
FlTaskRunner * fl_task_runner_new(FlEngine *engine)