Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,71 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

====================================================================================================
LIBRARY: engine
ORIGIN: ../../../flutter/benchmarking/benchmarking.cc + ../../../LICENSE
ORIGIN: ../../../flutter/flutter_kernel_transformers/lib/track_widget_constructor_locations.dart + ../../../LICENSE
TYPE: LicenseType.bsd
FILE: ../../../flutter/flutter_kernel_transformers/lib/track_widget_constructor_locations.dart
FILE: ../../../flutter/fml/paths_unittests.cc
FILE: ../../../flutter/lib/ui/isolate_name_server.dart
FILE: ../../../flutter/lib/ui/painting/engine_layer.cc
FILE: ../../../flutter/lib/ui/painting/engine_layer.h
FILE: ../../../flutter/lib/ui/painting/image_encoding.cc
FILE: ../../../flutter/lib/ui/painting/image_encoding.h
FILE: ../../../flutter/lib/ui/plugins.dart
FILE: ../../../flutter/lib/ui/semantics/custom_accessibility_action.cc
FILE: ../../../flutter/lib/ui/semantics/custom_accessibility_action.h
FILE: ../../../flutter/lib/ui/text/asset_manager_font_provider.cc
FILE: ../../../flutter/lib/ui/text/asset_manager_font_provider.h
FILE: ../../../flutter/shell/platform/android/apk_asset_provider.h
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformView.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewFactory.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewRegistry.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewRegistryImpl.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java
FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/platform/VirtualDisplayController.java
FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterCallbackInformation.java
FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterRunArguments.java
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterCallbackCache.h
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterPluginAppLifeCycleDelegate.h
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterCallbackCache.mm
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterCallbackCache_Internal.h
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/FlutterPluginAppLifeCycleDelegate.mm
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/accessibility_text_entry.h
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Source/accessibility_text_entry.mm
FILE: ../../../flutter/shell/platform/darwin/ios/headless_platform_view_ios.h
----------------------------------------------------------------------------------------------------
Copyright 2018 The Chromium Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================================================

====================================================================================================
LIBRARY: engine
ORIGIN: ../../../flutter/fml/platform/android/paths_android.h + ../../../LICENSE
TYPE: LicenseType.bsd
FILE: ../../../flutter/benchmarking/benchmarking.cc
FILE: ../../../flutter/benchmarking/benchmarking.h
Expand Down
2 changes: 1 addition & 1 deletion flow/layers/container_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ ContainerLayer::ContainerLayer() {}

ContainerLayer::~ContainerLayer() = default;

void ContainerLayer::Add(std::unique_ptr<Layer> layer) {
void ContainerLayer::Add(std::shared_ptr<Layer> layer) {
layer->set_parent(this);
layers_.push_back(std::move(layer));
}
Expand Down
6 changes: 3 additions & 3 deletions flow/layers/container_layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ class ContainerLayer : public Layer {
ContainerLayer();
~ContainerLayer() override;

void Add(std::unique_ptr<Layer> layer);
void Add(std::shared_ptr<Layer> layer);

void Preroll(PrerollContext* context, const SkMatrix& matrix) override;

#if defined(OS_FUCHSIA)
void UpdateScene(SceneUpdateContext& context) override;
#endif // defined(OS_FUCHSIA)

const std::vector<std::unique_ptr<Layer>>& layers() const { return layers_; }
const std::vector<std::shared_ptr<Layer>>& layers() const { return layers_; }

protected:
void PrerollChildren(PrerollContext* context,
Expand All @@ -36,7 +36,7 @@ class ContainerLayer : public Layer {
#endif // defined(OS_FUCHSIA)

private:
std::vector<std::unique_ptr<Layer>> layers_;
std::vector<std::shared_ptr<Layer>> layers_;

FML_DISALLOW_COPY_AND_ASSIGN(ContainerLayer);
};
Expand Down
4 changes: 2 additions & 2 deletions flow/layers/layer_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class LayerTree {

Layer* root_layer() const { return root_layer_.get(); }

void set_root_layer(std::unique_ptr<Layer> root_layer) {
void set_root_layer(std::shared_ptr<Layer> root_layer) {
root_layer_ = std::move(root_layer);
}

Expand Down Expand Up @@ -73,7 +73,7 @@ class LayerTree {

private:
SkISize frame_size_; // Physical pixels.
std::unique_ptr<Layer> root_layer_;
std::shared_ptr<Layer> root_layer_;
fml::TimeDelta construction_time_;
uint32_t rasterizer_tracing_threshold_;
bool checkerboard_raster_cache_images_;
Expand Down
8 changes: 8 additions & 0 deletions flow/layers/picture_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ void PictureLayer::Paint(PaintContext& context) const {

if (raster_cache_result_.is_valid()) {
raster_cache_result_.draw(context.canvas);

// We cannot share the RasterCacheResult with the framework (UI thread)
// because it includes an SkImage and its associated GrContext doesn't
// seem to be thread safe when we construct SkImage in one thread and
// destruct it in another thread. Hence set it to empty right after use
// so the retained engine layer that's sent to the framework doesn't hold
// an SkImage reference.
raster_cache_result_ = {};
} else {
context.canvas.drawPicture(picture());
}
Expand Down
2 changes: 2 additions & 0 deletions lib/ui/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ source_set("ui") {
"painting/canvas.h",
"painting/codec.cc",
"painting/codec.h",
"painting/engine_layer.h",
"painting/engine_layer.cc",
"painting/frame_info.cc",
"painting/frame_info.h",
"painting/gradient.cc",
Expand Down
16 changes: 12 additions & 4 deletions lib/ui/compositing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
/// This is equivalent to [pushTransform] with a matrix with only translation.
///
/// See [pop] for details about the operation stack.
void pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset';
EngineLayer pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset';

/// Pushes a rectangular clip operation onto the operation stack.
///
Expand Down Expand Up @@ -177,10 +177,10 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
///
/// See [pop] for details about the operation stack, and [Clip] for different clip modes.
// ignore: deprecated_member_use
void pushPhysicalShape({ Path path, double elevation, Color color, Color shadowColor, Clip clipBehavior = defaultClipBehavior}) {
_pushPhysicalShape(path, elevation, color.value, shadowColor?.value ?? 0xFF000000, clipBehavior.index);
EngineLayer pushPhysicalShape({ Path path, double elevation, Color color, Color shadowColor, Clip clipBehavior = defaultClipBehavior}) {
return _pushPhysicalShape(path, elevation, color.value, shadowColor?.value ?? 0xFF000000, clipBehavior.index);
}
void _pushPhysicalShape(Path path, double elevation, int color, int shadowColor, int clipBehavior) native
EngineLayer _pushPhysicalShape(Path path, double elevation, int color, int shadowColor, int clipBehavior) native
'SceneBuilder_pushPhysicalShape';

/// Ends the effect of the most recently pushed operation.
Expand All @@ -191,6 +191,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
/// stack.
void pop() native 'SceneBuilder_pop';

/// Add a retained engine layer subtree from previous frames.
///
/// All the engine layers that are in the subtree of the retained layer will
/// be automatically appended to the current engine layer tree. Therefore,
/// once this is called, there's no need to call [addToScene] for its children
/// layers.
EngineLayer addRetained(EngineLayer retainedLayer) native 'SceneBuilder_addRetained';

/// Adds an object to the scene that displays performance statistics.
///
/// Useful during development to assess the performance of the application.
Expand Down
4 changes: 2 additions & 2 deletions lib/ui/compositing/scene.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);

DART_BIND_ALL(Scene, FOR_EACH_BINDING)

fml::RefPtr<Scene> Scene::create(std::unique_ptr<flow::Layer> rootLayer,
fml::RefPtr<Scene> Scene::create(std::shared_ptr<flow::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers) {
Expand All @@ -35,7 +35,7 @@ fml::RefPtr<Scene> Scene::create(std::unique_ptr<flow::Layer> rootLayer,
checkerboardRasterCacheImages, checkerboardOffscreenLayers);
}

Scene::Scene(std::unique_ptr<flow::Layer> rootLayer,
Scene::Scene(std::shared_ptr<flow::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers)
Expand Down
4 changes: 2 additions & 2 deletions lib/ui/compositing/scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Scene : public RefCountedDartWrappable<Scene> {

public:
~Scene() override;
static fml::RefPtr<Scene> create(std::unique_ptr<flow::Layer> rootLayer,
static fml::RefPtr<Scene> create(std::shared_ptr<flow::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);
Expand All @@ -40,7 +40,7 @@ class Scene : public RefCountedDartWrappable<Scene> {
static void RegisterNatives(tonic::DartLibraryNatives* natives);

private:
explicit Scene(std::unique_ptr<flow::Layer> rootLayer,
explicit Scene(std::shared_ptr<flow::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);
Expand Down
32 changes: 21 additions & 11 deletions lib/ui/compositing/scene_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, SceneBuilder);
V(SceneBuilder, pushShaderMask) \
V(SceneBuilder, pushPhysicalShape) \
V(SceneBuilder, pop) \
V(SceneBuilder, addRetained) \
V(SceneBuilder, addPicture) \
V(SceneBuilder, addTexture) \
V(SceneBuilder, addChildScene) \
Expand Down Expand Up @@ -80,11 +81,12 @@ void SceneBuilder::pushTransform(const tonic::Float64List& matrix4) {
PushLayer(std::move(layer));
}

void SceneBuilder::pushOffset(double dx, double dy) {
fml::RefPtr<EngineLayer> SceneBuilder::pushOffset(double dx, double dy) {
SkMatrix sk_matrix = SkMatrix::MakeTrans(dx, dy);
auto layer = std::make_unique<flow::TransformLayer>();
auto layer = std::make_shared<flow::TransformLayer>();
layer->set_transform(sk_matrix);
PushLayer(std::move(layer));
PushLayer(layer);
return EngineLayer::MakeRetained(layer);
}

void SceneBuilder::pushClipRect(double left,
Expand Down Expand Up @@ -148,21 +150,29 @@ void SceneBuilder::pushShaderMask(Shader* shader,
PushLayer(std::move(layer));
}

void SceneBuilder::pushPhysicalShape(const CanvasPath* path,
double elevation,
int color,
int shadow_color,
int clipBehavior) {
fml::RefPtr<EngineLayer> SceneBuilder::pushPhysicalShape(const CanvasPath* path,
double elevation,
int color,
int shadow_color,
int clipBehavior) {
const SkPath& sk_path = path->path();
flow::Clip clip_behavior = static_cast<flow::Clip>(clipBehavior);
auto layer = std::make_unique<flow::PhysicalShapeLayer>(clip_behavior);
auto layer = std::make_shared<flow::PhysicalShapeLayer>(clip_behavior);
layer->set_path(sk_path);
layer->set_elevation(elevation);
layer->set_color(static_cast<SkColor>(color));
layer->set_shadow_color(static_cast<SkColor>(shadow_color));
layer->set_device_pixel_ratio(
UIDartState::Current()->window()->viewport_metrics().device_pixel_ratio);
PushLayer(std::move(layer));
PushLayer(layer);
return EngineLayer::MakeRetained(layer);
}

void SceneBuilder::addRetained(fml::RefPtr<EngineLayer> retainedLayer) {
if (!current_layer_) {
return;
}
current_layer_->Add(retainedLayer->Layer());
}

void SceneBuilder::pop() {
Expand Down Expand Up @@ -260,7 +270,7 @@ fml::RefPtr<Scene> SceneBuilder::build() {
return scene;
}

void SceneBuilder::PushLayer(std::unique_ptr<flow::ContainerLayer> layer) {
void SceneBuilder::PushLayer(std::shared_ptr<flow::ContainerLayer> layer) {
FML_DCHECK(layer);

if (!root_layer_) {
Expand Down
19 changes: 11 additions & 8 deletions lib/ui/compositing/scene_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "flutter/lib/ui/compositing/scene.h"
#include "flutter/lib/ui/compositing/scene_host.h"
#include "flutter/lib/ui/dart_wrapper.h"
#include "flutter/lib/ui/painting/engine_layer.h"
#include "flutter/lib/ui/painting/image_filter.h"
#include "flutter/lib/ui/painting/path.h"
#include "flutter/lib/ui/painting/picture.h"
Expand All @@ -33,7 +34,7 @@ class SceneBuilder : public RefCountedDartWrappable<SceneBuilder> {
~SceneBuilder() override;

void pushTransform(const tonic::Float64List& matrix4);
void pushOffset(double dx, double dy);
fml::RefPtr<EngineLayer> pushOffset(double dx, double dy);
void pushClipRect(double left,
double right,
double top,
Expand All @@ -50,11 +51,13 @@ class SceneBuilder : public RefCountedDartWrappable<SceneBuilder> {
double maskRectTop,
double maskRectBottom,
int blendMode);
void pushPhysicalShape(const CanvasPath* path,
double elevation,
int color,
int shadowColor,
int clipBehavior);
fml::RefPtr<EngineLayer> pushPhysicalShape(const CanvasPath* path,
double elevation,
int color,
int shadowColor,
int clipBehavior);

void addRetained(fml::RefPtr<EngineLayer> retainedLayer);

void pop();

Expand Down Expand Up @@ -92,14 +95,14 @@ class SceneBuilder : public RefCountedDartWrappable<SceneBuilder> {
private:
SceneBuilder();

std::unique_ptr<flow::ContainerLayer> root_layer_;
std::shared_ptr<flow::ContainerLayer> root_layer_;
flow::ContainerLayer* current_layer_ = nullptr;

int rasterizer_tracing_threshold_ = 0;
bool checkerboard_raster_cache_images_ = false;
bool checkerboard_offscreen_layers_ = false;

void PushLayer(std::unique_ptr<flow::ContainerLayer> layer);
void PushLayer(std::shared_ptr<flow::ContainerLayer> layer);

FML_DISALLOW_COPY_AND_ASSIGN(SceneBuilder);
};
Expand Down
2 changes: 2 additions & 0 deletions lib/ui/dart_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "flutter/lib/ui/isolate_name_server/isolate_name_server_natives.h"
#include "flutter/lib/ui/painting/canvas.h"
#include "flutter/lib/ui/painting/codec.h"
#include "flutter/lib/ui/painting/engine_layer.h"
#include "flutter/lib/ui/painting/frame_info.h"
#include "flutter/lib/ui/painting/gradient.h"
#include "flutter/lib/ui/painting/image.h"
Expand Down Expand Up @@ -70,6 +71,7 @@ void DartUI::InitForGlobal() {
CanvasPathMeasure::RegisterNatives(g_natives);
Codec::RegisterNatives(g_natives);
DartRuntimeHooks::RegisterNatives(g_natives);
EngineLayer::RegisterNatives(g_natives);
FrameInfo::RegisterNatives(g_natives);
ImageFilter::RegisterNatives(g_natives);
ImageShader::RegisterNatives(g_natives);
Expand Down
7 changes: 7 additions & 0 deletions lib/ui/painting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1742,6 +1742,13 @@ enum PathOperation {
reverseDifference,
}

/// A handle for the framework to hold and retain an engine layer across frames.
class EngineLayer extends NativeFieldWrapperClass2 {
/// This class is created by the engine, and should not be instantiated
/// or extended directly.
EngineLayer._();
}

/// A complex, one-dimensional subset of a plane.
///
/// A path consists of a number of subpaths, and a _current point_.
Expand Down
Loading