13 UIView* overlay_view_wrapper,
14 std::unique_ptr<IOSSurface> ios_surface,
15 std::unique_ptr<Surface> surface)
16 : overlay_view(overlay_view),
17 overlay_view_wrapper(overlay_view_wrapper),
18 ios_surface(
std::move(ios_surface)),
25 auto screenScale = [UIScreen mainScreen].scale;
29 CGRectMake(rect.
GetX() / screenScale, rect.
GetY() / screenScale,
33 [NSString stringWithFormat:
@"platform_view[%lld].overlay[%lld]",
view_id, overlay_id];
40 [NSString stringWithFormat:
@"platform_view[%lld].overlay_view[%lld]",
view_id, overlay_id];
47 std::shared_ptr<OverlayLayer> result;
48 if (available_layer_index_ < layers_.size()) {
49 result = layers_[available_layer_index_];
50 available_layer_index_++;
57 MTLPixelFormat pixel_format) {
58 FML_DCHECK([[NSThread currentThread] isMainThread]);
59 std::shared_ptr<OverlayLayer> layer;
61 UIView* overlay_view_wrapper;
63 CGFloat screenScale = [UIScreen mainScreen].scale;
65 pixelFormat:pixel_format];
67 pixelFormat:pixel_format];
69 CALayer* ca_layer = overlay_view.layer;
71 std::unique_ptr<Surface>
surface = ios_surface->CreateGPUSurface();
73 layer = std::make_shared<OverlayLayer>(overlay_view, overlay_view_wrapper, std::move(ios_surface),
90 layer->overlay_view_wrapper.clipsToBounds = YES;
91 [layer->overlay_view_wrapper addSubview:layer->overlay_view];
93 layers_.push_back(layer);
97 available_layer_index_ = 0;
101 std::vector<std::shared_ptr<OverlayLayer>> results;
102 for (
size_t i = available_layer_index_;
i < layers_.size();
i++) {
103 results.push_back(layers_[
i]);
109 static constexpr size_t kLeakLayerCount = 1;
110 size_t erase_offset = std::max(available_layer_index_, kLeakLayerCount);
111 if (erase_offset < layers_.size()) {
112 layers_.erase(layers_.begin() + erase_offset, layers_.end());
118 return layers_.size();
static std::unique_ptr< IOSSurface > Create(std::shared_ptr< IOSContext > context, CALayer *layer)
void RecycleLayers()
Marks the layers in the pool as available for reuse.
std::vector< std::shared_ptr< OverlayLayer > > RemoveUnusedLayers()
Removes unused layers from the pool. Returns the unused layers.
size_t size() const
The count of layers currently in the pool.
std::shared_ptr< OverlayLayer > GetNextLayer()
Gets a layer from the pool if available.
void CreateLayer(const std::shared_ptr< IOSContext > &ios_context, MTLPixelFormat pixel_format)
Create a new overlay layer.
G_BEGIN_DECLS FlutterViewId view_id
#define FML_DCHECK(condition)
UIView * overlay_view_wrapper
OverlayLayer(int id, std::unique_ptr< AndroidSurface > android_surface, std::unique_ptr< Surface > surface)
void UpdateViewState(UIView *flutter_view, DlRect rect, int64_t view_id, int64_t overlay_id)
constexpr Type GetY() const
Returns the Y coordinate of the upper left corner, equivalent to |GetOrigin().y|.
constexpr Type GetHeight() const
Returns the height of the rectangle, equivalent to |GetSize().height|.
constexpr Type GetX() const
Returns the X coordinate of the upper left corner, equivalent to |GetOrigin().x|.
constexpr Type GetWidth() const
Returns the width of the rectangle, equivalent to |GetSize().width|.