From d3697dbdc0c78b9a6fb9713fb2b44223d7dc6f91 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 10 Oct 2017 16:02:36 -0700 Subject: [PATCH 1/6] Move layer tree construction into flow::LayerBuilder so alternate builders can be plugged in. --- flow/BUILD.gn | 2 + flow/layers/layer_builder.cc | 232 ++++++++++++++++++++++++++++ flow/layers/layer_builder.h | 99 ++++++++++++ lib/ui/compositing/scene_builder.cc | 178 +++++---------------- lib/ui/compositing/scene_builder.h | 12 +- 5 files changed, 375 insertions(+), 148 deletions(-) create mode 100644 flow/layers/layer_builder.cc create mode 100644 flow/layers/layer_builder.h diff --git a/flow/BUILD.gn b/flow/BUILD.gn index d664128e8f2b2..bd1c6b739db8b 100644 --- a/flow/BUILD.gn +++ b/flow/BUILD.gn @@ -24,6 +24,8 @@ source_set("flow") { "layers/container_layer.h", "layers/layer.cc", "layers/layer.h", + "layers/layer_builder.cc", + "layers/layer_builder.h", "layers/layer_tree.cc", "layers/layer_tree.h", "layers/opacity_layer.cc", diff --git a/flow/layers/layer_builder.cc b/flow/layers/layer_builder.cc new file mode 100644 index 0000000000000..28c8758b69b09 --- /dev/null +++ b/flow/layers/layer_builder.cc @@ -0,0 +1,232 @@ +// Copyright 2017 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "flutter/flow/layers/backdrop_filter_layer.h" +#include "flutter/flow/layers/clip_path_layer.h" +#include "flutter/flow/layers/clip_rect_layer.h" +#include "flutter/flow/layers/clip_rrect_layer.h" +#include "flutter/flow/layers/color_filter_layer.h" +#include "flutter/flow/layers/container_layer.h" +#include "flutter/flow/layers/layer.h" +#include "flutter/flow/layers/layer_builder.h" +#include "flutter/flow/layers/layer_tree.h" +#include "flutter/flow/layers/opacity_layer.h" +#include "flutter/flow/layers/performance_overlay_layer.h" +#include "flutter/flow/layers/physical_model_layer.h" +#include "flutter/flow/layers/picture_layer.h" +#include "flutter/flow/layers/shader_mask_layer.h" +#include "flutter/flow/layers/transform_layer.h" + +#if defined(OS_FUCHSIA) +#include "flutter/flow/layers/child_scene_layer.h" +#endif // defined(OS_FUCHSIA) + +namespace flow { + +LayerBuilder::LayerBuilder() { + cull_rects_.push(SkRect::MakeLargest()); +} + +LayerBuilder::~LayerBuilder() = default; + +void LayerBuilder::PushTransform(const SkMatrix& sk_matrix) { + SkMatrix inverse_sk_matrix; + SkRect cullRect; + if (sk_matrix.invert(&inverse_sk_matrix)) { + inverse_sk_matrix.mapRect(&cullRect, cull_rects_.top()); + } else { + cullRect = SkRect::MakeLargest(); + } + + auto layer = std::make_unique(); + layer->set_transform(sk_matrix); + PushLayer(std::move(layer), cullRect); +} + +void LayerBuilder::PushClipRect(const SkRect& clipRect) { + SkRect cullRect; + if (!cullRect.intersect(clipRect, cull_rects_.top())) { + cullRect = SkRect::MakeEmpty(); + } + auto layer = std::make_unique(); + layer->set_clip_rect(clipRect); + PushLayer(std::move(layer), cullRect); +} + +void LayerBuilder::PushClipRoundedRect(const SkRRect& rrect) { + SkRect cullRect; + if (!cullRect.intersect(rrect.rect(), cull_rects_.top())) { + cullRect = SkRect::MakeEmpty(); + } + auto layer = std::make_unique(); + layer->set_clip_rrect(rrect); + PushLayer(std::move(layer), cullRect); +} + +void LayerBuilder::PushClipPath(const SkPath& path) { + SkRect cullRect; + if (!cullRect.intersect(path.getBounds(), cull_rects_.top())) { + cullRect = SkRect::MakeEmpty(); + } + auto layer = std::make_unique(); + layer->set_clip_path(path); + PushLayer(std::move(layer), cullRect); +} + +void LayerBuilder::PushOpacity(int alpha) { + auto layer = std::make_unique(); + layer->set_alpha(alpha); + PushLayer(std::move(layer), cull_rects_.top()); +} + +void LayerBuilder::PushColorFilter(SkColor color, SkBlendMode blend_mode) { + auto layer = std::make_unique(); + layer->set_color(color); + layer->set_blend_mode(blend_mode); + PushLayer(std::move(layer), cull_rects_.top()); +} + +void LayerBuilder::PushBackdropFilter(sk_sp filter) { + auto layer = std::make_unique(); + layer->set_filter(filter); + PushLayer(std::move(layer), cull_rects_.top()); +} + +void LayerBuilder::PushShaderMask(sk_sp shader, + const SkRect& rect, + SkBlendMode blend_mode) { + auto layer = std::make_unique(); + layer->set_shader(shader); + layer->set_mask_rect(rect); + layer->set_blend_mode(blend_mode); + PushLayer(std::move(layer), cull_rects_.top()); +} + +void LayerBuilder::PushPhysicalModel(const SkRRect& sk_rrect, + double elevation, + SkColor color, + SkScalar device_pixel_ratio) { + SkRect cullRect; + if (!cullRect.intersect(sk_rrect.rect(), cull_rects_.top())) { + cullRect = SkRect::MakeEmpty(); + } + auto layer = std::make_unique(); + layer->set_rrect(sk_rrect); + layer->set_elevation(elevation); + layer->set_color(color); + layer->set_device_pixel_ratio(device_pixel_ratio); + PushLayer(std::move(layer), cullRect); +} + +void LayerBuilder::PushPerformanceOverlay(uint64_t enabled_options, + const SkRect& rect) { + if (!current_layer_) { + return; + } + auto layer = std::make_unique(enabled_options); + layer->set_paint_bounds(rect); + current_layer_->Add(std::move(layer)); +} + +void LayerBuilder::PushPicture(const SkPoint& offset, + sk_sp picture, + bool picture_is_complex, + bool picture_will_change) { + if (!current_layer_) { + return; + } + SkRect pictureRect = picture->cullRect(); + pictureRect.offset(offset.x(), offset.y()); + if (!SkRect::Intersects(pictureRect, cull_rects_.top())) { + return; + } + auto layer = std::make_unique(); + layer->set_offset(offset); + layer->set_picture(picture); + layer->set_is_complex(picture_is_complex); + layer->set_will_change(picture_will_change); + current_layer_->Add(std::move(layer)); +} + +#if defined(OS_FUCHSIA) +void LayerBuilder::PushChildScene( + const SkPoint& offset, + const SkSize& size, + fxl::RefPtr export_token_holder, + bool hit_testable) { + if (!m_currentLayer) { + return; + } + SkRect sceneRect = + SkRect::MakeXYWH(offset.x(), offset.y(), size.width(), size.height()); + if (!SkRect::Intersects(sceneRect, cull_rects_.top())) { + return; + } + auto layer = std::make_unique(); + layer->set_offset(offset); + layer->set_size(size); + layer->set_export_node_holder(std::move(export_token_holder)); + layer->set_hit_testable(hit_testable); + m_currentLayer->Add(std::move(layer)); +} +#endif // defined(OS_FUCHSIA) + +void LayerBuilder::Pop() { + if (!current_layer_) { + return; + } + cull_rects_.pop(); + current_layer_ = current_layer_->parent(); +} + +int LayerBuilder::GetRasterizerTracingThreshold() const { + return rasterizer_tracing_threshold_; +} + +bool LayerBuilder::GetCheckerboardRasterCacheImages() const { + return checkerboard_raster_cache_images_; +} + +bool LayerBuilder::GetCheckerboardOffscreenLayers() const { + return checkerboard_offscreen_layers_; +} + +void LayerBuilder::SetRasterizerTracingThreshold(uint32_t frameInterval) { + rasterizer_tracing_threshold_ = frameInterval; +} + +void LayerBuilder::SetCheckerboardRasterCacheImages(bool checkerboard) { + checkerboard_raster_cache_images_ = checkerboard; +} + +void LayerBuilder::SetCheckerboardOffscreenLayers(bool checkerboard) { + checkerboard_offscreen_layers_ = checkerboard; +} + +std::unique_ptr LayerBuilder::TakeLayer() { + return std::move(root_layer_); +} + +void LayerBuilder::PushLayer(std::unique_ptr layer, + const SkRect& cullRect) { + FXL_DCHECK(layer); + + cull_rects_.push(cullRect); + + if (!root_layer_) { + root_layer_ = std::move(layer); + current_layer_ = root_layer_.get(); + return; + } + + if (!current_layer_) { + return; + } + + flow::ContainerLayer* newLayer = layer.get(); + current_layer_->Add(std::move(layer)); + current_layer_ = newLayer; +} + +} // namespace flow diff --git a/flow/layers/layer_builder.h b/flow/layers/layer_builder.h new file mode 100644 index 0000000000000..bcee098520514 --- /dev/null +++ b/flow/layers/layer_builder.h @@ -0,0 +1,99 @@ +// Copyright 2017 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ +#define FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ + +#include +#include +#include "flutter/flow/layers/container_layer.h" +#include "garnet/public/lib/fxl/macros.h" +#include "third_party/skia/include/core/SkBlendMode.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkImageFilter.h" +#include "third_party/skia/include/core/SkMatrix.h" +#include "third_party/skia/include/core/SkPath.h" +#include "third_party/skia/include/core/SkPicture.h" +#include "third_party/skia/include/core/SkRRect.h" +#include "third_party/skia/include/core/SkRect.h" +#include "third_party/skia/include/core/SkShader.h" + +namespace flow { + +class LayerBuilder { + public: + LayerBuilder(); + + ~LayerBuilder(); + + void PushTransform(const SkMatrix& matrix); + + void PushClipRect(const SkRect& rect); + + void PushClipRoundedRect(const SkRRect& rect); + + void PushClipPath(const SkPath& path); + + void PushOpacity(int alpha); + + void PushColorFilter(SkColor color, SkBlendMode blend_mode); + + void PushBackdropFilter(sk_sp filter); + + void PushShaderMask(sk_sp shader, + const SkRect& rect, + SkBlendMode blend_mode); + + void PushPhysicalModel(const SkRRect& rect, + double elevation, + SkColor color, + SkScalar device_pixel_ratio); + + void PushPerformanceOverlay(uint64_t enabled_options, const SkRect& rect); + + void PushPicture(const SkPoint& offset, + sk_sp picture, + bool picture_is_complex, + bool picture_will_change); + +#if defined(OS_FUCHSIA) + void PushChildScene(const SkPoint& offset, + const SkSize& size, + fxl::RefPtr export_token_holder, + bool hit_testable); +#endif // defined(OS_FUCHSIA) + + void Pop(); + + int GetRasterizerTracingThreshold() const; + + bool GetCheckerboardRasterCacheImages() const; + + bool GetCheckerboardOffscreenLayers() const; + + void SetRasterizerTracingThreshold(uint32_t frameInterval); + + void SetCheckerboardRasterCacheImages(bool checkerboard); + + void SetCheckerboardOffscreenLayers(bool checkerboard); + + std::unique_ptr TakeLayer(); + + private: + std::unique_ptr root_layer_; + flow::ContainerLayer* current_layer_ = nullptr; + int rasterizer_tracing_threshold_ = 0; + bool checkerboard_raster_cache_images_ = false; + bool checkerboard_offscreen_layers_ = false; + std::stack cull_rects_; + + void PushLayer(std::unique_ptr layer, + const SkRect& cullRect); + + FXL_DISALLOW_COPY_AND_ASSIGN(LayerBuilder); +}; + +} // namespace flow + +#endif // FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ diff --git a/lib/ui/compositing/scene_builder.cc b/lib/ui/compositing/scene_builder.cc index d1e3e61cc03fc..6292d41a944c2 100644 --- a/lib/ui/compositing/scene_builder.cc +++ b/lib/ui/compositing/scene_builder.cc @@ -66,82 +66,40 @@ void SceneBuilder::RegisterNatives(tonic::DartLibraryNatives* natives) { FOR_EACH_BINDING(DART_REGISTER_NATIVE)}); } -SceneBuilder::SceneBuilder() - : m_currentLayer(nullptr), - m_currentRasterizerTracingThreshold(0), - m_checkerboardRasterCacheImages(false), - m_checkerboardOffscreenLayers(false) { - m_cullRects.push(SkRect::MakeLargest()); -} +SceneBuilder::SceneBuilder() = default; -SceneBuilder::~SceneBuilder() {} +SceneBuilder::~SceneBuilder() = default; void SceneBuilder::pushTransform(const tonic::Float64List& matrix4) { - SkMatrix sk_matrix = ToSkMatrix(matrix4); - SkMatrix inverse_sk_matrix; - SkRect cullRect; - if (sk_matrix.invert(&inverse_sk_matrix)) - inverse_sk_matrix.mapRect(&cullRect, m_cullRects.top()); - else - cullRect = SkRect::MakeLargest(); - - std::unique_ptr layer(new flow::TransformLayer()); - layer->set_transform(sk_matrix); - addLayer(std::move(layer), cullRect); + layer_builder_.PushTransform(ToSkMatrix(matrix4)); } void SceneBuilder::pushClipRect(double left, double right, double top, double bottom) { - const SkRect clipRect = SkRect::MakeLTRB(left, top, right, bottom); - SkRect cullRect; - if (!cullRect.intersect(clipRect, m_cullRects.top())) - cullRect = SkRect::MakeEmpty(); - - std::unique_ptr layer(new flow::ClipRectLayer()); - layer->set_clip_rect(clipRect); - addLayer(std::move(layer), cullRect); + layer_builder_.PushClipRect(SkRect::MakeLTRB(left, top, right, bottom)); } void SceneBuilder::pushClipRRect(const RRect& rrect) { - SkRect cullRect; - if (!cullRect.intersect(rrect.sk_rrect.rect(), m_cullRects.top())) - cullRect = SkRect::MakeEmpty(); - - std::unique_ptr layer(new flow::ClipRRectLayer()); - layer->set_clip_rrect(rrect.sk_rrect); - addLayer(std::move(layer), cullRect); + layer_builder_.PushClipRoundedRect(rrect.sk_rrect); } void SceneBuilder::pushClipPath(const CanvasPath* path) { - SkRect cullRect; - if (!cullRect.intersect(path->path().getBounds(), m_cullRects.top())) - cullRect = SkRect::MakeEmpty(); - - std::unique_ptr layer(new flow::ClipPathLayer()); - layer->set_clip_path(path->path()); - addLayer(std::move(layer), cullRect); + layer_builder_.PushClipPath(path->path()); } void SceneBuilder::pushOpacity(int alpha) { - std::unique_ptr layer(new flow::OpacityLayer()); - layer->set_alpha(alpha); - addLayer(std::move(layer), m_cullRects.top()); + layer_builder_.PushOpacity(alpha); } void SceneBuilder::pushColorFilter(int color, int blendMode) { - std::unique_ptr layer(new flow::ColorFilterLayer()); - layer->set_color(static_cast(color)); - layer->set_blend_mode(static_cast(blendMode)); - addLayer(std::move(layer), m_cullRects.top()); + layer_builder_.PushColorFilter(static_cast(color), + static_cast(blendMode)); } void SceneBuilder::pushBackdropFilter(ImageFilter* filter) { - std::unique_ptr layer( - new flow::BackdropFilterLayer()); - layer->set_filter(filter->filter()); - addLayer(std::move(layer), m_cullRects.top()); + layer_builder_.PushBackdropFilter(filter->filter()); } void SceneBuilder::pushShaderMask(Shader* shader, @@ -150,77 +108,35 @@ void SceneBuilder::pushShaderMask(Shader* shader, double maskRectTop, double maskRectBottom, int blendMode) { - std::unique_ptr layer(new flow::ShaderMaskLayer()); - layer->set_shader(shader->shader()); - layer->set_mask_rect(SkRect::MakeLTRB(maskRectLeft, maskRectTop, - maskRectRight, maskRectBottom)); - layer->set_blend_mode(static_cast(blendMode)); - addLayer(std::move(layer), m_cullRects.top()); + layer_builder_.PushShaderMask(shader->shader(), + SkRect::MakeLTRB(maskRectLeft, maskRectTop, + maskRectRight, maskRectBottom), + static_cast(blendMode)); } void SceneBuilder::pushPhysicalModel(const RRect& rrect, double elevation, int color) { - SkRect cullRect; - if (!cullRect.intersect(rrect.sk_rrect.rect(), m_cullRects.top())) - cullRect = SkRect::MakeEmpty(); - - SkScalar dpr = - UIDartState::Current()->window()->viewport_metrics().device_pixel_ratio; - - std::unique_ptr layer( - new flow::PhysicalModelLayer()); - layer->set_rrect(rrect.sk_rrect); - layer->set_elevation(elevation); - layer->set_color(color); - layer->set_device_pixel_ratio(dpr); - addLayer(std::move(layer), cullRect); -} - -void SceneBuilder::addLayer(std::unique_ptr layer, - const SkRect& cullRect) { - FXL_DCHECK(layer); - - m_cullRects.push(cullRect); - - if (!m_rootLayer) { - FXL_DCHECK(!m_currentLayer); - m_rootLayer = std::move(layer); - m_currentLayer = m_rootLayer.get(); - return; - } - if (!m_currentLayer) - return; - flow::ContainerLayer* newLayer = layer.get(); - m_currentLayer->Add(std::move(layer)); - m_currentLayer = newLayer; + layer_builder_.PushPhysicalModel( + rrect.sk_rrect, // + elevation, // + static_cast(color), // + UIDartState::Current()->window()->viewport_metrics().device_pixel_ratio); } void SceneBuilder::pop() { - if (!m_currentLayer) - return; - m_cullRects.pop(); - m_currentLayer = m_currentLayer->parent(); + layer_builder_.Pop(); } void SceneBuilder::addPicture(double dx, double dy, Picture* picture, int hints) { - if (!m_currentLayer) - return; - - SkRect pictureRect = picture->picture()->cullRect(); - pictureRect.offset(dx, dy); - if (!SkRect::Intersects(pictureRect, m_cullRects.top())) - return; - - std::unique_ptr layer(new flow::PictureLayer()); - layer->set_offset(SkPoint::Make(dx, dy)); - layer->set_picture(picture->picture()); - layer->set_is_complex(!!(hints & 1)); - layer->set_will_change(!!(hints & 2)); - m_currentLayer->Add(std::move(layer)); + layer_builder_.PushPicture(SkPoint::Make(dx, dy), // + picture->picture(), // + !!(hints & 1), // picture is complex + !!(hints & 2) // picture will change + ); } void SceneBuilder::addChildScene(double dx, @@ -230,20 +146,11 @@ void SceneBuilder::addChildScene(double dx, SceneHost* sceneHost, bool hitTestable) { #if defined(OS_FUCHSIA) - if (!m_currentLayer) - return; - - SkRect sceneRect = SkRect::MakeXYWH(dx, dy, width, height); - if (!SkRect::Intersects(sceneRect, m_cullRects.top())) - return; - - std::unique_ptr layer(new flow::ChildSceneLayer()); - layer->set_offset(SkPoint::Make(dx, dy)); - layer->set_size(SkSize::Make(width, height)); - layer->set_export_node_holder(sceneHost->export_node_holder()); - layer->set_hit_testable(hitTestable); - m_currentLayer->Add(std::move(layer)); -#endif + layer_builder_.PushChildScene(SkPoint::Make(dx, dy), // + SkSize::Make(width, height), // + sceneHost->export_node_holder(), // + hitTestable); +#endif // defined(OS_FUCHSIA) } void SceneBuilder::addPerformanceOverlay(uint64_t enabledOptions, @@ -251,33 +158,28 @@ void SceneBuilder::addPerformanceOverlay(uint64_t enabledOptions, double right, double top, double bottom) { - if (!m_currentLayer) - return; - std::unique_ptr layer( - new flow::PerformanceOverlayLayer(enabledOptions)); - layer->set_paint_bounds(SkRect::MakeLTRB(left, top, right, bottom)); - m_currentLayer->Add(std::move(layer)); + layer_builder_.PushPerformanceOverlay( + enabledOptions, SkRect::MakeLTRB(left, top, right, bottom)); } void SceneBuilder::setRasterizerTracingThreshold(uint32_t frameInterval) { - m_currentRasterizerTracingThreshold = frameInterval; + layer_builder_.SetRasterizerTracingThreshold(frameInterval); } void SceneBuilder::setCheckerboardRasterCacheImages(bool checkerboard) { - m_checkerboardRasterCacheImages = checkerboard; + layer_builder_.SetCheckerboardRasterCacheImages(checkerboard); } void SceneBuilder::setCheckerboardOffscreenLayers(bool checkerboard) { - m_checkerboardOffscreenLayers = checkerboard; + layer_builder_.SetCheckerboardOffscreenLayers(checkerboard); } fxl::RefPtr SceneBuilder::build() { - m_currentLayer = nullptr; - int32_t threshold = m_currentRasterizerTracingThreshold; - m_currentRasterizerTracingThreshold = 0; - fxl::RefPtr scene = Scene::create(std::move(m_rootLayer), threshold, - m_checkerboardRasterCacheImages, - m_checkerboardOffscreenLayers); + fxl::RefPtr scene = + Scene::create(layer_builder_.TakeLayer(), + layer_builder_.GetRasterizerTracingThreshold(), + layer_builder_.GetCheckerboardRasterCacheImages(), + layer_builder_.GetCheckerboardOffscreenLayers()); ClearDartWrapper(); return scene; } diff --git a/lib/ui/compositing/scene_builder.h b/lib/ui/compositing/scene_builder.h index e2519f79fab7b..cf98c82afc5e1 100644 --- a/lib/ui/compositing/scene_builder.h +++ b/lib/ui/compositing/scene_builder.h @@ -9,7 +9,7 @@ #include #include -#include "flutter/flow/layers/container_layer.h" +#include "flutter/flow/layers/layer_builder.h" #include "flutter/lib/ui/compositing/scene.h" #include "flutter/lib/ui/compositing/scene_host.h" #include "flutter/lib/ui/painting/image_filter.h" @@ -76,15 +76,7 @@ class SceneBuilder : public fxl::RefCountedThreadSafe, private: SceneBuilder(); - void addLayer(std::unique_ptr layer, - const SkRect& cullRect); - - std::unique_ptr m_rootLayer; - flow::ContainerLayer* m_currentLayer; - int32_t m_currentRasterizerTracingThreshold; - bool m_checkerboardRasterCacheImages; - bool m_checkerboardOffscreenLayers; - std::stack m_cullRects; + flow::LayerBuilder layer_builder_; }; } // namespace blink From f3d69fcbba0c654e224c3ae84c46bf3c89679a08 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 10 Oct 2017 16:07:10 -0700 Subject: [PATCH 2/6] Licenses. --- travis/licenses_golden/licenses_flutter | 32 +++++++++++++------------ 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/travis/licenses_golden/licenses_flutter b/travis/licenses_golden/licenses_flutter index 05614632b22fc..8e9899afe97b6 100644 --- a/travis/licenses_golden/licenses_flutter +++ b/travis/licenses_golden/licenses_flutter @@ -1528,11 +1528,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ==================================================================================================== LIBRARY: engine -ORIGIN: ../../../flutter/fml/platform/darwin/scoped_block.h + ../../../LICENSE +ORIGIN: ../../../flutter/flow/layers/layer_builder.cc + ../../../LICENSE TYPE: LicenseType.bsd -FILE: ../../../flutter/fml/platform/darwin/scoped_block.h +FILE: ../../../flutter/flow/layers/layer_builder.cc +FILE: ../../../flutter/flow/layers/layer_builder.h +FILE: ../../../flutter/shell/platform/embedder/embedder.h ---------------------------------------------------------------------------------------------------- -Copyright (c) 2013 The Chromium Authors. All rights reserved. +Copyright 2017 The Flutter Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -1563,17 +1565,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ==================================================================================================== LIBRARY: engine -ORIGIN: ../../../flutter/lib/ui/painting/image.cc + ../../../LICENSE +ORIGIN: ../../../flutter/fml/platform/darwin/scoped_block.h + ../../../LICENSE TYPE: LicenseType.bsd -FILE: ../../../flutter/lib/ui/painting/image.cc -FILE: ../../../flutter/lib/ui/painting/image.h -FILE: ../../../flutter/shell/common/switches.cc -FILE: ../../../flutter/shell/common/switches.h -FILE: ../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java -FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterMain.java -FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterView.java +FILE: ../../../flutter/fml/platform/darwin/scoped_block.h ---------------------------------------------------------------------------------------------------- -Copyright 2013 The Chromium Authors. All rights reserved. +Copyright (c) 2013 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 @@ -1604,11 +1600,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ==================================================================================================== LIBRARY: engine -ORIGIN: ../../../flutter/shell/platform/embedder/embedder.h + ../../../LICENSE +ORIGIN: ../../../flutter/lib/ui/painting/image.cc + ../../../LICENSE TYPE: LicenseType.bsd -FILE: ../../../flutter/shell/platform/embedder/embedder.h +FILE: ../../../flutter/lib/ui/painting/image.cc +FILE: ../../../flutter/lib/ui/painting/image.h +FILE: ../../../flutter/shell/common/switches.cc +FILE: ../../../flutter/shell/common/switches.h +FILE: ../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java +FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterMain.java +FILE: ../../../flutter/shell/platform/android/io/flutter/view/FlutterView.java ---------------------------------------------------------------------------------------------------- -Copyright 2017 The Flutter Authors. All rights reserved. +Copyright 2013 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 From 28dda895ffa3385d6d3cbf6c21e4dba4b9b565cd Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 10 Oct 2017 16:17:42 -0700 Subject: [PATCH 3/6] Clean up headers. --- lib/ui/compositing/scene_builder.cc | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/lib/ui/compositing/scene_builder.cc b/lib/ui/compositing/scene_builder.cc index 6292d41a944c2..cf395f61c1b14 100644 --- a/lib/ui/compositing/scene_builder.cc +++ b/lib/ui/compositing/scene_builder.cc @@ -4,18 +4,6 @@ #include "flutter/lib/ui/compositing/scene_builder.h" -#include "flutter/flow/layers/backdrop_filter_layer.h" -#include "flutter/flow/layers/clip_path_layer.h" -#include "flutter/flow/layers/clip_rect_layer.h" -#include "flutter/flow/layers/clip_rrect_layer.h" -#include "flutter/flow/layers/color_filter_layer.h" -#include "flutter/flow/layers/container_layer.h" -#include "flutter/flow/layers/opacity_layer.h" -#include "flutter/flow/layers/performance_overlay_layer.h" -#include "flutter/flow/layers/physical_model_layer.h" -#include "flutter/flow/layers/picture_layer.h" -#include "flutter/flow/layers/shader_mask_layer.h" -#include "flutter/flow/layers/transform_layer.h" #include "flutter/lib/ui/painting/matrix.h" #include "flutter/lib/ui/painting/shader.h" #include "flutter/lib/ui/ui_dart_state.h" @@ -27,10 +15,6 @@ #include "lib/tonic/dart_library_natives.h" #include "third_party/skia/include/core/SkColorFilter.h" -#if defined(OS_FUCHSIA) -#include "flutter/flow/layers/child_scene_layer.h" -#endif - namespace blink { static void SceneBuilder_constructor(Dart_NativeArguments args) { From 5fabf6c3f63fa56af132d8725b61d6bd3a4c0646 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 10 Oct 2017 16:22:56 -0700 Subject: [PATCH 4/6] Use pointer to flow::LayerBuilder in blink::SceneBuilder. --- lib/ui/compositing/scene_builder.cc | 65 +++++++++++++++-------------- lib/ui/compositing/scene_builder.h | 2 +- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/lib/ui/compositing/scene_builder.cc b/lib/ui/compositing/scene_builder.cc index cf395f61c1b14..e1cc899136a3a 100644 --- a/lib/ui/compositing/scene_builder.cc +++ b/lib/ui/compositing/scene_builder.cc @@ -50,40 +50,41 @@ void SceneBuilder::RegisterNatives(tonic::DartLibraryNatives* natives) { FOR_EACH_BINDING(DART_REGISTER_NATIVE)}); } -SceneBuilder::SceneBuilder() = default; +SceneBuilder::SceneBuilder() + : layer_builder_(std::make_unique()){}; SceneBuilder::~SceneBuilder() = default; void SceneBuilder::pushTransform(const tonic::Float64List& matrix4) { - layer_builder_.PushTransform(ToSkMatrix(matrix4)); + layer_builder_->PushTransform(ToSkMatrix(matrix4)); } void SceneBuilder::pushClipRect(double left, double right, double top, double bottom) { - layer_builder_.PushClipRect(SkRect::MakeLTRB(left, top, right, bottom)); + layer_builder_->PushClipRect(SkRect::MakeLTRB(left, top, right, bottom)); } void SceneBuilder::pushClipRRect(const RRect& rrect) { - layer_builder_.PushClipRoundedRect(rrect.sk_rrect); + layer_builder_->PushClipRoundedRect(rrect.sk_rrect); } void SceneBuilder::pushClipPath(const CanvasPath* path) { - layer_builder_.PushClipPath(path->path()); + layer_builder_->PushClipPath(path->path()); } void SceneBuilder::pushOpacity(int alpha) { - layer_builder_.PushOpacity(alpha); + layer_builder_->PushOpacity(alpha); } void SceneBuilder::pushColorFilter(int color, int blendMode) { - layer_builder_.PushColorFilter(static_cast(color), - static_cast(blendMode)); + layer_builder_->PushColorFilter(static_cast(color), + static_cast(blendMode)); } void SceneBuilder::pushBackdropFilter(ImageFilter* filter) { - layer_builder_.PushBackdropFilter(filter->filter()); + layer_builder_->PushBackdropFilter(filter->filter()); } void SceneBuilder::pushShaderMask(Shader* shader, @@ -92,16 +93,17 @@ void SceneBuilder::pushShaderMask(Shader* shader, double maskRectTop, double maskRectBottom, int blendMode) { - layer_builder_.PushShaderMask(shader->shader(), - SkRect::MakeLTRB(maskRectLeft, maskRectTop, - maskRectRight, maskRectBottom), - static_cast(blendMode)); + layer_builder_->PushShaderMask( + shader->shader(), + SkRect::MakeLTRB(maskRectLeft, maskRectTop, maskRectRight, + maskRectBottom), + static_cast(blendMode)); } void SceneBuilder::pushPhysicalModel(const RRect& rrect, double elevation, int color) { - layer_builder_.PushPhysicalModel( + layer_builder_->PushPhysicalModel( rrect.sk_rrect, // elevation, // static_cast(color), // @@ -109,17 +111,17 @@ void SceneBuilder::pushPhysicalModel(const RRect& rrect, } void SceneBuilder::pop() { - layer_builder_.Pop(); + layer_builder_->Pop(); } void SceneBuilder::addPicture(double dx, double dy, Picture* picture, int hints) { - layer_builder_.PushPicture(SkPoint::Make(dx, dy), // - picture->picture(), // - !!(hints & 1), // picture is complex - !!(hints & 2) // picture will change + layer_builder_->PushPicture(SkPoint::Make(dx, dy), // + picture->picture(), // + !!(hints & 1), // picture is complex + !!(hints & 2) // picture will change ); } @@ -130,10 +132,10 @@ void SceneBuilder::addChildScene(double dx, SceneHost* sceneHost, bool hitTestable) { #if defined(OS_FUCHSIA) - layer_builder_.PushChildScene(SkPoint::Make(dx, dy), // - SkSize::Make(width, height), // - sceneHost->export_node_holder(), // - hitTestable); + layer_builder_->PushChildScene(SkPoint::Make(dx, dy), // + SkSize::Make(width, height), // + sceneHost->export_node_holder(), // + hitTestable); #endif // defined(OS_FUCHSIA) } @@ -142,29 +144,30 @@ void SceneBuilder::addPerformanceOverlay(uint64_t enabledOptions, double right, double top, double bottom) { - layer_builder_.PushPerformanceOverlay( + layer_builder_->PushPerformanceOverlay( enabledOptions, SkRect::MakeLTRB(left, top, right, bottom)); } void SceneBuilder::setRasterizerTracingThreshold(uint32_t frameInterval) { - layer_builder_.SetRasterizerTracingThreshold(frameInterval); + layer_builder_->SetRasterizerTracingThreshold(frameInterval); } void SceneBuilder::setCheckerboardRasterCacheImages(bool checkerboard) { - layer_builder_.SetCheckerboardRasterCacheImages(checkerboard); + layer_builder_->SetCheckerboardRasterCacheImages(checkerboard); } void SceneBuilder::setCheckerboardOffscreenLayers(bool checkerboard) { - layer_builder_.SetCheckerboardOffscreenLayers(checkerboard); + layer_builder_->SetCheckerboardOffscreenLayers(checkerboard); } fxl::RefPtr SceneBuilder::build() { fxl::RefPtr scene = - Scene::create(layer_builder_.TakeLayer(), - layer_builder_.GetRasterizerTracingThreshold(), - layer_builder_.GetCheckerboardRasterCacheImages(), - layer_builder_.GetCheckerboardOffscreenLayers()); + Scene::create(layer_builder_->TakeLayer(), + layer_builder_->GetRasterizerTracingThreshold(), + layer_builder_->GetCheckerboardRasterCacheImages(), + layer_builder_->GetCheckerboardOffscreenLayers()); ClearDartWrapper(); + layer_builder_.reset(); return scene; } diff --git a/lib/ui/compositing/scene_builder.h b/lib/ui/compositing/scene_builder.h index cf98c82afc5e1..688230ae7317f 100644 --- a/lib/ui/compositing/scene_builder.h +++ b/lib/ui/compositing/scene_builder.h @@ -76,7 +76,7 @@ class SceneBuilder : public fxl::RefCountedThreadSafe, private: SceneBuilder(); - flow::LayerBuilder layer_builder_; + std::unique_ptr layer_builder_; }; } // namespace blink From a1a85ea2c21779fb595a0272cb4d14502dd61a3f Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 11 Oct 2017 11:42:05 -0700 Subject: [PATCH 5/6] Fix headers. --- flow/layers/layer_builder.cc | 3 ++- flow/layers/layer_builder.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/flow/layers/layer_builder.cc b/flow/layers/layer_builder.cc index 28c8758b69b09..fc3e6c4a118cf 100644 --- a/flow/layers/layer_builder.cc +++ b/flow/layers/layer_builder.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "flutter/flow/layers/layer_builder.h" + #include "flutter/flow/layers/backdrop_filter_layer.h" #include "flutter/flow/layers/clip_path_layer.h" #include "flutter/flow/layers/clip_rect_layer.h" @@ -9,7 +11,6 @@ #include "flutter/flow/layers/color_filter_layer.h" #include "flutter/flow/layers/container_layer.h" #include "flutter/flow/layers/layer.h" -#include "flutter/flow/layers/layer_builder.h" #include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/opacity_layer.h" #include "flutter/flow/layers/performance_overlay_layer.h" diff --git a/flow/layers/layer_builder.h b/flow/layers/layer_builder.h index bcee098520514..39e8cf17f1ab0 100644 --- a/flow/layers/layer_builder.h +++ b/flow/layers/layer_builder.h @@ -7,6 +7,7 @@ #include #include + #include "flutter/flow/layers/container_layer.h" #include "garnet/public/lib/fxl/macros.h" #include "third_party/skia/include/core/SkBlendMode.h" From ccb04f95f15945ec2ab6a9b9c7a8532fd502287d Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 11 Oct 2017 12:17:40 -0700 Subject: [PATCH 6/6] Fix fuchsia builds. --- flow/layers/layer_builder.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flow/layers/layer_builder.cc b/flow/layers/layer_builder.cc index fc3e6c4a118cf..caa9b706720f3 100644 --- a/flow/layers/layer_builder.cc +++ b/flow/layers/layer_builder.cc @@ -156,7 +156,7 @@ void LayerBuilder::PushChildScene( const SkSize& size, fxl::RefPtr export_token_holder, bool hit_testable) { - if (!m_currentLayer) { + if (!current_layer_) { return; } SkRect sceneRect = @@ -169,7 +169,7 @@ void LayerBuilder::PushChildScene( layer->set_size(size); layer->set_export_node_holder(std::move(export_token_holder)); layer->set_hit_testable(hit_testable); - m_currentLayer->Add(std::move(layer)); + current_layer_->Add(std::move(layer)); } #endif // defined(OS_FUCHSIA)