Flutter Engine
 
Loading...
Searching...
No Matches
external_view_embedder_wrapper.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7#include <utility>
8
13
14namespace flutter {
15
17 bool meets_hcpp_criteria,
18 const AndroidContext& android_context,
19 std::shared_ptr<PlatformViewAndroidJNI> jni_facade,
20 std::shared_ptr<AndroidSurfaceFactory> surface_factory,
21 const TaskRunners& task_runners)
23 meets_hcpp_criteria_(meets_hcpp_criteria),
24 android_context_(android_context),
25 task_runners_(task_runners),
26 jni_facade_(std::move(jni_facade)),
27 surface_factory_(std::move(surface_factory)) {}
28
29void AndroidExternalViewEmbedderWrapper::EnsureInitialized() {
30 if (non_hcpp_view_embedder_ || hcpp_view_embedder_) {
31 return;
32 }
33 if (meets_hcpp_criteria_ &&
37 hcpp_view_embedder_ = std::make_unique<AndroidExternalViewEmbedder2>(
38 android_context_, jni_facade_, surface_factory_, task_runners_);
39 } else {
40 non_hcpp_view_embedder_ = std::make_unique<AndroidExternalViewEmbedder>(
41 android_context_, jni_facade_, surface_factory_, task_runners_);
42 }
43}
44
45// |ExternalViewEmbedder|
47 int64_t view_id,
48 std::unique_ptr<EmbeddedViewParams> params) {
49 EnsureInitialized();
50 if (hcpp_view_embedder_) {
51 hcpp_view_embedder_->PrerollCompositeEmbeddedView(view_id,
52 std::move(params));
53 } else {
54 non_hcpp_view_embedder_->PrerollCompositeEmbeddedView(view_id,
55 std::move(params));
56 }
57}
58
59// |ExternalViewEmbedder|
61 int64_t view_id) {
62 EnsureInitialized();
63 if (hcpp_view_embedder_) {
64 return hcpp_view_embedder_->CompositeEmbeddedView(view_id);
65 } else {
66 return non_hcpp_view_embedder_->CompositeEmbeddedView(view_id);
67 }
68}
69
70// |ExternalViewEmbedder|
72 int64_t flutter_view_id,
73 GrDirectContext* context,
74 const std::shared_ptr<impeller::AiksContext>& aiks_context,
75 std::unique_ptr<SurfaceFrame> frame) {
76 EnsureInitialized();
77 if (hcpp_view_embedder_) {
78 hcpp_view_embedder_->SubmitFlutterView(flutter_view_id, context,
79 aiks_context, std::move(frame));
80 } else {
81 non_hcpp_view_embedder_->SubmitFlutterView(flutter_view_id, context,
82 aiks_context, std::move(frame));
83 }
84}
85
86// |ExternalViewEmbedder|
88 const fml::RefPtr<fml::RasterThreadMerger>& raster_thread_merger) {
89 EnsureInitialized();
90 if (hcpp_view_embedder_) {
91 return hcpp_view_embedder_->PostPrerollAction(raster_thread_merger);
92 } else {
93 return non_hcpp_view_embedder_->PostPrerollAction(raster_thread_merger);
94 }
95}
96
98 // On Android, the root surface is created from the on-screen render target.
99 return nullptr;
100}
101
102// |ExternalViewEmbedder|
104 GrDirectContext* context,
105 const fml::RefPtr<fml::RasterThreadMerger>& raster_thread_merger) {
106 EnsureInitialized();
107 if (hcpp_view_embedder_) {
108 hcpp_view_embedder_->BeginFrame(context, raster_thread_merger);
109 } else {
110 non_hcpp_view_embedder_->BeginFrame(context, raster_thread_merger);
111 }
112}
113
114// |ExternalViewEmbedder|
116 DlISize frame_size,
117 double device_pixel_ratio) {
118 EnsureInitialized();
119 if (hcpp_view_embedder_) {
120 hcpp_view_embedder_->PrepareFlutterView(frame_size, device_pixel_ratio);
121 } else {
122 non_hcpp_view_embedder_->PrepareFlutterView(frame_size, device_pixel_ratio);
123 }
124}
125
126// |ExternalViewEmbedder|
128 EnsureInitialized();
129 if (hcpp_view_embedder_) {
130 hcpp_view_embedder_->CancelFrame();
131 } else {
132 non_hcpp_view_embedder_->CancelFrame();
133 }
134}
135
136// |ExternalViewEmbedder|
138 bool should_resubmit_frame,
139 const fml::RefPtr<fml::RasterThreadMerger>& raster_thread_merger) {
140 EnsureInitialized();
141 if (hcpp_view_embedder_) {
142 hcpp_view_embedder_->EndFrame(should_resubmit_frame, raster_thread_merger);
143 } else {
144 non_hcpp_view_embedder_->EndFrame(should_resubmit_frame,
145 raster_thread_merger);
146 }
147}
148
149// |ExternalViewEmbedder|
151 EnsureInitialized();
152 if (hcpp_view_embedder_) {
153 return hcpp_view_embedder_->SupportsDynamicThreadMerging();
154 } else {
155 return non_hcpp_view_embedder_->SupportsDynamicThreadMerging();
156 }
157}
158
159// |ExternalViewEmbedder|
161 EnsureInitialized();
162 if (hcpp_view_embedder_) {
163 hcpp_view_embedder_->Teardown();
164 } else {
165 non_hcpp_view_embedder_->Teardown();
166 }
167}
168
169} // namespace flutter
Holds state that is shared across Android surfaces.
virtual AndroidRenderingAPI RenderingApi() const
virtual std::shared_ptr< impeller::Context > GetImpellerContext() const
Accessor for the Impeller context associated with AndroidSurfaces and the raster thread.
void PrepareFlutterView(DlISize frame_size, double device_pixel_ratio) override
DlCanvas * CompositeEmbeddedView(int64_t view_id) override
void PrerollCompositeEmbeddedView(int64_t view_id, std::unique_ptr< flutter::EmbeddedViewParams > params) override
void EndFrame(bool should_resubmit_frame, const fml::RefPtr< fml::RasterThreadMerger > &raster_thread_merger) override
PostPrerollResult PostPrerollAction(const fml::RefPtr< fml::RasterThreadMerger > &raster_thread_merger) override
AndroidExternalViewEmbedderWrapper(bool meets_hcpp_criteria, const AndroidContext &android_context, std::shared_ptr< PlatformViewAndroidJNI > jni_facade, std::shared_ptr< AndroidSurfaceFactory > surface_factory, const TaskRunners &task_runners)
void BeginFrame(GrDirectContext *context, const fml::RefPtr< fml::RasterThreadMerger > &raster_thread_merger) override
void SubmitFlutterView(int64_t flutter_view_id, GrDirectContext *context, const std::shared_ptr< impeller::AiksContext > &aiks_context, std::unique_ptr< SurfaceFrame > frame) override
Developer-facing API for rendering anything within the engine.
Definition dl_canvas.h:32
static ContextVK & Cast(Context &base)
bool GetShouldEnableSurfaceControlSwapchain() const
Whether the Android Surface control based swapchain should be enabled.
const EmbeddedViewParams * params
TaskRunners task_runners_
G_BEGIN_DECLS FlutterViewId view_id
Definition ref_ptr.h:261