Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit df307a0

Browse files
committed
Migrate engine to use multi-window API
The goal here is to convert from the window singleton to an API that has the concept of multiple windows. I'm not attempting to actually enable creating multiple windows here, just migrate to an API that has a concept of multiple windows/screens.
1 parent 2a024ea commit df307a0

File tree

120 files changed

+5125
-2909
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+5125
-2909
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,10 +354,12 @@ FILE: ../../../flutter/lib/ui/painting/single_frame_codec.cc
354354
FILE: ../../../flutter/lib/ui/painting/single_frame_codec.h
355355
FILE: ../../../flutter/lib/ui/painting/vertices.cc
356356
FILE: ../../../flutter/lib/ui/painting/vertices.h
357+
FILE: ../../../flutter/lib/ui/platform_dispatcher.dart
357358
FILE: ../../../flutter/lib/ui/plugins.dart
358359
FILE: ../../../flutter/lib/ui/plugins/callback_cache.cc
359360
FILE: ../../../flutter/lib/ui/plugins/callback_cache.h
360361
FILE: ../../../flutter/lib/ui/pointer.dart
362+
FILE: ../../../flutter/lib/ui/screen.dart
361363
FILE: ../../../flutter/lib/ui/semantics.dart
362364
FILE: ../../../flutter/lib/ui/semantics/custom_accessibility_action.cc
363365
FILE: ../../../flutter/lib/ui/semantics/custom_accessibility_action.h
@@ -383,6 +385,8 @@ FILE: ../../../flutter/lib/ui/ui.dart
383385
FILE: ../../../flutter/lib/ui/ui_dart_state.cc
384386
FILE: ../../../flutter/lib/ui/ui_dart_state.h
385387
FILE: ../../../flutter/lib/ui/window.dart
388+
FILE: ../../../flutter/lib/ui/window/platform_configuration.cc
389+
FILE: ../../../flutter/lib/ui/window/platform_configuration.h
386390
FILE: ../../../flutter/lib/ui/window/platform_message.cc
387391
FILE: ../../../flutter/lib/ui/window/platform_message.h
388392
FILE: ../../../flutter/lib/ui/window/platform_message_response.cc
@@ -396,6 +400,10 @@ FILE: ../../../flutter/lib/ui/window/pointer_data_packet.h
396400
FILE: ../../../flutter/lib/ui/window/pointer_data_packet_converter.cc
397401
FILE: ../../../flutter/lib/ui/window/pointer_data_packet_converter.h
398402
FILE: ../../../flutter/lib/ui/window/pointer_data_packet_converter_unittests.cc
403+
FILE: ../../../flutter/lib/ui/window/screen.cc
404+
FILE: ../../../flutter/lib/ui/window/screen.h
405+
FILE: ../../../flutter/lib/ui/window/screen_metrics.cc
406+
FILE: ../../../flutter/lib/ui/window/screen_metrics.h
399407
FILE: ../../../flutter/lib/ui/window/viewport_metrics.cc
400408
FILE: ../../../flutter/lib/ui/window/viewport_metrics.h
401409
FILE: ../../../flutter/lib/ui/window/window.cc
@@ -430,6 +438,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/picture_recorder.dar
430438
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/platform_message.dart
431439
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/raster_cache.dart
432440
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/rasterizer.dart
441+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/screen_metrics.dart
433442
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/surface.dart
434443
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/text.dart
435444
FILE: ../../../flutter/lib/web_ui/lib/src/engine/compositor/util.dart
@@ -448,13 +457,15 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/mouse_cursor.dart
448457
FILE: ../../../flutter/lib/web_ui/lib/src/engine/onscreen_logging.dart
449458
FILE: ../../../flutter/lib/web_ui/lib/src/engine/path_to_svg.dart
450459
FILE: ../../../flutter/lib/web_ui/lib/src/engine/picture.dart
460+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart
451461
FILE: ../../../flutter/lib/web_ui/lib/src/engine/platform_views.dart
452462
FILE: ../../../flutter/lib/web_ui/lib/src/engine/plugins.dart
453463
FILE: ../../../flutter/lib/web_ui/lib/src/engine/pointer_binding.dart
454464
FILE: ../../../flutter/lib/web_ui/lib/src/engine/pointer_converter.dart
455465
FILE: ../../../flutter/lib/web_ui/lib/src/engine/profiler.dart
456466
FILE: ../../../flutter/lib/web_ui/lib/src/engine/render_vertices.dart
457467
FILE: ../../../flutter/lib/web_ui/lib/src/engine/rrect_renderer.dart
468+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/screen.dart
458469
FILE: ../../../flutter/lib/web_ui/lib/src/engine/semantics/accessibility.dart
459470
FILE: ../../../flutter/lib/web_ui/lib/src/engine/semantics/checkable.dart
460471
FILE: ../../../flutter/lib/web_ui/lib/src/engine/semantics/image.dart
@@ -519,7 +530,9 @@ FILE: ../../../flutter/lib/web_ui/lib/src/ui/natives.dart
519530
FILE: ../../../flutter/lib/web_ui/lib/src/ui/painting.dart
520531
FILE: ../../../flutter/lib/web_ui/lib/src/ui/path.dart
521532
FILE: ../../../flutter/lib/web_ui/lib/src/ui/path_metrics.dart
533+
FILE: ../../../flutter/lib/web_ui/lib/src/ui/platform_dispatcher.dart
522534
FILE: ../../../flutter/lib/web_ui/lib/src/ui/pointer.dart
535+
FILE: ../../../flutter/lib/web_ui/lib/src/ui/screen.dart
523536
FILE: ../../../flutter/lib/web_ui/lib/src/ui/semantics.dart
524537
FILE: ../../../flutter/lib/web_ui/lib/src/ui/test_embedding.dart
525538
FILE: ../../../flutter/lib/web_ui/lib/src/ui/text.dart

fml/ascii_trie.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifndef FLUTTER_FML_ASCIITRIE_H_
66
#define FLUTTER_FML_ASCIITRIE_H_
77

8+
#include <memory>
89
#include <string>
910
#include <vector>
1011

lib/ui/BUILD.gn

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ source_set("ui") {
8989
"text/text_box.h",
9090
"ui_dart_state.cc",
9191
"ui_dart_state.h",
92+
"window/platform_configuration.cc",
93+
"window/platform_configuration.h",
9294
"window/platform_message.cc",
9395
"window/platform_message.h",
9496
"window/platform_message_response.cc",
@@ -101,6 +103,10 @@ source_set("ui") {
101103
"window/pointer_data_packet.h",
102104
"window/pointer_data_packet_converter.cc",
103105
"window/pointer_data_packet_converter.h",
106+
"window/screen.cc",
107+
"window/screen.h",
108+
"window/screen_metrics.cc",
109+
"window/screen_metrics.h",
104110
"window/viewport_metrics.cc",
105111
"window/viewport_metrics.h",
106112
"window/window.cc",

lib/ui/compositing.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ part of dart.ui;
1010
/// To create a Scene object, use a [SceneBuilder].
1111
///
1212
/// Scene objects can be displayed on the screen using the
13-
/// [Window.render] method.
13+
/// [FlutterWindow.render] method.
1414
@pragma('vm:entry-point')
1515
class Scene extends NativeFieldWrapperClass2 {
1616
/// This class is created by the engine, and should not be instantiated
@@ -178,7 +178,7 @@ class PhysicalShapeEngineLayer extends _EngineLayerWrapper {
178178

179179
/// Builds a [Scene] containing the given visuals.
180180
///
181-
/// A [Scene] can then be rendered using [Window.render].
181+
/// A [Scene] can then be rendered using [FlutterWindow.render].
182182
///
183183
/// To draw graphical operations onto a [Scene], first create a
184184
/// [Picture] using a [PictureRecorder] and a [Canvas], and then add
@@ -653,8 +653,8 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
653653
///
654654
/// The "UI thread" is the thread that includes all the execution of
655655
/// the main Dart isolate (the isolate that can call
656-
/// [Window.render]). The UI thread frame time is the total time
657-
/// spent executing the [Window.onBeginFrame] callback. The "raster
656+
/// [FlutterWindow.render]). The UI thread frame time is the total time
657+
/// spent executing the [FlutterWindow.onBeginFrame] callback. The "raster
658658
/// thread" is the thread (running on the CPU) that subsequently
659659
/// processes the [Scene] provided by the Dart code to turn it into
660660
/// GPU commands and send it to the GPU.
@@ -797,7 +797,7 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
797797
///
798798
/// Returns a [Scene] containing the objects that have been added to
799799
/// this scene builder. The [Scene] can then be displayed on the
800-
/// screen with [Window.render].
800+
/// screen with [FlutterWindow.render].
801801
///
802802
/// After calling this function, the scene builder object is invalid and
803803
/// cannot be used further.

lib/ui/compositing/scene.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "flutter/lib/ui/painting/image.h"
99
#include "flutter/lib/ui/painting/picture.h"
1010
#include "flutter/lib/ui/ui_dart_state.h"
11+
#include "flutter/lib/ui/window/platform_configuration.h"
1112
#include "flutter/lib/ui/window/window.h"
1213
#include "third_party/skia/include/core/SkImageInfo.h"
1314
#include "third_party/skia/include/core/SkSurface.h"
@@ -41,13 +42,21 @@ Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,
4142
uint32_t rasterizerTracingThreshold,
4243
bool checkerboardRasterCacheImages,
4344
bool checkerboardOffscreenLayers) {
44-
auto viewport_metrics = UIDartState::Current()->window()->viewport_metrics();
45+
// Currently only support a single window on a single screen.
46+
auto viewport_metrics = UIDartState::Current()
47+
->platform_configuration()
48+
->get_window(0)
49+
->viewport_metrics();
50+
auto screen_metrics = UIDartState::Current()
51+
->platform_configuration()
52+
->get_screen(0)
53+
->screen_metrics();
4554

4655
layer_tree_ = std::make_unique<LayerTree>(
4756
SkISize::Make(viewport_metrics.physical_width,
4857
viewport_metrics.physical_height),
4958
static_cast<float>(viewport_metrics.physical_depth),
50-
static_cast<float>(viewport_metrics.device_pixel_ratio));
59+
static_cast<float>(screen_metrics.device_pixel_ratio));
5160
layer_tree_->set_root_layer(std::move(rootLayer));
5261
layer_tree_->set_rasterizer_tracing_threshold(rasterizerTracingThreshold);
5362
layer_tree_->set_checkerboard_raster_cache_images(

lib/ui/dart_ui.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include "flutter/lib/ui/text/font_collection.h"
2929
#include "flutter/lib/ui/text/paragraph.h"
3030
#include "flutter/lib/ui/text/paragraph_builder.h"
31-
#include "flutter/lib/ui/window/window.h"
31+
#include "flutter/lib/ui/window/platform_configuration.h"
3232
#include "third_party/tonic/converter/dart_converter.h"
3333
#include "third_party/tonic/logging/dart_error.h"
3434

@@ -81,7 +81,7 @@ void DartUI::InitForGlobal() {
8181
SemanticsUpdate::RegisterNatives(g_natives);
8282
SemanticsUpdateBuilder::RegisterNatives(g_natives);
8383
Vertices::RegisterNatives(g_natives);
84-
Window::RegisterNatives(g_natives);
84+
PlatformConfiguration::RegisterNatives(g_natives);
8585
#if defined(OS_FUCHSIA)
8686
SceneHost::RegisterNatives(g_natives);
8787
#endif

lib/ui/dart_ui.gni

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ dart_ui_files = [
1212
"//flutter/lib/ui/isolate_name_server.dart",
1313
"//flutter/lib/ui/lerp.dart",
1414
"//flutter/lib/ui/natives.dart",
15+
"//flutter/lib/ui/platform_dispatcher.dart",
1516
"//flutter/lib/ui/painting.dart",
1617
"//flutter/lib/ui/plugins.dart",
1718
"//flutter/lib/ui/pointer.dart",
19+
"//flutter/lib/ui/screen.dart",
1820
"//flutter/lib/ui/semantics.dart",
1921
"//flutter/lib/ui/text.dart",
2022
"//flutter/lib/ui/ui.dart",

0 commit comments

Comments
 (0)