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..caa9b706720f3 --- /dev/null +++ b/flow/layers/layer_builder.cc @@ -0,0 +1,233 @@ +// 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/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" +#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_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 (!current_layer_) { + 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); + current_layer_->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..39e8cf17f1ab0 --- /dev/null +++ b/flow/layers/layer_builder.h @@ -0,0 +1,100 @@ +// 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..e1cc899136a3a 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) { @@ -67,81 +51,40 @@ void SceneBuilder::RegisterNatives(tonic::DartLibraryNatives* natives) { } SceneBuilder::SceneBuilder() - : m_currentLayer(nullptr), - m_currentRasterizerTracingThreshold(0), - m_checkerboardRasterCacheImages(false), - m_checkerboardOffscreenLayers(false) { - m_cullRects.push(SkRect::MakeLargest()); -} + : layer_builder_(std::make_unique()){}; -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 +93,36 @@ 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 +132,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,34 +144,30 @@ 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(); + layer_builder_.reset(); return scene; } diff --git a/lib/ui/compositing/scene_builder.h b/lib/ui/compositing/scene_builder.h index e2519f79fab7b..688230ae7317f 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; + std::unique_ptr layer_builder_; }; } // namespace blink 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