Skip to content

Commit 60b27fd

Browse files
authored
Reland "Remove usage of Dart_AllocateWithNativeFields" (#16713)
1 parent e44f99b commit 60b27fd

File tree

15 files changed

+244
-122
lines changed

15 files changed

+244
-122
lines changed

lib/ui/compositing.dart

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
281281
}) {
282282
assert(_matrix4IsValid(matrix4));
283283
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushTransform'));
284-
final TransformEngineLayer layer = TransformEngineLayer._(_pushTransform(matrix4));
284+
final EngineLayer engineLayer = EngineLayer._();
285+
_pushTransform(engineLayer, matrix4);
286+
final TransformEngineLayer layer = TransformEngineLayer._(engineLayer);
285287
assert(_debugPushLayer(layer));
286288
return layer;
287289
}
288290

289-
EngineLayer _pushTransform(Float64List matrix4) native 'SceneBuilder_pushTransform';
291+
void _pushTransform(EngineLayer layer, Float64List matrix4) native 'SceneBuilder_pushTransform';
290292

291293
/// Pushes an offset operation onto the operation stack.
292294
///
@@ -303,12 +305,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
303305
OffsetEngineLayer oldLayer,
304306
}) {
305307
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOffset'));
306-
final OffsetEngineLayer layer = OffsetEngineLayer._(_pushOffset(dx, dy));
308+
final EngineLayer engineLayer = EngineLayer._();
309+
_pushOffset(engineLayer, dx, dy);
310+
final OffsetEngineLayer layer = OffsetEngineLayer._(engineLayer);
307311
assert(_debugPushLayer(layer));
308312
return layer;
309313
}
310314

311-
EngineLayer _pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset';
315+
void _pushOffset(EngineLayer layer, double dx, double dy) native 'SceneBuilder_pushOffset';
312316

313317
/// Pushes a rectangular clip operation onto the operation stack.
314318
///
@@ -328,13 +332,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
328332
assert(clipBehavior != null);
329333
assert(clipBehavior != Clip.none);
330334
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRect'));
331-
final ClipRectEngineLayer layer = ClipRectEngineLayer._(
332-
_pushClipRect(rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index));
335+
final EngineLayer engineLayer = EngineLayer._();
336+
_pushClipRect(engineLayer, rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index);
337+
final ClipRectEngineLayer layer = ClipRectEngineLayer._(engineLayer);
333338
assert(_debugPushLayer(layer));
334339
return layer;
335340
}
336341

337-
EngineLayer _pushClipRect(double left, double right, double top, double bottom, int clipBehavior)
342+
void _pushClipRect(EngineLayer outEngineLayer, double left, double right, double top, double bottom, int clipBehavior)
338343
native 'SceneBuilder_pushClipRect';
339344

340345
/// Pushes a rounded-rectangular clip operation onto the operation stack.
@@ -355,13 +360,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
355360
assert(clipBehavior != null);
356361
assert(clipBehavior != Clip.none);
357362
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRRect'));
358-
final ClipRRectEngineLayer layer =
359-
ClipRRectEngineLayer._(_pushClipRRect(rrect._value32, clipBehavior.index));
363+
final EngineLayer engineLayer = EngineLayer._();
364+
_pushClipRRect(engineLayer, rrect._value32, clipBehavior.index);
365+
final ClipRRectEngineLayer layer = ClipRRectEngineLayer._(engineLayer);
360366
assert(_debugPushLayer(layer));
361367
return layer;
362368
}
363369

364-
EngineLayer _pushClipRRect(Float32List rrect, int clipBehavior)
370+
void _pushClipRRect(EngineLayer layer, Float32List rrect, int clipBehavior)
365371
native 'SceneBuilder_pushClipRRect';
366372

367373
/// Pushes a path clip operation onto the operation stack.
@@ -382,13 +388,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
382388
assert(clipBehavior != null);
383389
assert(clipBehavior != Clip.none);
384390
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipPath'));
385-
final ClipPathEngineLayer layer =
386-
ClipPathEngineLayer._(_pushClipPath(path, clipBehavior.index));
391+
final EngineLayer engineLayer = EngineLayer._();
392+
_pushClipPath(engineLayer, path, clipBehavior.index);
393+
final ClipPathEngineLayer layer = ClipPathEngineLayer._(engineLayer);
387394
assert(_debugPushLayer(layer));
388395
return layer;
389396
}
390397

391-
EngineLayer _pushClipPath(Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';
398+
void _pushClipPath(EngineLayer layer, Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';
392399

393400
/// Pushes an opacity operation onto the operation stack.
394401
///
@@ -408,13 +415,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
408415
OpacityEngineLayer oldLayer,
409416
}) {
410417
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOpacity'));
411-
final OpacityEngineLayer layer =
412-
OpacityEngineLayer._(_pushOpacity(alpha, offset.dx, offset.dy));
418+
final EngineLayer engineLayer = EngineLayer._();
419+
_pushOpacity(engineLayer, alpha, offset.dx, offset.dy);
420+
final OpacityEngineLayer layer = OpacityEngineLayer._(engineLayer);
413421
assert(_debugPushLayer(layer));
414422
return layer;
415423
}
416424

417-
EngineLayer _pushOpacity(int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';
425+
void _pushOpacity(EngineLayer layer, int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';
418426

419427
/// Pushes a color filter operation onto the operation stack.
420428
///
@@ -434,12 +442,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
434442
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushColorFilter'));
435443
final _ColorFilter nativeFilter = filter._toNativeColorFilter();
436444
assert(nativeFilter != null);
437-
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(_pushColorFilter(nativeFilter));
445+
final EngineLayer engineLayer = EngineLayer._();
446+
_pushColorFilter(engineLayer, nativeFilter);
447+
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(engineLayer);
438448
assert(_debugPushLayer(layer));
439449
return layer;
440450
}
441451

442-
EngineLayer _pushColorFilter(_ColorFilter filter) native 'SceneBuilder_pushColorFilter';
452+
void _pushColorFilter(EngineLayer layer, _ColorFilter filter) native 'SceneBuilder_pushColorFilter';
443453

444454
/// Pushes an image filter operation onto the operation stack.
445455
///
@@ -459,12 +469,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
459469
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushImageFilter'));
460470
final _ImageFilter nativeFilter = filter._toNativeImageFilter();
461471
assert(nativeFilter != null);
462-
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(_pushImageFilter(nativeFilter));
472+
final EngineLayer engineLayer = EngineLayer._();
473+
_pushImageFilter(engineLayer, nativeFilter);
474+
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(engineLayer);
463475
assert(_debugPushLayer(layer));
464476
return layer;
465477
}
466478

467-
EngineLayer _pushImageFilter(_ImageFilter filter) native 'SceneBuilder_pushImageFilter';
479+
void _pushImageFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushImageFilter';
468480

469481
/// Pushes a backdrop filter operation onto the operation stack.
470482
///
@@ -481,13 +493,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
481493
BackdropFilterEngineLayer oldLayer,
482494
}) {
483495
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushBackdropFilter'));
484-
final BackdropFilterEngineLayer layer =
485-
BackdropFilterEngineLayer._(_pushBackdropFilter(filter._toNativeImageFilter()));
496+
final EngineLayer engineLayer = EngineLayer._();
497+
_pushBackdropFilter(engineLayer, filter._toNativeImageFilter());
498+
final BackdropFilterEngineLayer layer = BackdropFilterEngineLayer._(engineLayer);
486499
assert(_debugPushLayer(layer));
487500
return layer;
488501
}
489502

490-
EngineLayer _pushBackdropFilter(_ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';
503+
void _pushBackdropFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';
491504

492505
/// Pushes a shader mask operation onto the operation stack.
493506
///
@@ -506,13 +519,23 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
506519
ShaderMaskEngineLayer oldLayer,
507520
}) {
508521
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushShaderMask'));
509-
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(_pushShaderMask(
510-
shader, maskRect.left, maskRect.right, maskRect.top, maskRect.bottom, blendMode.index));
522+
final EngineLayer engineLayer = EngineLayer._();
523+
_pushShaderMask(
524+
engineLayer,
525+
shader,
526+
maskRect.left,
527+
maskRect.right,
528+
maskRect.top,
529+
maskRect.bottom,
530+
blendMode.index,
531+
);
532+
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(engineLayer);
511533
assert(_debugPushLayer(layer));
512534
return layer;
513535
}
514536

515537
EngineLayer _pushShaderMask(
538+
EngineLayer engineLayer,
516539
Shader shader,
517540
double maskRectLeft,
518541
double maskRectRight,
@@ -546,13 +569,21 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
546569
PhysicalShapeEngineLayer oldLayer,
547570
}) {
548571
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushPhysicalShape'));
549-
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(_pushPhysicalShape(
550-
path, elevation, color.value, shadowColor?.value ?? 0xFF000000, clipBehavior.index));
572+
final EngineLayer engineLayer = EngineLayer._();
573+
_pushPhysicalShape(
574+
engineLayer,
575+
path,
576+
elevation,
577+
color.value,
578+
shadowColor?.value ?? 0xFF000000,
579+
clipBehavior.index,
580+
);
581+
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(engineLayer);
551582
assert(_debugPushLayer(layer));
552583
return layer;
553584
}
554585

555-
EngineLayer _pushPhysicalShape(Path path, double elevation, int color, int shadowColor,
586+
EngineLayer _pushPhysicalShape(EngineLayer outEngineLayer, Path path, double elevation, int color, int shadowColor,
556587
int clipBehavior) native 'SceneBuilder_pushPhysicalShape';
557588

558589
/// Ends the effect of the most recently pushed operation.
@@ -770,7 +801,13 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
770801
///
771802
/// After calling this function, the scene builder object is invalid and
772803
/// cannot be used further.
773-
Scene build() native 'SceneBuilder_build';
804+
Scene build() {
805+
final Scene scene = Scene._();
806+
_build(scene);
807+
return scene;
808+
}
809+
810+
void _build(Scene outScene) native 'SceneBuilder_build';
774811
}
775812

776813
/// (Fuchsia-only) Hosts content provided by another application.

lib/ui/compositing/scene.cc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);
2626

2727
DART_BIND_ALL(Scene, FOR_EACH_BINDING)
2828

29-
fml::RefPtr<Scene> Scene::create(std::shared_ptr<flutter::Layer> rootLayer,
30-
uint32_t rasterizerTracingThreshold,
31-
bool checkerboardRasterCacheImages,
32-
bool checkerboardOffscreenLayers) {
33-
return fml::MakeRefCounted<Scene>(
29+
void Scene::create(Dart_Handle scene_handle,
30+
std::shared_ptr<flutter::Layer> rootLayer,
31+
uint32_t rasterizerTracingThreshold,
32+
bool checkerboardRasterCacheImages,
33+
bool checkerboardOffscreenLayers) {
34+
auto scene = fml::MakeRefCounted<Scene>(
3435
std::move(rootLayer), rasterizerTracingThreshold,
3536
checkerboardRasterCacheImages, checkerboardOffscreenLayers);
37+
scene->ClaimDartHandle(scene_handle);
3638
}
3739

3840
Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,

lib/ui/compositing/scene.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ class Scene : public RefCountedDartWrappable<Scene> {
2424

2525
public:
2626
~Scene() override;
27-
static fml::RefPtr<Scene> create(std::shared_ptr<flutter::Layer> rootLayer,
28-
uint32_t rasterizerTracingThreshold,
29-
bool checkerboardRasterCacheImages,
30-
bool checkerboardOffscreenLayers);
27+
static void create(Dart_Handle scene_handle,
28+
std::shared_ptr<flutter::Layer> rootLayer,
29+
uint32_t rasterizerTracingThreshold,
30+
bool checkerboardRasterCacheImages,
31+
bool checkerboardOffscreenLayers);
3132

3233
std::unique_ptr<flutter::LayerTree> takeLayerTree();
3334

0 commit comments

Comments
 (0)