diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h index 82d5fcc1d3a2eb6e2f34fe073ba1169340bee568..868d2176a309b1e4471c4342c7ce73744910ecf5 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h @@ -36,8 +36,6 @@ - (fml::WeakPtr)platformView; -- (flutter::PlatformViewIOS*)iosPlatformView; - - (flutter::Rasterizer::Screenshot)screenshot:(flutter::Rasterizer::ScreenshotType)type base64Encode:(bool)base64Encode; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h b/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h index 903b9c02ca9a642031b56b9f00a5224fc989a7f5..fac783f87f33fd41a8a50d9f4e8f974cb30bdff7 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 9cdf862c8c078c6cd41299b377f39ef4366ce852..414029023061d5642d3b2e30b6a6596a0fcace8b 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 7cc3c44c04ff078d77a26a6c26da5ddf531c5311..00a7c9ecda5bd0e9207839a3e656c59969a28142 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 181723fd80286b7572042d4f6b303957a8a22a52..f9f0eefece60170038573fccc7179710d48f5e12 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 ad75d817f6800b493e46a52521b410593ff7c741..0da2d5b0bc71d405ae54a20f435dd295769ae409 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 8891648da52f4480ea8503cc0d8ef308b6c1db02..4e4acdfc0438f71a57305969e6ce81ddc6136001 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/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 05eac19d4a83b27fa6a84b8d26641a71825d8d61..3cea602f86bad56da90f60f34333269f36dc15e2 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -1152,8 +1152,4 @@ constexpr CGFloat kStandardStatusBarHeight = 20.0; return [_engine.get() valuePublishedByPlugin:pluginKey]; } -- (BOOL)hasOnscreenSurface { - return [_engine.get() iosPlatformView] -> HasOnscreenSurface(); -} - @end diff --git a/shell/platform/darwin/ios/ios_gl_context.h b/shell/platform/darwin/ios/ios_gl_context.h index 1f1bebcfb85a3335e4921304f9c0586598b9d837..232645d9c85921009e804628a9f2179dc0333819 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 8398ce0a5efd69c08ac01b6b2011c2ee6f0a02b9..52fb85f8f19a9a0d284f4fd7cffb0dd705272d05 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 b26713e8ea707dc2e37415371aae22cf256b3a92..b2eafe16e0950d051ee72ccd0aa28dc5059847f3 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 e0ce5e7bf829214d0f01e643f8fb5cad6537b1cb..a57ba9c46b41499cffd5d0f2266a7c602c82403c 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 7dc815dbba8793b5ee996ab1de878e3f5ea5a7e7..964cc7adb692e81909e613ffd21ed4219de21c33 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 b278e8170cd89956ac1ac7240696e2618b1bb6cb..9e838e200df347d6e8c4c688bd90d66cf206ba3f 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 253c8645d23083c910fe75a53dc7055a6e750276..4566bbf3f3624489f41baf830b4fb12d025c6f83 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 f9461719ba32950804a6c99c01f8d53ca73a7aa3..38fc2a9f30b280fec81fe9d6701287f73d4e955e 100644 --- a/shell/platform/darwin/ios/platform_view_ios.h +++ b/shell/platform/darwin/ios/platform_view_ios.h @@ -44,12 +44,10 @@ class PlatformViewIOS final : public PlatformView { // |PlatformView| void SetSemanticsEnabled(bool enabled) override; - bool HasOnscreenSurface() const; - 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_; @@ -77,8 +75,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 34407de9aac30bcf0d0a133c03cb99b12093eeb2..c80ae377c03a158fde7da68a7c254383fdf2851e 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,24 +42,16 @@ fml::WeakPtr PlatformViewIOS::GetOwnerViewController() co return owner_controller_; } -void PlatformViewIOS::NotifyDestroyed() { - PlatformView::NotifyDestroyed(); - ios_surface_.reset(); -} - -bool PlatformViewIOS::HasOnscreenSurface() const { - return !!ios_surface_; -} - 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_) { @@ -91,7 +83,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."; diff --git a/testing/scenario_app/ios/Scenarios/Scenarios.xcodeproj/project.pbxproj b/testing/scenario_app/ios/Scenarios/Scenarios.xcodeproj/project.pbxproj index bf19f4e482c9ed1338a2604b219f64a4bc864c80..c7fe99847ea68acfabc7dccf9f4affc70acf44dc 100644 --- a/testing/scenario_app/ios/Scenarios/Scenarios.xcodeproj/project.pbxproj +++ b/testing/scenario_app/ios/Scenarios/Scenarios.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 24D47D1B230C79840069DD5E /* golden_platform_view_D211AP.png in Resources */ = {isa = PBXBuildFile; fileRef = 24D47D1A230C79840069DD5E /* golden_platform_view_D211AP.png */; }; 24D47D1D230CA2700069DD5E /* golden_platform_view_iPhone SE_simulator.png in Resources */ = {isa = PBXBuildFile; fileRef = 24D47D1C230CA2700069DD5E /* golden_platform_view_iPhone SE_simulator.png */; }; 24F1FB89230B4579005ACE7C /* TextPlatformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 24F1FB87230B4579005ACE7C /* TextPlatformView.m */; }; - D678B7C82322EFDA00792FDC /* FlutterViewTest.m in Sources */ = {isa = PBXBuildFile; fileRef = D678B7C72322EFDA00792FDC /* FlutterViewTest.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -106,7 +105,6 @@ 24D47D1E230CA4480069DD5E /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 24F1FB87230B4579005ACE7C /* TextPlatformView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextPlatformView.m; sourceTree = ""; }; 24F1FB88230B4579005ACE7C /* TextPlatformView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextPlatformView.h; sourceTree = ""; }; - D678B7C72322EFDA00792FDC /* FlutterViewTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlutterViewTest.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -178,7 +176,6 @@ children = ( 248FDFC322FE7CD0009CC7CD /* FlutterEngineTest.m */, 0DB781FC22EA2C0300E9B371 /* FlutterViewControllerTest.m */, - D678B7C72322EFDA00792FDC /* FlutterViewTest.m */, 248D76E522E388380012F0C1 /* Info.plist */, ); path = ScenariosTests; @@ -352,7 +349,6 @@ files = ( 0DB7820222EA493B00E9B371 /* FlutterViewControllerTest.m in Sources */, 248FDFC422FE7CD0009CC7CD /* FlutterEngineTest.m in Sources */, - D678B7C82322EFDA00792FDC /* FlutterViewTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/testing/scenario_app/ios/Scenarios/ScenariosTests/FlutterViewTest.m b/testing/scenario_app/ios/Scenarios/ScenariosTests/FlutterViewTest.m deleted file mode 100644 index 27c1f7702868e77176ef71461790cbba4fa94d6e..0000000000000000000000000000000000000000 --- a/testing/scenario_app/ios/Scenarios/ScenariosTests/FlutterViewTest.m +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2013 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. - -#import -#import -#import "AppDelegate.h" - -@interface FlutterViewGLContextTest : XCTestCase -@property(nonatomic, strong) FlutterViewController* flutterViewController; -@property(nonatomic, strong) FlutterEngine* flutterEngine; -@end - -@implementation FlutterViewGLContextTest - -- (void)setUp { - [super setUp]; - self.continueAfterFailure = NO; -} - -- (void)tearDown { - if (self.flutterViewController) { - [self.flutterViewController removeFromParentViewController]; - [self.flutterViewController release]; - } - if (self.flutterEngine) { - [self.flutterEngine release]; - } - [super tearDown]; -} - -- (void)testFlutterViewDestroyed { - self.flutterEngine = [[FlutterEngine alloc] initWithName:@"testGL" project:nil]; - [self.flutterEngine runWithEntrypoint:nil]; - self.flutterViewController = [[FlutterViewController alloc] initWithEngine:self.flutterEngine - nibName:nil - bundle:nil]; - - AppDelegate* appDelegate = (AppDelegate*)UIApplication.sharedApplication.delegate; - UIViewController* rootVC = appDelegate.window.rootViewController; - [rootVC presentViewController:self.flutterViewController animated:NO completion:nil]; - - // TODO: refactor this to not rely on private test-only APIs - __weak id flutterView = [self.flutterViewController flutterView]; - XCTAssertNotNil(flutterView); - XCTAssertTrue([self.flutterViewController hasOnscreenSurface]); - - [self.flutterViewController - dismissViewControllerAnimated:NO - completion:^{ - __weak id flutterView = [self.flutterViewController flutterView]; - XCTAssertNil(flutterView); - XCTAssertFalse([self.flutterViewController hasOnscreenSurface]); - }]; -} - -@end