From da84d59f64b104bb5b7086231ffdf8f3ea79072f Mon Sep 17 00:00:00 2001 From: Jim Graham <50503328+flar@users.noreply.github.com> Date: Wed, 11 Sep 2019 17:56:24 -0700 Subject: [PATCH] Revert "Manage iOS contexts separately (#12078)" (#12233) This reverts commit 4ac0663db7addd6c27904131d8260df66fa8c722. --- .../ios/framework/Source/FlutterOverlayView.h | 5 ++- .../framework/Source/FlutterOverlayView.mm | 8 ++--- .../framework/Source/FlutterPlatformViews.mm | 15 +++------ .../Source/FlutterPlatformViews_Internal.h | 7 ++-- .../darwin/ios/framework/Source/FlutterView.h | 4 +-- .../ios/framework/Source/FlutterView.mm | 23 ++++--------- shell/platform/darwin/ios/ios_gl_context.h | 14 ++++---- shell/platform/darwin/ios/ios_gl_context.mm | 33 +++++++++---------- .../darwin/ios/ios_gl_render_target.h | 9 +++-- .../darwin/ios/ios_gl_render_target.mm | 25 +++++++------- shell/platform/darwin/ios/ios_surface_gl.h | 12 ++----- shell/platform/darwin/ios/ios_surface_gl.mm | 27 +++++---------- .../darwin/ios/ios_surface_software.mm | 3 +- shell/platform/darwin/ios/platform_view_ios.h | 4 +-- .../platform/darwin/ios/platform_view_ios.mm | 14 +++----- 15 files changed, 78 insertions(+), 125 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h b/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h index 903b9c02c..fac783f87 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h @@ -24,9 +24,8 @@ - (instancetype)init NS_DESIGNATED_INITIALIZER; - (instancetype)initWithContentsScale:(CGFloat)contentsScale; -- (std::unique_ptr) - createSurfaceWithOnscreenGLContext:(fml::WeakPtr)onscreenGLContext - resourceGLContext:(fml::WeakPtr)resourceGLContext; +- (std::unique_ptr)createSurface: + (std::shared_ptr)gl_context; @end diff --git a/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm b/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm index 9cdf862c8..414029023 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm @@ -78,17 +78,15 @@ #endif // TARGET_IPHONE_SIMULATOR } -- (std::unique_ptr) - createSurfaceWithOnscreenGLContext:(fml::WeakPtr)onscreenGLContext - resourceGLContext:(fml::WeakPtr)resourceGLContext { +- (std::unique_ptr)createSurface: + (std::shared_ptr)gl_context { if ([self.layer isKindOfClass:[CAEAGLLayer class]]) { fml::scoped_nsobject eagl_layer( reinterpret_cast([self.layer retain])); if (@available(iOS 9.0, *)) { eagl_layer.get().presentsWithTransaction = YES; } - return std::make_unique(std::move(eagl_layer), onscreenGLContext, - resourceGLContext); + return std::make_unique(std::move(eagl_layer), gl_context); #if FLUTTER_SHELL_ENABLE_METAL } else if ([self.layer isKindOfClass:[CAMetalLayer class]]) { fml::scoped_nsobject metalLayer( diff --git a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm index 7cc3c44c0..00a7c9ecd 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm @@ -362,13 +362,12 @@ void FlutterPlatformViewsController::Reset() { } bool FlutterPlatformViewsController::SubmitFrame(GrContext* gr_context, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context) { + std::shared_ptr gl_context) { DisposeViews(); bool did_submit = true; for (int64_t view_id : composition_order_) { - EnsureOverlayInitialized(view_id, onscreen_gl_context, resource_gl_context, gr_context); + EnsureOverlayInitialized(view_id, std::move(gl_context), gr_context); auto frame = overlays_[view_id]->surface->AcquireFrame(frame_size_); SkCanvas* canvas = frame->SkiaCanvas(); canvas->drawPicture(picture_recorders_[view_id]->finishRecordingAsPicture()); @@ -452,8 +451,7 @@ void FlutterPlatformViewsController::DisposeViews() { void FlutterPlatformViewsController::EnsureOverlayInitialized( int64_t overlay_id, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context, + std::shared_ptr gl_context, GrContext* gr_context) { FML_DCHECK(flutter_view_); @@ -469,9 +467,7 @@ void FlutterPlatformViewsController::EnsureOverlayInitialized( overlay_view.get().frame = flutter_view_.get().bounds; overlay_view.get().autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - std::unique_ptr ios_surface = [overlay_view.get() - createSurfaceWithOnscreenGLContext:fml::WeakPtr() - resourceGLContext:fml::WeakPtr()]; + std::unique_ptr ios_surface = [overlay_view.get() createSurface:nil]; std::unique_ptr surface = ios_surface->CreateGPUSurface(); overlays_[overlay_id] = std::make_unique( std::move(overlay_view), std::move(ios_surface), std::move(surface)); @@ -496,8 +492,7 @@ void FlutterPlatformViewsController::EnsureOverlayInitialized( overlay_view.get().autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); std::unique_ptr ios_surface = - [overlay_view.get() createSurfaceWithOnscreenGLContext:std::move(onscreen_gl_context) - resourceGLContext:std::move(resource_gl_context)]; + [overlay_view.get() createSurface:std::move(gl_context)]; std::unique_ptr surface = ios_surface->CreateGPUSurface(gr_context); overlays_[overlay_id] = std::make_unique( std::move(overlay_view), std::move(ios_surface), std::move(surface)); diff --git a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h index 181723fd8..f9f0eefec 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h @@ -100,9 +100,7 @@ class FlutterPlatformViewsController { // Discards all platform views instances and auxiliary resources. void Reset(); - bool SubmitFrame(GrContext* gr_context, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context); + bool SubmitFrame(GrContext* gr_context, std::shared_ptr gl_context); void OnMethodCall(FlutterMethodCall* call, FlutterResult& result); @@ -164,8 +162,7 @@ class FlutterPlatformViewsController { // Dispose the views in `views_to_dispose_`. void DisposeViews(); void EnsureOverlayInitialized(int64_t overlay_id, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context, + std::shared_ptr gl_context, GrContext* gr_context); // This will return true after pre-roll if any of the embedded views diff --git a/shell/platform/darwin/ios/framework/Source/FlutterView.h b/shell/platform/darwin/ios/framework/Source/FlutterView.h index ad75d817f..0da2d5b0b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterView.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterView.h @@ -33,8 +33,8 @@ - (instancetype)initWithDelegate:(id)delegate opaque:(BOOL)opaque NS_DESIGNATED_INITIALIZER; -- (std::unique_ptr)createSurfaceWithResourceGLContext: - (fml::WeakPtr)resourceGLContext; +- (std::unique_ptr)createSurface: + (std::shared_ptr)context; @end diff --git a/shell/platform/darwin/ios/framework/Source/FlutterView.mm b/shell/platform/darwin/ios/framework/Source/FlutterView.mm index 8891648da..4e4acdfc0 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterView.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterView.mm @@ -13,7 +13,6 @@ #include "flutter/shell/common/platform_view.h" #include "flutter/shell/common/rasterizer.h" #include "flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController_Internal.h" -#include "flutter/shell/platform/darwin/ios/ios_gl_context.h" #include "flutter/shell/platform/darwin/ios/ios_surface_gl.h" #include "flutter/shell/platform/darwin/ios/ios_surface_software.h" #include "third_party/skia/include/utils/mac/SkCGUtils.h" @@ -22,10 +21,9 @@ #include "flutter/shell/platform/darwin/ios/ios_surface_metal.h" #endif // FLUTTER_SHELL_ENABLE_METAL -@implementation FlutterView { - id _delegate; - std::unique_ptr _onscreenGLContext; -} +@implementation FlutterView + +id _delegate; - (instancetype)init { @throw([NSException exceptionWithName:@"FlutterView must initWithDelegate" @@ -95,14 +93,8 @@ #endif // TARGET_IPHONE_SIMULATOR } -- (std::unique_ptr)createSurfaceWithResourceGLContext: - (fml::WeakPtr)resourceGLContext { -#if !TARGET_IPHONE_SIMULATOR - if (!_onscreenGLContext) { - _onscreenGLContext = resourceGLContext->MakeSharedContext(); - } -#endif // !TARGET_IPHONE_SIMULATOR - +- (std::unique_ptr)createSurface: + (std::shared_ptr)context { if ([self.layer isKindOfClass:[CAEAGLLayer class]]) { fml::scoped_nsobject eagl_layer( reinterpret_cast([self.layer retain])); @@ -113,9 +105,8 @@ eagl_layer.get().presentsWithTransaction = YES; } } - return std::make_unique( - _onscreenGLContext->GetWeakPtr(), std::move(resourceGLContext), std::move(eagl_layer), - [_delegate platformViewsController]); + return std::make_unique(context, std::move(eagl_layer), + [_delegate platformViewsController]); #if FLUTTER_SHELL_ENABLE_METAL } else if ([self.layer isKindOfClass:[CAMetalLayer class]]) { fml::scoped_nsobject metalLayer( diff --git a/shell/platform/darwin/ios/ios_gl_context.h b/shell/platform/darwin/ios/ios_gl_context.h index 1f1bebcfb..232645d9c 100644 --- a/shell/platform/darwin/ios/ios_gl_context.h +++ b/shell/platform/darwin/ios/ios_gl_context.h @@ -13,32 +13,30 @@ #include "flutter/fml/macros.h" #include "flutter/fml/platform/darwin/scoped_nsobject.h" #include "flutter/shell/common/platform_view.h" +#include "ios_gl_render_target.h" namespace flutter { class IOSGLContext { public: IOSGLContext(); - IOSGLContext(EAGLSharegroup* sharegroup); ~IOSGLContext(); + std::unique_ptr CreateRenderTarget( + fml::scoped_nsobject layer); + bool MakeCurrent(); - bool BindRenderbufferStorage(fml::scoped_nsobject layer); + bool ResourceMakeCurrent(); sk_sp ColorSpace() const { return color_space_; } - std::unique_ptr MakeSharedContext(); - - fml::WeakPtr GetWeakPtr(); - private: fml::scoped_nsobject context_; + fml::scoped_nsobject resource_context_; sk_sp color_space_; - std::unique_ptr> weak_factory_; - FML_DISALLOW_COPY_AND_ASSIGN(IOSGLContext); }; diff --git a/shell/platform/darwin/ios/ios_gl_context.mm b/shell/platform/darwin/ios/ios_gl_context.mm index 8398ce0a5..52fb85f8f 100644 --- a/shell/platform/darwin/ios/ios_gl_context.mm +++ b/shell/platform/darwin/ios/ios_gl_context.mm @@ -12,16 +12,15 @@ namespace flutter { -IOSGLContext::IOSGLContext() : IOSGLContext(nullptr) {} - -IOSGLContext::IOSGLContext(EAGLSharegroup* sharegroup) - : weak_factory_(std::make_unique>(this)) { - context_.reset([[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3 - sharegroup:sharegroup]); - - if (!context_) { +IOSGLContext::IOSGLContext() { + resource_context_.reset([[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]); + if (resource_context_ != nullptr) { + context_.reset([[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3 + sharegroup:resource_context_.get().sharegroup]); + } else { + resource_context_.reset([[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]); context_.reset([[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 - sharegroup:sharegroup]); + sharegroup:resource_context_.get().sharegroup]); } // TODO: @@ -45,22 +44,20 @@ IOSGLContext::IOSGLContext(EAGLSharegroup* sharegroup) } } -fml::WeakPtr IOSGLContext::GetWeakPtr() { - return weak_factory_->GetWeakPtr(); -} +IOSGLContext::~IOSGLContext() = default; -bool IOSGLContext::BindRenderbufferStorage(fml::scoped_nsobject layer) { - return [context_.get() renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer.get()]; +std::unique_ptr IOSGLContext::CreateRenderTarget( + fml::scoped_nsobject layer) { + return std::make_unique(std::move(layer), context_.get(), + resource_context_.get()); } -IOSGLContext::~IOSGLContext() = default; - bool IOSGLContext::MakeCurrent() { return [EAGLContext setCurrentContext:context_.get()]; } -std::unique_ptr IOSGLContext::MakeSharedContext() { - return std::make_unique(context_.get().sharegroup); +bool IOSGLContext::ResourceMakeCurrent() { + return [EAGLContext setCurrentContext:resource_context_.get()]; } } // namespace flutter diff --git a/shell/platform/darwin/ios/ios_gl_render_target.h b/shell/platform/darwin/ios/ios_gl_render_target.h index b26713e8e..b2eafe16e 100644 --- a/shell/platform/darwin/ios/ios_gl_render_target.h +++ b/shell/platform/darwin/ios/ios_gl_render_target.h @@ -13,15 +13,14 @@ #include "flutter/fml/macros.h" #include "flutter/fml/platform/darwin/scoped_nsobject.h" #include "flutter/shell/common/platform_view.h" -#include "flutter/shell/platform/darwin/ios/ios_gl_context.h" namespace flutter { class IOSGLRenderTarget { public: IOSGLRenderTarget(fml::scoped_nsobject layer, - fml::WeakPtr onscreen_context, - fml::WeakPtr resource_context); + EAGLContext* context, + EAGLContext* resource_context); ~IOSGLRenderTarget(); @@ -41,8 +40,8 @@ class IOSGLRenderTarget { private: fml::scoped_nsobject layer_; - fml::WeakPtr onscreen_gl_context_; - fml::WeakPtr resource_gl_context_; + fml::scoped_nsobject context_; + fml::scoped_nsobject resource_context_; GLuint framebuffer_; GLuint colorbuffer_; GLint storage_size_width_; diff --git a/shell/platform/darwin/ios/ios_gl_render_target.mm b/shell/platform/darwin/ios/ios_gl_render_target.mm index e0ce5e7bf..a57ba9c46 100644 --- a/shell/platform/darwin/ios/ios_gl_render_target.mm +++ b/shell/platform/darwin/ios/ios_gl_render_target.mm @@ -11,22 +11,23 @@ #include "third_party/skia/include/gpu/gl/GrGLInterface.h" namespace flutter { + IOSGLRenderTarget::IOSGLRenderTarget(fml::scoped_nsobject layer, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context) + EAGLContext* context, + EAGLContext* resource_context) : layer_(std::move(layer)), - onscreen_gl_context_(std::move(onscreen_gl_context)), - resource_gl_context_(std::move(resource_gl_context)), + context_([context retain]), + resource_context_([resource_context retain]), framebuffer_(GL_NONE), colorbuffer_(GL_NONE), storage_size_width_(0), storage_size_height_(0), valid_(false) { FML_DCHECK(layer_ != nullptr); - FML_DCHECK(onscreen_gl_context_); - FML_DCHECK(resource_gl_context_); + FML_DCHECK(context_ != nullptr); + FML_DCHECK(resource_context_ != nullptr); - bool context_current = onscreen_gl_context_->MakeCurrent(); + bool context_current = [EAGLContext setCurrentContext:context_]; FML_DCHECK(context_current); FML_DCHECK(glGetError() == GL_NO_ERROR); @@ -62,7 +63,7 @@ IOSGLRenderTarget::IOSGLRenderTarget(fml::scoped_nsobject layer, IOSGLRenderTarget::~IOSGLRenderTarget() { EAGLContext* context = EAGLContext.currentContext; - onscreen_gl_context_->MakeCurrent(); + [EAGLContext setCurrentContext:context_]; FML_DCHECK(glGetError() == GL_NO_ERROR); // Deletes on GL_NONEs are ignored @@ -104,7 +105,7 @@ bool IOSGLRenderTarget::UpdateStorageSizeIfNecessary() { FML_DCHECK(glGetError() == GL_NO_ERROR); - if (!onscreen_gl_context_->MakeCurrent()) { + if (![EAGLContext setCurrentContext:context_]) { return false; } @@ -115,7 +116,7 @@ bool IOSGLRenderTarget::UpdateStorageSizeIfNecessary() { glBindRenderbuffer(GL_RENDERBUFFER, colorbuffer_); FML_DCHECK(glGetError() == GL_NO_ERROR); - if (!onscreen_gl_context_->BindRenderbufferStorage(layer_)) { + if (![context_.get() renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer_.get()]) { return false; } @@ -132,11 +133,11 @@ bool IOSGLRenderTarget::UpdateStorageSizeIfNecessary() { } bool IOSGLRenderTarget::MakeCurrent() { - return UpdateStorageSizeIfNecessary() && onscreen_gl_context_->MakeCurrent(); + return UpdateStorageSizeIfNecessary() && [EAGLContext setCurrentContext:context_.get()]; } bool IOSGLRenderTarget::ResourceMakeCurrent() { - return resource_gl_context_->MakeCurrent(); + return [EAGLContext setCurrentContext:resource_context_.get()]; } } // namespace flutter diff --git a/shell/platform/darwin/ios/ios_surface_gl.h b/shell/platform/darwin/ios/ios_surface_gl.h index 7dc815dbb..964cc7adb 100644 --- a/shell/platform/darwin/ios/ios_surface_gl.h +++ b/shell/platform/darwin/ios/ios_surface_gl.h @@ -20,14 +20,11 @@ class IOSSurfaceGL final : public IOSSurface, public GPUSurfaceGLDelegate, public ExternalViewEmbedder { public: - IOSSurfaceGL(fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context, + IOSSurfaceGL(std::shared_ptr context, fml::scoped_nsobject layer, FlutterPlatformViewsController* platform_views_controller); - IOSSurfaceGL(fml::scoped_nsobject layer, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context); + IOSSurfaceGL(fml::scoped_nsobject layer, std::shared_ptr context); ~IOSSurfaceGL() override; @@ -82,10 +79,7 @@ class IOSSurfaceGL final : public IOSSurface, bool SubmitFrame(GrContext* context) override; private: - fml::WeakPtr onscreen_gl_context_; - - fml::WeakPtr resource_gl_context_; - + std::shared_ptr context_; std::unique_ptr render_target_; FML_DISALLOW_COPY_AND_ASSIGN(IOSSurfaceGL); diff --git a/shell/platform/darwin/ios/ios_surface_gl.mm b/shell/platform/darwin/ios/ios_surface_gl.mm index b278e8170..9e838e200 100644 --- a/shell/platform/darwin/ios/ios_surface_gl.mm +++ b/shell/platform/darwin/ios/ios_surface_gl.mm @@ -9,25 +9,17 @@ namespace flutter { -IOSSurfaceGL::IOSSurfaceGL(fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context, +IOSSurfaceGL::IOSSurfaceGL(std::shared_ptr context, fml::scoped_nsobject layer, FlutterPlatformViewsController* platform_views_controller) - : IOSSurface(platform_views_controller), - onscreen_gl_context_(std::move(onscreen_gl_context)), - resource_gl_context_(std::move(resource_gl_context)) { - render_target_ = std::make_unique(std::move(layer), onscreen_gl_context_, - resource_gl_context_); + : IOSSurface(platform_views_controller), context_(context) { + render_target_ = context_->CreateRenderTarget(std::move(layer)); } IOSSurfaceGL::IOSSurfaceGL(fml::scoped_nsobject layer, - fml::WeakPtr onscreen_gl_context, - fml::WeakPtr resource_gl_context) - : IOSSurface(nullptr), - onscreen_gl_context_(std::move(onscreen_gl_context)), - resource_gl_context_(std::move(resource_gl_context)) { - render_target_ = std::make_unique(std::move(layer), onscreen_gl_context_, - resource_gl_context_); + std::shared_ptr context) + : IOSSurface(nullptr), context_(context) { + render_target_ = context_->CreateRenderTarget(std::move(layer)); } IOSSurfaceGL::~IOSSurfaceGL() = default; @@ -37,7 +29,7 @@ bool IOSSurfaceGL::IsValid() const { } bool IOSSurfaceGL::ResourceContextMakeCurrent() { - return resource_gl_context_->MakeCurrent(); + return context_->ResourceMakeCurrent(); } void IOSSurfaceGL::UpdateStorageSizeIfNecessary() { @@ -68,7 +60,7 @@ bool IOSSurfaceGL::GLContextMakeCurrent() { if (!IsValid()) { return false; } - return render_target_->UpdateStorageSizeIfNecessary() && onscreen_gl_context_->MakeCurrent(); + return render_target_->UpdateStorageSizeIfNecessary() && context_->MakeCurrent(); } bool IOSSurfaceGL::GLContextClearCurrent() { @@ -153,8 +145,7 @@ bool IOSSurfaceGL::SubmitFrame(GrContext* context) { return true; } - bool submitted = platform_views_controller->SubmitFrame(std::move(context), onscreen_gl_context_, - resource_gl_context_); + bool submitted = platform_views_controller->SubmitFrame(std::move(context), context_); [CATransaction commit]; return submitted; } diff --git a/shell/platform/darwin/ios/ios_surface_software.mm b/shell/platform/darwin/ios/ios_surface_software.mm index 253c8645d..4566bbf3f 100644 --- a/shell/platform/darwin/ios/ios_surface_software.mm +++ b/shell/platform/darwin/ios/ios_surface_software.mm @@ -184,8 +184,7 @@ bool IOSSurfaceSoftware::SubmitFrame(GrContext* context) { if (platform_views_controller == nullptr) { return true; } - return platform_views_controller->SubmitFrame(nullptr, fml::WeakPtr(), - fml::WeakPtr()); + return platform_views_controller->SubmitFrame(nullptr, nullptr); } } // namespace flutter diff --git a/shell/platform/darwin/ios/platform_view_ios.h b/shell/platform/darwin/ios/platform_view_ios.h index 1e412a863..dbd93bb3d 100644 --- a/shell/platform/darwin/ios/platform_view_ios.h +++ b/shell/platform/darwin/ios/platform_view_ios.h @@ -50,7 +50,7 @@ class PlatformViewIOS final : public PlatformView { private: fml::WeakPtr owner_controller_; std::unique_ptr ios_surface_; - std::unique_ptr resource_gl_context_; + std::shared_ptr gl_context_; PlatformMessageRouter platform_message_router_; std::unique_ptr accessibility_bridge_; fml::scoped_nsprotocol text_input_plugin_; @@ -78,8 +78,6 @@ class PlatformViewIOS final : public PlatformView { // |PlatformView| void OnPreEngineRestart() const override; - void NotifyDestroyed() override; - FML_DISALLOW_COPY_AND_ASSIGN(PlatformViewIOS); }; diff --git a/shell/platform/darwin/ios/platform_view_ios.mm b/shell/platform/darwin/ios/platform_view_ios.mm index 6cf814913..acc7de58f 100644 --- a/shell/platform/darwin/ios/platform_view_ios.mm +++ b/shell/platform/darwin/ios/platform_view_ios.mm @@ -23,7 +23,7 @@ PlatformViewIOS::PlatformViewIOS(PlatformView::Delegate& delegate, flutter::TaskRunners task_runners) : PlatformView(delegate, std::move(task_runners)) { #if !TARGET_IPHONE_SIMULATOR - resource_gl_context_ = std::make_unique(); + gl_context_ = std::make_shared(); #endif // !TARGET_IPHONE_SIMULATOR } @@ -42,20 +42,16 @@ fml::WeakPtr PlatformViewIOS::GetOwnerViewController() co return owner_controller_; } -void PlatformViewIOS::NotifyDestroyed() { - PlatformView::NotifyDestroyed(); - ios_surface_.reset(); -} - void PlatformViewIOS::SetOwnerViewController(fml::WeakPtr owner_controller) { if (ios_surface_ || !owner_controller) { NotifyDestroyed(); + ios_surface_.reset(); accessibility_bridge_.reset(); } owner_controller_ = owner_controller; if (owner_controller_) { - ios_surface_ = [static_cast(owner_controller.get().view) - createSurfaceWithResourceGLContext:resource_gl_context_->GetWeakPtr()]; + ios_surface_ = + [static_cast(owner_controller.get().view) createSurface:gl_context_]; FML_DCHECK(ios_surface_ != nullptr); if (accessibility_bridge_) { @@ -93,7 +89,7 @@ std::unique_ptr PlatformViewIOS::CreateRenderingSurface() { // |PlatformView| sk_sp PlatformViewIOS::CreateResourceContext() const { - if (!resource_gl_context_ || !resource_gl_context_->MakeCurrent()) { + if (!gl_context_ || !gl_context_->ResourceMakeCurrent()) { FML_DLOG(INFO) << "Could not make resource context current on IO thread. " "Async texture uploads will be disabled. On Simulators, " "this is expected."; -- GitLab