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

Commit c29808b

Browse files
Merge branch 'main' into pr/hterkelsen/42672
2 parents 3a90473 + ff2f710 commit c29808b

File tree

17 files changed

+508
-25
lines changed

17 files changed

+508
-25
lines changed

DEPS

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ vars = {
1818
'llvm_git': 'https://llvm.googlesource.com',
1919
# OCMock is for testing only so there is no google clone
2020
'ocmock_git': 'https://github.com/erikdoe/ocmock.git',
21-
'skia_revision': '59e54ccf25a42768e4c078cad90b7e9f5c69b33c',
21+
'skia_revision': '2b76d1113497e51caa819efc29a4d0aa4c85b725',
2222

2323
# WARNING: DO NOT EDIT canvaskit_cipd_instance MANUALLY
2424
# See `lib/web_ui/README.md` for how to roll CanvasKit to a new version.
@@ -631,7 +631,7 @@ deps = {
631631
Var('swiftshader_git') + '/SwiftShader.git' + '@' + '5f9ed9b16931c7155171d31f75004f73f0a3abc8',
632632

633633
'src/third_party/angle':
634-
Var('chromium_git') + '/angle/angle.git' + '@' + '7b0bb0f6e785ec810761984c0fc09f603a1c4bde',
634+
Var('chromium_git') + '/angle/angle.git' + '@' + '60b56591dee59bc0bc770577f43d90be4b18863c',
635635

636636
'src/third_party/vulkan_memory_allocator':
637637
Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator' + '@' + '7de5cc00de50e71a3aab22dea52fbb7ff4efceb6',
@@ -914,7 +914,7 @@ deps = {
914914
'packages': [
915915
{
916916
'package': 'fuchsia/sdk/core/mac-amd64',
917-
'version': 'dFe-t1SosqZwU5lZRJfhlmiQNzNSKCiUmS_h3uirntsC'
917+
'version': 'hHwU6r12A0sy5Bq-0EiKQzK-Mv4l3N9k7MroYgVJExQC'
918918
}
919919
],
920920
'condition': 'host_os == "mac" and not download_fuchsia_sdk',
@@ -924,7 +924,7 @@ deps = {
924924
'packages': [
925925
{
926926
'package': 'fuchsia/sdk/core/linux-amd64',
927-
'version': 'z9uQ0mXwjKFQF05XlBv-X8Em1QvkefyGcIJWrSZEm-sC'
927+
'version': 'SCoDb2m_zQDLrMhwTwp5WCNL_BjAwYCPHfEbuLUUIZgC'
928928
}
929929
],
930930
'condition': 'host_os == "linux" and not download_fuchsia_sdk',

ci/licenses_golden/excluded_files

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,8 @@
624624
../../../fuchsia/sdk/linux/fidl/fuchsia.wlan.softmac/meta.json
625625
../../../fuchsia/sdk/linux/fidl/zx/meta.json
626626
../../../fuchsia/sdk/linux/meta
627+
../../../fuchsia/sdk/linux/packages/blobs
628+
../../../fuchsia/sdk/linux/packages/realm_builder_server/meta.json
627629
../../../fuchsia/sdk/linux/pkg/async-cpp/meta.json
628630
../../../fuchsia/sdk/linux/pkg/async-default/meta.json
629631
../../../fuchsia/sdk/linux/pkg/async-loop-cpp/meta.json

ci/licenses_golden/licenses_fuchsia

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Signature: 9a31319fc49dcb0a9eed7caba8bc94aa
1+
Signature: 5f6bfda83516701984a518888a4f8c38
22

33
====================================================================================================
44
LIBRARY: fuchsia_sdk
@@ -536,6 +536,12 @@ FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libpthread.so
536536
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/librt.so
537537
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libzircon.so
538538
FILE: ../../../fuchsia/sdk/linux/data/config/symbol_index/config.json
539+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/content_checklist_path
540+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/package_manifest.json
541+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/content_checklist_path
542+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/package_manifest.json
543+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/content_checklist_path
544+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/package_manifest.json
539545
FILE: ../../../fuchsia/sdk/linux/pkg/async-default/async-default.ifs
540546
FILE: ../../../fuchsia/sdk/linux/pkg/driver_runtime_shared_lib/driver_runtime.ifs
541547
FILE: ../../../fuchsia/sdk/linux/pkg/fdio/fdio.ifs
@@ -2340,6 +2346,12 @@ FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libpthread.so
23402346
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/librt.so
23412347
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libzircon.so
23422348
FILE: ../../../fuchsia/sdk/linux/data/config/symbol_index/config.json
2349+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/content_checklist_path
2350+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/package_manifest.json
2351+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/content_checklist_path
2352+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/package_manifest.json
2353+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/content_checklist_path
2354+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/package_manifest.json
23432355
FILE: ../../../fuchsia/sdk/linux/pkg/async-default/async-default.ifs
23442356
FILE: ../../../fuchsia/sdk/linux/pkg/driver_runtime_shared_lib/driver_runtime.ifs
23452357
FILE: ../../../fuchsia/sdk/linux/pkg/fdio/fdio.ifs
@@ -4242,6 +4254,7 @@ ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/clock.fidl + ../.
42424254
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/common.fidl + ../../../fuchsia/sdk/linux/LICENSE
42434255
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/composite.fidl + ../../../fuchsia/sdk/linux/LICENSE
42444256
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/composite_connector.fidl + ../../../fuchsia/sdk/linux/LICENSE
4257+
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/device_type.fidl + ../../../fuchsia/sdk/linux/LICENSE
42454258
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/plug.fidl + ../../../fuchsia/sdk/linux/LICENSE
42464259
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/ring_buffer_format.fidl + ../../../fuchsia/sdk/linux/LICENSE
42474260
ORIGIN: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.network/history.fidl + ../../../fuchsia/sdk/linux/LICENSE
@@ -4299,6 +4312,7 @@ FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/clock.fidl
42994312
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/common.fidl
43004313
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/composite.fidl
43014314
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/composite_connector.fidl
4315+
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/device_type.fidl
43024316
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/plug.fidl
43034317
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.audio/ring_buffer_format.fidl
43044318
FILE: ../../../fuchsia/sdk/linux/fidl/fuchsia.hardware.network/history.fidl
@@ -4908,6 +4922,12 @@ FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libpthread.so
49084922
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/librt.so
49094923
FILE: ../../../fuchsia/sdk/linux/arch/x64/sysroot/lib/libzircon.so
49104924
FILE: ../../../fuchsia/sdk/linux/data/config/symbol_index/config.json
4925+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/content_checklist_path
4926+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/arm64/release/package_manifest.json
4927+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/content_checklist_path
4928+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/riscv64/release/package_manifest.json
4929+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/content_checklist_path
4930+
FILE: ../../../fuchsia/sdk/linux/packages/realm_builder_server/x64/release/package_manifest.json
49114931
FILE: ../../../fuchsia/sdk/linux/pkg/async-default/async-default.ifs
49124932
FILE: ../../../fuchsia/sdk/linux/pkg/driver_runtime_shared_lib/driver_runtime.ifs
49134933
FILE: ../../../fuchsia/sdk/linux/pkg/fdio/fdio.ifs

ci/licenses_golden/licenses_skia

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Signature: c91abc77e50dc3e4d6183c7dd1874c02
1+
Signature: 1c29498dd42162a6e735496b20bf7bfc
22

33
====================================================================================================
44
LIBRARY: etc1
@@ -8829,10 +8829,12 @@ ORIGIN: ../../../third_party/skia/include/private/chromium/SkImageChromium.h + .
88298829
ORIGIN: ../../../third_party/skia/include/private/gpu/ganesh/GrTextureGenerator.h + ../../../third_party/skia/LICENSE
88308830
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/include/BentleyOttmann1.h + ../../../third_party/skia/LICENSE
88318831
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/include/EventQueue.h + ../../../third_party/skia/LICENSE
8832+
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/include/Int96.h + ../../../third_party/skia/LICENSE
88328833
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/include/Point.h + ../../../third_party/skia/LICENSE
88338834
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/include/Segment.h + ../../../third_party/skia/LICENSE
88348835
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/src/BentleyOttmann1.cpp + ../../../third_party/skia/LICENSE
88358836
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/src/EventQueue.cpp + ../../../third_party/skia/LICENSE
8837+
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/src/Int96.cpp + ../../../third_party/skia/LICENSE
88368838
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/src/Point.cpp + ../../../third_party/skia/LICENSE
88378839
ORIGIN: ../../../third_party/skia/modules/bentleyottmann/src/Segment.cpp + ../../../third_party/skia/LICENSE
88388840
ORIGIN: ../../../third_party/skia/src/base/SkBezierCurves.h + ../../../third_party/skia/LICENSE
@@ -8976,6 +8978,8 @@ ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanDescriptorSet.cpp +
89768978
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanDescriptorSet.h + ../../../third_party/skia/LICENSE
89778979
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanGraphicsPipeline.cpp + ../../../third_party/skia/LICENSE
89788980
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanGraphicsPipeline.h + ../../../third_party/skia/LICENSE
8981+
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanRenderPass.cpp + ../../../third_party/skia/LICENSE
8982+
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanRenderPass.h + ../../../third_party/skia/LICENSE
89798983
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanSampler.cpp + ../../../third_party/skia/LICENSE
89808984
ORIGIN: ../../../third_party/skia/src/gpu/graphite/vk/VulkanSampler.h + ../../../third_party/skia/LICENSE
89818985
ORIGIN: ../../../third_party/skia/src/image/SkImageGeneratorPriv.h + ../../../third_party/skia/LICENSE
@@ -9084,10 +9088,12 @@ FILE: ../../../third_party/skia/include/private/chromium/SkImageChromium.h
90849088
FILE: ../../../third_party/skia/include/private/gpu/ganesh/GrTextureGenerator.h
90859089
FILE: ../../../third_party/skia/modules/bentleyottmann/include/BentleyOttmann1.h
90869090
FILE: ../../../third_party/skia/modules/bentleyottmann/include/EventQueue.h
9091+
FILE: ../../../third_party/skia/modules/bentleyottmann/include/Int96.h
90879092
FILE: ../../../third_party/skia/modules/bentleyottmann/include/Point.h
90889093
FILE: ../../../third_party/skia/modules/bentleyottmann/include/Segment.h
90899094
FILE: ../../../third_party/skia/modules/bentleyottmann/src/BentleyOttmann1.cpp
90909095
FILE: ../../../third_party/skia/modules/bentleyottmann/src/EventQueue.cpp
9096+
FILE: ../../../third_party/skia/modules/bentleyottmann/src/Int96.cpp
90919097
FILE: ../../../third_party/skia/modules/bentleyottmann/src/Point.cpp
90929098
FILE: ../../../third_party/skia/modules/bentleyottmann/src/Segment.cpp
90939099
FILE: ../../../third_party/skia/src/base/SkBezierCurves.h
@@ -9231,6 +9237,8 @@ FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanDescriptorSet.cpp
92319237
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanDescriptorSet.h
92329238
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanGraphicsPipeline.cpp
92339239
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanGraphicsPipeline.h
9240+
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanRenderPass.cpp
9241+
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanRenderPass.h
92349242
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanSampler.cpp
92359243
FILE: ../../../third_party/skia/src/gpu/graphite/vk/VulkanSampler.h
92369244
FILE: ../../../third_party/skia/src/image/SkImageGeneratorPriv.h

ci/licenses_golden/licenses_third_party

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Signature: 6710d89decb9aa08a5507129f15dc523
1+
Signature: 770aab7700bb355756e69020ee8592a3
22

33
====================================================================================================
44
LIBRARY: angle

ci/licenses_golden/tool_signature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Signature: 996bda987bb421e5aecf9238c247c296
1+
Signature: 575f2a41ff152394b7e539742fa248e6
22

lib/ui/fixtures/ui_test.dart

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,3 +1076,45 @@ external void _callHook(
10761076
Object? arg20,
10771077
Object? arg21,
10781078
]);
1079+
1080+
Scene _createRedBoxScene(Size size) {
1081+
final SceneBuilder builder = SceneBuilder();
1082+
builder.pushOffset(0.0, 0.0);
1083+
final Paint paint = Paint()
1084+
..color = Color.fromARGB(255, 255, 0, 0)
1085+
..style = PaintingStyle.fill;
1086+
final PictureRecorder baseRecorder = PictureRecorder();
1087+
final Canvas canvas = Canvas(baseRecorder);
1088+
canvas.drawRect(Rect.fromLTRB(0.0, 0.0, size.width, size.height), paint);
1089+
final Picture picture = baseRecorder.endRecording();
1090+
builder.addPicture(Offset(0.0, 0.0), picture);
1091+
builder.pop();
1092+
return builder.build();
1093+
}
1094+
1095+
@pragma('vm:entry-point')
1096+
void incorrectImmediateRender() {
1097+
PlatformDispatcher.instance.views.first.render(_createRedBoxScene(Size(2, 2)));
1098+
_finish();
1099+
// Don't schedule a frame here. This test only checks if the
1100+
// [FlutterView.render] call is propagated to PlatformConfiguration.render
1101+
// and thus doesn't need anything from `Animator` or `Engine`, which,
1102+
// besides, are not even created in the native side at all.
1103+
}
1104+
1105+
@pragma('vm:entry-point')
1106+
void incorrectDoubleRender() {
1107+
PlatformDispatcher.instance.onBeginFrame = (Duration value) {
1108+
PlatformDispatcher.instance.views.first.render(_createRedBoxScene(Size(2, 2)));
1109+
PlatformDispatcher.instance.views.first.render(_createRedBoxScene(Size(3, 3)));
1110+
};
1111+
PlatformDispatcher.instance.onDrawFrame = () {
1112+
PlatformDispatcher.instance.views.first.render(_createRedBoxScene(Size(4, 4)));
1113+
PlatformDispatcher.instance.views.first.render(_createRedBoxScene(Size(5, 5)));
1114+
};
1115+
_finish();
1116+
// Don't schedule a frame here. This test only checks if the
1117+
// [FlutterView.render] call is propagated to PlatformConfiguration.render
1118+
// and thus doesn't need anything from `Animator` or `Engine`, which,
1119+
// besides, are not even created in the native side at all.
1120+
}

lib/ui/platform_dispatcher.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,21 @@ class PlatformDispatcher {
308308
_invoke(onMetricsChanged, _onMetricsChangedZone);
309309
}
310310

311+
// [FlutterView]s for which [FlutterView.render] has already been called
312+
// during the current [onBeginFrame]/[onDrawFrame] callback sequence.
313+
//
314+
// The field is null outside the scope of those callbacks indicating that
315+
// calls to [FlutterView.render] must be ignored. Furthermore, if a given
316+
// [FlutterView] is already present in this set when its [FlutterView.render]
317+
// is called again, that call must be ignored as a duplicate.
318+
//
319+
// Between [onBeginFrame] and [onDrawFrame] the properties value is
320+
// temporarily stored in `_renderedViewsBetweenCallbacks` so that it survives
321+
// the gap between the two callbacks.
322+
Set<FlutterView>? _renderedViews;
323+
// Temporary storage of the `_renderedViews` value between `_beginFrame` and
324+
// `_drawFrame`.
325+
Set<FlutterView>? _renderedViewsBetweenCallbacks;
311326

312327
/// A callback invoked when any view begins a frame.
313328
///
@@ -329,11 +344,20 @@ class PlatformDispatcher {
329344

330345
// Called from the engine, via hooks.dart
331346
void _beginFrame(int microseconds) {
347+
assert(_renderedViews == null);
348+
assert(_renderedViewsBetweenCallbacks == null);
349+
350+
_renderedViews = <FlutterView>{};
332351
_invoke1<Duration>(
333352
onBeginFrame,
334353
_onBeginFrameZone,
335354
Duration(microseconds: microseconds),
336355
);
356+
_renderedViewsBetweenCallbacks = _renderedViews;
357+
_renderedViews = null;
358+
359+
assert(_renderedViews == null);
360+
assert(_renderedViewsBetweenCallbacks != null);
337361
}
338362

339363
/// A callback that is invoked for each frame after [onBeginFrame] has
@@ -351,7 +375,16 @@ class PlatformDispatcher {
351375

352376
// Called from the engine, via hooks.dart
353377
void _drawFrame() {
378+
assert(_renderedViews == null);
379+
assert(_renderedViewsBetweenCallbacks != null);
380+
381+
_renderedViews = _renderedViewsBetweenCallbacks;
382+
_renderedViewsBetweenCallbacks = null;
354383
_invoke(onDrawFrame, _onDrawFrameZone);
384+
_renderedViews = null;
385+
386+
assert(_renderedViews == null);
387+
assert(_renderedViewsBetweenCallbacks == null);
355388
}
356389

357390
/// A callback that is invoked when pointer data is available.

lib/ui/window.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,14 @@ class FlutterView {
353353
/// scheduling of frames.
354354
/// * [RendererBinding], the Flutter framework class which manages layout and
355355
/// painting.
356-
void render(Scene scene) => _render(scene as _NativeScene);
356+
void render(Scene scene) {
357+
if (platformDispatcher._renderedViews?.add(this) != true) {
358+
// Duplicated calls or calls outside of onBeginFrame/onDrawFrame
359+
// (indicated by _renderedViews being null) are ignored, as documented.
360+
return;
361+
}
362+
_render(scene as _NativeScene);
363+
}
357364

358365
@Native<Void Function(Pointer<Void>)>(symbol: 'PlatformConfigurationNativeApi::Render')
359366
external static void _render(_NativeScene scene);

0 commit comments

Comments
 (0)