diff --git a/engine/src/flutter/impeller/BUILD.gn b/engine/src/flutter/impeller/BUILD.gn index 90fb1942d27..f46067dd58e 100644 --- a/engine/src/flutter/impeller/BUILD.gn +++ b/engine/src/flutter/impeller/BUILD.gn @@ -3,7 +3,10 @@ # found in the LICENSE file. config("impeller_public_config") { - include_dirs = [ ".." ] + include_dirs = [ + "..", + ".", + ] } is_host = is_mac || is_linux || is_win diff --git a/engine/src/flutter/impeller/aiks/BUILD.gn b/engine/src/flutter/impeller/aiks/BUILD.gn index a3398f394b5..8f7df7aa66a 100644 --- a/engine/src/flutter/impeller/aiks/BUILD.gn +++ b/engine/src/flutter/impeller/aiks/BUILD.gn @@ -6,8 +6,8 @@ import("../tools/impeller.gni") impeller_component("aiks") { sources = [ - "aiks_renderer.cc", - "aiks_renderer.h", + "aiks_context.cc", + "aiks_context.h", "canvas.cc", "canvas.h", "image.cc", diff --git a/engine/src/flutter/impeller/aiks/aiks_renderer.cc b/engine/src/flutter/impeller/aiks/aiks_context.cc similarity index 53% rename from engine/src/flutter/impeller/aiks/aiks_renderer.cc rename to engine/src/flutter/impeller/aiks/aiks_context.cc index dbdc2838ad1..da4ae4c833d 100644 --- a/engine/src/flutter/impeller/aiks/aiks_renderer.cc +++ b/engine/src/flutter/impeller/aiks/aiks_context.cc @@ -2,39 +2,39 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/aiks/aiks_renderer.h" +#include "impeller/aiks/aiks_context.h" #include "impeller/aiks/picture.h" namespace impeller { -AiksRenderer::AiksRenderer(std::shared_ptr context) +AiksContext::AiksContext(std::shared_ptr context) : context_(std::move(context)) { if (!context_ || !context_->IsValid()) { return; } - content_renderer_ = std::make_unique(context_); - if (!content_renderer_->IsValid()) { + content_context_ = std::make_unique(context_); + if (!content_context_->IsValid()) { return; } is_valid_ = true; } -AiksRenderer::~AiksRenderer() = default; +AiksContext::~AiksContext() = default; -bool AiksRenderer::IsValid() const { +bool AiksContext::IsValid() const { return is_valid_; } -bool AiksRenderer::Render(const Picture& picture, RenderPass& parent_pass) { +bool AiksContext::Render(const Picture& picture, RenderPass& parent_pass) { if (!IsValid()) { return false; } if (picture.pass) { - return picture.pass->Render(*content_renderer_, parent_pass); + return picture.pass->Render(*content_context_, parent_pass); } return true; diff --git a/engine/src/flutter/impeller/aiks/aiks_renderer.h b/engine/src/flutter/impeller/aiks/aiks_context.h similarity index 69% rename from engine/src/flutter/impeller/aiks/aiks_renderer.h rename to engine/src/flutter/impeller/aiks/aiks_context.h index aa09a7ab474..edbdd604a49 100644 --- a/engine/src/flutter/impeller/aiks/aiks_renderer.h +++ b/engine/src/flutter/impeller/aiks/aiks_context.h @@ -7,7 +7,7 @@ #include #include "flutter/fml/macros.h" -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" #include "impeller/renderer/context.h" namespace impeller { @@ -15,11 +15,11 @@ namespace impeller { struct Picture; class RenderPass; -class AiksRenderer { +class AiksContext { public: - AiksRenderer(std::shared_ptr context); + AiksContext(std::shared_ptr context); - ~AiksRenderer(); + ~AiksContext(); bool IsValid() const; @@ -27,10 +27,10 @@ class AiksRenderer { private: std::shared_ptr context_; - std::unique_ptr content_renderer_; + std::unique_ptr content_context_; bool is_valid_ = false; - FML_DISALLOW_COPY_AND_ASSIGN(AiksRenderer); + FML_DISALLOW_COPY_AND_ASSIGN(AiksContext); }; } // namespace impeller diff --git a/engine/src/flutter/impeller/aiks/aiks_playground.cc b/engine/src/flutter/impeller/aiks/aiks_playground.cc index 32c301b4ca9..ff2513b31d5 100644 --- a/engine/src/flutter/impeller/aiks/aiks_playground.cc +++ b/engine/src/flutter/impeller/aiks/aiks_playground.cc @@ -4,7 +4,7 @@ #include "impeller/aiks/aiks_playground.h" -#include "impeller/aiks/aiks_renderer.h" +#include "impeller/aiks/aiks_context.h" namespace impeller { @@ -13,7 +13,7 @@ AiksPlayground::AiksPlayground() = default; AiksPlayground::~AiksPlayground() = default; bool AiksPlayground::OpenPlaygroundHere(const Picture& picture) { - AiksRenderer renderer(GetContext()); + AiksContext renderer(GetContext()); if (!renderer.IsValid()) { return false; diff --git a/engine/src/flutter/impeller/display_list/display_list_dispatcher.h b/engine/src/flutter/impeller/display_list/display_list_dispatcher.h index 2ee6f790e62..d007de6653a 100644 --- a/engine/src/flutter/impeller/display_list/display_list_dispatcher.h +++ b/engine/src/flutter/impeller/display_list/display_list_dispatcher.h @@ -5,6 +5,7 @@ #pragma once #include "flutter/display_list/display_list.h" +#include "flutter/display_list/display_list_dispatcher.h" #include "flutter/fml/macros.h" #include "impeller/aiks/canvas.h" #include "impeller/aiks/paint.h" diff --git a/engine/src/flutter/impeller/entity/BUILD.gn b/engine/src/flutter/impeller/entity/BUILD.gn index 19fbd42a67c..e6c109e06e9 100644 --- a/engine/src/flutter/impeller/entity/BUILD.gn +++ b/engine/src/flutter/impeller/entity/BUILD.gn @@ -21,8 +21,8 @@ impeller_shaders("entity_shaders") { impeller_component("entity") { sources = [ - "content_renderer.cc", - "content_renderer.h", + "content_context.cc", + "content_context.h", "contents.cc", "contents.h", "entity.cc", diff --git a/engine/src/flutter/impeller/entity/content_renderer.cc b/engine/src/flutter/impeller/entity/content_context.cc similarity index 87% rename from engine/src/flutter/impeller/entity/content_renderer.cc rename to engine/src/flutter/impeller/entity/content_context.cc index d22e81f104a..ed0dcc5ddb0 100644 --- a/engine/src/flutter/impeller/entity/content_renderer.cc +++ b/engine/src/flutter/impeller/entity/content_context.cc @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" namespace impeller { -ContentRenderer::ContentRenderer(std::shared_ptr context) +ContentContext::ContentContext(std::shared_ptr context) : context_(std::move(context)) { if (!context_ || !context_->IsValid()) { return; @@ -46,13 +46,13 @@ ContentRenderer::ContentRenderer(std::shared_ptr context) is_valid_ = true; } -ContentRenderer::~ContentRenderer() = default; +ContentContext::~ContentContext() = default; -bool ContentRenderer::IsValid() const { +bool ContentContext::IsValid() const { return is_valid_; } -std::shared_ptr ContentRenderer::GetContext() const { +std::shared_ptr ContentContext::GetContext() const { return context_; } diff --git a/engine/src/flutter/impeller/entity/content_renderer.h b/engine/src/flutter/impeller/entity/content_context.h similarity index 96% rename from engine/src/flutter/impeller/entity/content_renderer.h rename to engine/src/flutter/impeller/entity/content_context.h index 4e4aab0e366..0143fb29135 100644 --- a/engine/src/flutter/impeller/entity/content_renderer.h +++ b/engine/src/flutter/impeller/entity/content_context.h @@ -33,7 +33,7 @@ using SolidStrokePipeline = // to redirect writing to the stencil instead of color attachments. using ClipPipeline = PipelineT; -class ContentRenderer { +class ContentContext { public: struct Options { SampleCount sample_count = SampleCount::kCount1; @@ -51,9 +51,9 @@ class ContentRenderer { }; }; - ContentRenderer(std::shared_ptr context); + ContentContext(std::shared_ptr context); - ~ContentRenderer(); + ~ContentContext(); bool IsValid() const; @@ -128,7 +128,7 @@ class ContentRenderer { bool is_valid_ = false; - FML_DISALLOW_COPY_AND_ASSIGN(ContentRenderer); + FML_DISALLOW_COPY_AND_ASSIGN(ContentContext); }; } // namespace impeller diff --git a/engine/src/flutter/impeller/entity/contents.cc b/engine/src/flutter/impeller/entity/contents.cc index 71ae6c2b66e..91130debc04 100644 --- a/engine/src/flutter/impeller/entity/contents.cc +++ b/engine/src/flutter/impeller/entity/contents.cc @@ -7,7 +7,7 @@ #include #include "flutter/fml/logging.h" -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" #include "impeller/entity/entity.h" #include "impeller/geometry/path_builder.h" #include "impeller/geometry/vector.h" @@ -19,8 +19,8 @@ namespace impeller { -static ContentRenderer::Options OptionsFromPass(const RenderPass& pass) { - ContentRenderer::Options opts; +static ContentContext::Options OptionsFromPass(const RenderPass& pass) { + ContentContext::Options opts; opts.sample_count = pass.GetRenderTarget().GetSampleCount(); return opts; } @@ -60,7 +60,7 @@ const std::vector& LinearGradientContents::GetColors() const { return colors_; } -bool LinearGradientContents::Render(const ContentRenderer& renderer, +bool LinearGradientContents::Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const { using VS = GradientFillPipeline::VertexShader; @@ -137,7 +137,7 @@ static VertexBuffer CreateSolidFillVertices(const Path& path, return vtx_builder.CreateVertexBuffer(buffer); } -bool SolidColorContents::Render(const ContentRenderer& renderer, +bool SolidColorContents::Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const { if (color_.IsTransparent()) { @@ -194,7 +194,7 @@ void TextureContents::SetOpacity(Scalar opacity) { opacity_ = opacity; } -bool TextureContents::Render(const ContentRenderer& renderer, +bool TextureContents::Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const { if (texture_ == nullptr) { @@ -328,7 +328,7 @@ static VertexBuffer CreateSolidStrokeVertices(const Path& path, return vtx_builder.CreateVertexBuffer(buffer); } -bool SolidStrokeContents::Render(const ContentRenderer& renderer, +bool SolidStrokeContents::Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const { if (color_.IsTransparent() || stroke_size_ <= 0.0) { @@ -377,7 +377,7 @@ ClipContents::ClipContents() = default; ClipContents::~ClipContents() = default; -bool ClipContents::Render(const ContentRenderer& renderer, +bool ClipContents::Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const { using VS = ClipPipeline::VertexShader; diff --git a/engine/src/flutter/impeller/entity/contents.h b/engine/src/flutter/impeller/entity/contents.h index ffda5f7d432..126dd2bf671 100644 --- a/engine/src/flutter/impeller/entity/contents.h +++ b/engine/src/flutter/impeller/entity/contents.h @@ -15,7 +15,7 @@ namespace impeller { -class ContentRenderer; +class ContentContext; class Entity; class Surface; class RenderPass; @@ -26,7 +26,7 @@ class Contents { virtual ~Contents(); - virtual bool Render(const ContentRenderer& renderer, + virtual bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const = 0; @@ -41,7 +41,7 @@ class LinearGradientContents final : public Contents { ~LinearGradientContents() override; // |Contents| - bool Render(const ContentRenderer& renderer, + bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const override; @@ -72,7 +72,7 @@ class SolidColorContents final : public Contents { const Color& GetColor() const; // |Contents| - bool Render(const ContentRenderer& renderer, + bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const override; @@ -99,7 +99,7 @@ class TextureContents final : public Contents { const IRect& GetSourceRect() const; // |Contents| - bool Render(const ContentRenderer& renderer, + bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const override; @@ -126,7 +126,7 @@ class SolidStrokeContents final : public Contents { Scalar GetStrokeSize() const; // |Contents| - bool Render(const ContentRenderer& renderer, + bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const override; @@ -144,7 +144,7 @@ class ClipContents final : public Contents { ~ClipContents(); // |Contents| - bool Render(const ContentRenderer& renderer, + bool Render(const ContentContext& renderer, const Entity& entity, RenderPass& pass) const override; diff --git a/engine/src/flutter/impeller/entity/entity.cc b/engine/src/flutter/impeller/entity/entity.cc index 150b30fcf60..701702b6690 100644 --- a/engine/src/flutter/impeller/entity/entity.cc +++ b/engine/src/flutter/impeller/entity/entity.cc @@ -4,7 +4,7 @@ #include "impeller/entity/entity.h" -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" #include "impeller/renderer/render_pass.h" namespace impeller { @@ -65,7 +65,7 @@ void Entity::IncrementStencilDepth(uint32_t increment) { stencil_depth_ += increment; } -bool Entity::Render(ContentRenderer& renderer, RenderPass& parent_pass) const { +bool Entity::Render(ContentContext& renderer, RenderPass& parent_pass) const { if (!contents_) { return true; } diff --git a/engine/src/flutter/impeller/entity/entity.h b/engine/src/flutter/impeller/entity/entity.h index 8e78391b38e..13cc918ace9 100644 --- a/engine/src/flutter/impeller/entity/entity.h +++ b/engine/src/flutter/impeller/entity/entity.h @@ -46,7 +46,7 @@ class Entity { uint32_t GetStencilDepth() const; - bool Render(ContentRenderer& renderer, RenderPass& parent_pass) const; + bool Render(ContentContext& renderer, RenderPass& parent_pass) const; private: Matrix transformation_; diff --git a/engine/src/flutter/impeller/entity/entity_pass.cc b/engine/src/flutter/impeller/entity/entity_pass.cc index e0a7d1f4133..eec7f0cbfd4 100644 --- a/engine/src/flutter/impeller/entity/entity_pass.cc +++ b/engine/src/flutter/impeller/entity/entity_pass.cc @@ -4,7 +4,7 @@ #include "impeller/entity/entity_pass.h" -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" #include "impeller/geometry/path_builder.h" #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/render_pass.h" @@ -97,7 +97,7 @@ EntityPass* EntityPass::AddSubpass(std::unique_ptr pass) { return subpasses_.emplace_back(std::move(pass)).get(); } -bool EntityPass::Render(ContentRenderer& renderer, +bool EntityPass::Render(ContentContext& renderer, RenderPass& parent_pass) const { for (const auto& entity : entities_) { if (!entity.Render(renderer, parent_pass)) { diff --git a/engine/src/flutter/impeller/entity/entity_pass.h b/engine/src/flutter/impeller/entity/entity_pass.h index 2a9648fe7dd..1e179915cf3 100644 --- a/engine/src/flutter/impeller/entity/entity_pass.h +++ b/engine/src/flutter/impeller/entity/entity_pass.h @@ -16,7 +16,7 @@ namespace impeller { -class ContentRenderer; +class ContentContext; class EntityPass { public: @@ -45,7 +45,7 @@ class EntityPass { EntityPass* GetSuperpass() const; - bool Render(ContentRenderer& renderer, RenderPass& parent_pass) const; + bool Render(ContentContext& renderer, RenderPass& parent_pass) const; void IterateAllEntities(std::function iterator); diff --git a/engine/src/flutter/impeller/entity/entity_playground.cc b/engine/src/flutter/impeller/entity/entity_playground.cc index 140a0d93d14..69e93b74751 100644 --- a/engine/src/flutter/impeller/entity/entity_playground.cc +++ b/engine/src/flutter/impeller/entity/entity_playground.cc @@ -4,7 +4,7 @@ #include "impeller/entity/entity_playground.h" -#include "impeller/entity/content_renderer.h" +#include "impeller/entity/content_context.h" namespace impeller { @@ -13,12 +13,12 @@ EntityPlayground::EntityPlayground() = default; EntityPlayground::~EntityPlayground() = default; bool EntityPlayground::OpenPlaygroundHere(Entity entity) { - ContentRenderer renderer(GetContext()); - if (!renderer.IsValid()) { + ContentContext context_context(GetContext()); + if (!context_context.IsValid()) { return false; } Renderer::RenderCallback callback = [&](RenderPass& pass) -> bool { - return entity.Render(renderer, pass); + return entity.Render(context_context, pass); }; return Playground::OpenPlaygroundHere(callback); } diff --git a/engine/src/flutter/impeller/renderer/backend/metal/context_mtl.h b/engine/src/flutter/impeller/renderer/backend/metal/context_mtl.h index 4572128c8be..74884899dcf 100644 --- a/engine/src/flutter/impeller/renderer/backend/metal/context_mtl.h +++ b/engine/src/flutter/impeller/renderer/backend/metal/context_mtl.h @@ -7,6 +7,7 @@ #include #include +#include #include "flutter/fml/macros.h" #include "impeller/renderer/backend/metal/allocator_mtl.h" diff --git a/engine/src/flutter/impeller/renderer/renderer.cc b/engine/src/flutter/impeller/renderer/renderer.cc index 25ec21a9221..c00a0ad408b 100644 --- a/engine/src/flutter/impeller/renderer/renderer.cc +++ b/engine/src/flutter/impeller/renderer/renderer.cc @@ -4,6 +4,8 @@ #include "impeller/renderer/renderer.h" +#include + #include "flutter/fml/logging.h" #include "impeller/base/validation.h" #include "impeller/renderer/command_buffer.h" @@ -11,11 +13,10 @@ namespace impeller { -constexpr size_t kMaxFramesInFlight = 3u; - -Renderer::Renderer(std::shared_ptr context) - : frames_in_flight_sema_( - std::make_shared(kMaxFramesInFlight)), +Renderer::Renderer(std::shared_ptr context, + size_t max_frames_in_flight) + : frames_in_flight_sema_(std::make_shared( + std::max(1u, max_frames_in_flight))), context_(std::move(context)) { if (!context_->IsValid()) { return; diff --git a/engine/src/flutter/impeller/renderer/renderer.h b/engine/src/flutter/impeller/renderer/renderer.h index 74e2d8c5222..98f7621c294 100644 --- a/engine/src/flutter/impeller/renderer/renderer.h +++ b/engine/src/flutter/impeller/renderer/renderer.h @@ -10,7 +10,7 @@ #include #include "flutter/fml/macros.h" -#include "fml/synchronization/semaphore.h" +#include "flutter/fml/synchronization/semaphore.h" #include "impeller/geometry/size.h" #include "impeller/renderer/context.h" @@ -21,9 +21,12 @@ class RenderPass; class Renderer { public: + static constexpr size_t kDefaultMaxFramesInFlight = 3u; + using RenderCallback = std::function; - Renderer(std::shared_ptr context); + Renderer(std::shared_ptr context, + size_t max_frames_in_flight = kDefaultMaxFramesInFlight); ~Renderer();