From e0667f2d1308a017ef95bd50eb33627745eead66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=80=E4=B8=80?= Date: Fri, 16 Aug 2019 23:30:50 +0800 Subject: [PATCH 1/2] Retain texture object to avoid it to be released too early --- shell/platform/darwin/ios/ios_external_texture_gl.h | 3 ++- shell/platform/darwin/ios/ios_external_texture_gl.mm | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/shell/platform/darwin/ios/ios_external_texture_gl.h b/shell/platform/darwin/ios/ios_external_texture_gl.h index 923f7410632e8..e057646620a99 100644 --- a/shell/platform/darwin/ios/ios_external_texture_gl.h +++ b/shell/platform/darwin/ios/ios_external_texture_gl.h @@ -7,6 +7,7 @@ #include "flutter/flow/texture.h" #include "flutter/fml/platform/darwin/cf_utils.h" +#include "flutter/fml/platform/darwin/scoped_nsobject.h" #include "flutter/shell/platform/darwin/ios/framework/Headers/FlutterTexture.h" namespace flutter { @@ -31,7 +32,7 @@ class IOSExternalTextureGL : public flutter::Texture { void EnsureTextureCacheExists(); - NSObject* external_texture_; + fml::scoped_nsobject> external_texture_; fml::CFRef cache_ref_; fml::CFRef texture_ref_; fml::CFRef buffer_ref_; diff --git a/shell/platform/darwin/ios/ios_external_texture_gl.mm b/shell/platform/darwin/ios/ios_external_texture_gl.mm index e7e15d5719196..87f19c200b450 100644 --- a/shell/platform/darwin/ios/ios_external_texture_gl.mm +++ b/shell/platform/darwin/ios/ios_external_texture_gl.mm @@ -16,7 +16,8 @@ IOSExternalTextureGL::IOSExternalTextureGL(int64_t textureId, NSObject* externalTexture) - : Texture(textureId), external_texture_(externalTexture) { + : Texture(textureId), + external_texture_(fml::scoped_nsobject>([externalTexture retain])) { FML_DCHECK(external_texture_); } From b136711c2a0093f38f6fd49ec71ec3e301591fad Mon Sep 17 00:00:00 2001 From: WATER1350 Date: Tue, 17 Sep 2019 01:40:16 +0800 Subject: [PATCH 2/2] Update ios_external_texture_gl.mm --- shell/platform/darwin/ios/ios_external_texture_gl.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/darwin/ios/ios_external_texture_gl.mm b/shell/platform/darwin/ios/ios_external_texture_gl.mm index 3fe58b7cd33d7..4167269bdabe0 100644 --- a/shell/platform/darwin/ios/ios_external_texture_gl.mm +++ b/shell/platform/darwin/ios/ios_external_texture_gl.mm @@ -66,7 +66,7 @@ GrContext* context) { EnsureTextureCacheExists(); if (NeedUpdateTexture(freeze)) { - auto pixelBuffer = [external_texture_ copyPixelBuffer]; + auto pixelBuffer = [external_texture_.get() copyPixelBuffer]; if (pixelBuffer) { buffer_ref_.Reset(pixelBuffer); }