Skip to content

Commit

Permalink
Reland "Remove usage of Dart_AllocateWithNativeFields" (#16713)
Browse files Browse the repository at this point in the history
  • Loading branch information
dnfield committed Feb 21, 2020
1 parent e44f99b commit 60b27fd
Show file tree
Hide file tree
Showing 15 changed files with 244 additions and 122 deletions.
95 changes: 66 additions & 29 deletions lib/ui/compositing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -281,12 +281,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
}) {
assert(_matrix4IsValid(matrix4));
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushTransform'));
final TransformEngineLayer layer = TransformEngineLayer._(_pushTransform(matrix4));
final EngineLayer engineLayer = EngineLayer._();
_pushTransform(engineLayer, matrix4);
final TransformEngineLayer layer = TransformEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushTransform(Float64List matrix4) native 'SceneBuilder_pushTransform';
void _pushTransform(EngineLayer layer, Float64List matrix4) native 'SceneBuilder_pushTransform';

/// Pushes an offset operation onto the operation stack.
///
Expand All @@ -303,12 +305,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OffsetEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOffset'));
final OffsetEngineLayer layer = OffsetEngineLayer._(_pushOffset(dx, dy));
final EngineLayer engineLayer = EngineLayer._();
_pushOffset(engineLayer, dx, dy);
final OffsetEngineLayer layer = OffsetEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset';
void _pushOffset(EngineLayer layer, double dx, double dy) native 'SceneBuilder_pushOffset';

/// Pushes a rectangular clip operation onto the operation stack.
///
Expand All @@ -328,13 +332,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRect'));
final ClipRectEngineLayer layer = ClipRectEngineLayer._(
_pushClipRect(rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipRect(engineLayer, rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index);
final ClipRectEngineLayer layer = ClipRectEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipRect(double left, double right, double top, double bottom, int clipBehavior)
void _pushClipRect(EngineLayer outEngineLayer, double left, double right, double top, double bottom, int clipBehavior)
native 'SceneBuilder_pushClipRect';

/// Pushes a rounded-rectangular clip operation onto the operation stack.
Expand All @@ -355,13 +360,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRRect'));
final ClipRRectEngineLayer layer =
ClipRRectEngineLayer._(_pushClipRRect(rrect._value32, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipRRect(engineLayer, rrect._value32, clipBehavior.index);
final ClipRRectEngineLayer layer = ClipRRectEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipRRect(Float32List rrect, int clipBehavior)
void _pushClipRRect(EngineLayer layer, Float32List rrect, int clipBehavior)
native 'SceneBuilder_pushClipRRect';

/// Pushes a path clip operation onto the operation stack.
Expand All @@ -382,13 +388,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipPath'));
final ClipPathEngineLayer layer =
ClipPathEngineLayer._(_pushClipPath(path, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipPath(engineLayer, path, clipBehavior.index);
final ClipPathEngineLayer layer = ClipPathEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipPath(Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';
void _pushClipPath(EngineLayer layer, Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';

/// Pushes an opacity operation onto the operation stack.
///
Expand All @@ -408,13 +415,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OpacityEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOpacity'));
final OpacityEngineLayer layer =
OpacityEngineLayer._(_pushOpacity(alpha, offset.dx, offset.dy));
final EngineLayer engineLayer = EngineLayer._();
_pushOpacity(engineLayer, alpha, offset.dx, offset.dy);
final OpacityEngineLayer layer = OpacityEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushOpacity(int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';
void _pushOpacity(EngineLayer layer, int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';

/// Pushes a color filter operation onto the operation stack.
///
Expand All @@ -434,12 +442,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushColorFilter'));
final _ColorFilter nativeFilter = filter._toNativeColorFilter();
assert(nativeFilter != null);
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(_pushColorFilter(nativeFilter));
final EngineLayer engineLayer = EngineLayer._();
_pushColorFilter(engineLayer, nativeFilter);
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushColorFilter(_ColorFilter filter) native 'SceneBuilder_pushColorFilter';
void _pushColorFilter(EngineLayer layer, _ColorFilter filter) native 'SceneBuilder_pushColorFilter';

/// Pushes an image filter operation onto the operation stack.
///
Expand All @@ -459,12 +469,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushImageFilter'));
final _ImageFilter nativeFilter = filter._toNativeImageFilter();
assert(nativeFilter != null);
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(_pushImageFilter(nativeFilter));
final EngineLayer engineLayer = EngineLayer._();
_pushImageFilter(engineLayer, nativeFilter);
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushImageFilter(_ImageFilter filter) native 'SceneBuilder_pushImageFilter';
void _pushImageFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushImageFilter';

/// Pushes a backdrop filter operation onto the operation stack.
///
Expand All @@ -481,13 +493,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
BackdropFilterEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushBackdropFilter'));
final BackdropFilterEngineLayer layer =
BackdropFilterEngineLayer._(_pushBackdropFilter(filter._toNativeImageFilter()));
final EngineLayer engineLayer = EngineLayer._();
_pushBackdropFilter(engineLayer, filter._toNativeImageFilter());
final BackdropFilterEngineLayer layer = BackdropFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushBackdropFilter(_ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';
void _pushBackdropFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';

/// Pushes a shader mask operation onto the operation stack.
///
Expand All @@ -506,13 +519,23 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
ShaderMaskEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushShaderMask'));
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(_pushShaderMask(
shader, maskRect.left, maskRect.right, maskRect.top, maskRect.bottom, blendMode.index));
final EngineLayer engineLayer = EngineLayer._();
_pushShaderMask(
engineLayer,
shader,
maskRect.left,
maskRect.right,
maskRect.top,
maskRect.bottom,
blendMode.index,
);
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushShaderMask(
EngineLayer engineLayer,
Shader shader,
double maskRectLeft,
double maskRectRight,
Expand Down Expand Up @@ -546,13 +569,21 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
PhysicalShapeEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushPhysicalShape'));
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(_pushPhysicalShape(
path, elevation, color.value, shadowColor?.value ?? 0xFF000000, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushPhysicalShape(
engineLayer,
path,
elevation,
color.value,
shadowColor?.value ?? 0xFF000000,
clipBehavior.index,
);
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushPhysicalShape(Path path, double elevation, int color, int shadowColor,
EngineLayer _pushPhysicalShape(EngineLayer outEngineLayer, Path path, double elevation, int color, int shadowColor,
int clipBehavior) native 'SceneBuilder_pushPhysicalShape';

/// Ends the effect of the most recently pushed operation.
Expand Down Expand Up @@ -770,7 +801,13 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
///
/// After calling this function, the scene builder object is invalid and
/// cannot be used further.
Scene build() native 'SceneBuilder_build';
Scene build() {
final Scene scene = Scene._();
_build(scene);
return scene;
}

void _build(Scene outScene) native 'SceneBuilder_build';
}

/// (Fuchsia-only) Hosts content provided by another application.
Expand Down
12 changes: 7 additions & 5 deletions lib/ui/compositing/scene.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);

DART_BIND_ALL(Scene, FOR_EACH_BINDING)

fml::RefPtr<Scene> Scene::create(std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers) {
return fml::MakeRefCounted<Scene>(
void Scene::create(Dart_Handle scene_handle,
std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers) {
auto scene = fml::MakeRefCounted<Scene>(
std::move(rootLayer), rasterizerTracingThreshold,
checkerboardRasterCacheImages, checkerboardOffscreenLayers);
scene->ClaimDartHandle(scene_handle);
}

Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,
Expand Down
9 changes: 5 additions & 4 deletions lib/ui/compositing/scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ class Scene : public RefCountedDartWrappable<Scene> {

public:
~Scene() override;
static fml::RefPtr<Scene> create(std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);
static void create(Dart_Handle scene_handle,
std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);

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

Expand Down
Loading

0 comments on commit 60b27fd

Please sign in to comment.