Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
279c1cff
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
279c1cff
编写于
10月 13, 2020
作者:
K
Kaushik Iska
提交者:
GitHub
10月 13, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ios] Create a standalone external view embedder on iOS (#21798)
上级
99810261
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
186 addition
and
120 deletion
+186
-120
ci/licenses_golden/licenses_flutter
ci/licenses_golden/licenses_flutter
+2
-0
shell/platform/darwin/ios/BUILD.gn
shell/platform/darwin/ios/BUILD.gn
+2
-0
shell/platform/darwin/ios/ios_external_view_embedder.h
shell/platform/darwin/ios/ios_external_view_embedder.h
+71
-0
shell/platform/darwin/ios/ios_external_view_embedder.mm
shell/platform/darwin/ios/ios_external_view_embedder.mm
+96
-0
shell/platform/darwin/ios/ios_surface.h
shell/platform/darwin/ios/ios_surface.h
+7
-42
shell/platform/darwin/ios/ios_surface.mm
shell/platform/darwin/ios/ios_surface.mm
+5
-75
shell/platform/darwin/ios/ios_surface_gl.mm
shell/platform/darwin/ios/ios_surface_gl.mm
+1
-1
shell/platform/darwin/ios/ios_surface_metal.mm
shell/platform/darwin/ios/ios_surface_metal.mm
+1
-1
shell/platform/darwin/ios/ios_surface_software.mm
shell/platform/darwin/ios/ios_surface_software.mm
+1
-1
未找到文件。
ci/licenses_golden/licenses_flutter
浏览文件 @
279c1cff
...
...
@@ -1003,6 +1003,8 @@ FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_texture_gl.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_texture_gl.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_texture_metal.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_texture_metal.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_view_embedder.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_external_view_embedder.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_render_target_gl.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_render_target_gl.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface.h
...
...
shell/platform/darwin/ios/BUILD.gn
浏览文件 @
279c1cff
...
...
@@ -93,6 +93,8 @@ source_set("flutter_framework_source") {
"ios_context_software.mm",
"ios_external_texture_gl.h",
"ios_external_texture_gl.mm",
"ios_external_view_embedder.h",
"ios_external_view_embedder.mm",
"ios_render_target_gl.h",
"ios_render_target_gl.mm",
"ios_surface.h",
...
...
shell/platform/darwin/ios/ios_external_view_embedder.h
0 → 100644
浏览文件 @
279c1cff
// 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.
#ifndef FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS_EXTERNAL_VIEW_EMBEDDER_H_
#define FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS_EXTERNAL_VIEW_EMBEDDER_H_
#include "flutter/flow/embedded_views.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h"
namespace
flutter
{
class
IOSExternalViewEmbedder
:
public
ExternalViewEmbedder
{
public:
IOSExternalViewEmbedder
(
FlutterPlatformViewsController
*
platform_views_controller
,
std
::
shared_ptr
<
IOSContext
>
context
);
// |ExternalViewEmbedder|
virtual
~
IOSExternalViewEmbedder
()
override
;
private:
FlutterPlatformViewsController
*
platform_views_controller_
;
std
::
shared_ptr
<
IOSContext
>
ios_context_
;
// |ExternalViewEmbedder|
SkCanvas
*
GetRootCanvas
()
override
;
// |ExternalViewEmbedder|
void
CancelFrame
()
override
;
// |ExternalViewEmbedder|
void
BeginFrame
(
SkISize
frame_size
,
GrDirectContext
*
context
,
double
device_pixel_ratio
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
void
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
flutter
::
EmbeddedViewParams
>
params
)
override
;
// |ExternalViewEmbedder|
PostPrerollResult
PostPrerollAction
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
std
::
vector
<
SkCanvas
*>
GetCurrentCanvases
()
override
;
// |ExternalViewEmbedder|
SkCanvas
*
CompositeEmbeddedView
(
int
view_id
)
override
;
// |ExternalViewEmbedder|
void
SubmitFrame
(
GrDirectContext
*
context
,
std
::
unique_ptr
<
SurfaceFrame
>
frame
)
override
;
// |ExternalViewEmbedder|
void
EndFrame
(
bool
should_resubmit_frame
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
bool
SupportsDynamicThreadMerging
()
override
;
FML_DISALLOW_COPY_AND_ASSIGN
(
IOSExternalViewEmbedder
);
};
}
// namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS_EXTERNAL_VIEW_EMBEDDER_H_
shell/platform/darwin/ios/ios_external_view_embedder.mm
0 → 100644
浏览文件 @
279c1cff
// 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 "flutter/shell/platform/darwin/ios/ios_external_view_embedder.h"
namespace
flutter
{
IOSExternalViewEmbedder
::
IOSExternalViewEmbedder
(
FlutterPlatformViewsController
*
platform_views_controller
,
std
::
shared_ptr
<
IOSContext
>
context
)
:
platform_views_controller_
(
platform_views_controller
),
ios_context_
(
context
)
{
FML_CHECK
(
ios_context_
);
}
IOSExternalViewEmbedder
::~
IOSExternalViewEmbedder
()
=
default
;
// |ExternalViewEmbedder|
SkCanvas
*
IOSExternalViewEmbedder
::
GetRootCanvas
()
{
// On iOS, the root surface is created from the on-screen render target. Only the surfaces for the
// various overlays are controlled by this class.
return
nullptr
;
}
// |ExternalViewEmbedder|
void
IOSExternalViewEmbedder
::
CancelFrame
()
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::CancelFrame"
);
FML_CHECK
(
platform_views_controller_
);
platform_views_controller_
->
CancelFrame
();
}
// |ExternalViewEmbedder|
void
IOSExternalViewEmbedder
::
BeginFrame
(
SkISize
frame_size
,
GrDirectContext
*
context
,
double
device_pixel_ratio
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::BeginFrame"
);
FML_CHECK
(
platform_views_controller_
);
platform_views_controller_
->
SetFrameSize
(
frame_size
);
}
// |ExternalViewEmbedder|
void
IOSExternalViewEmbedder
::
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
EmbeddedViewParams
>
params
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::PrerollCompositeEmbeddedView"
);
FML_CHECK
(
platform_views_controller_
);
platform_views_controller_
->
PrerollCompositeEmbeddedView
(
view_id
,
std
::
move
(
params
));
}
// |ExternalViewEmbedder|
PostPrerollResult
IOSExternalViewEmbedder
::
PostPrerollAction
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::PostPrerollAction"
);
FML_CHECK
(
platform_views_controller_
);
PostPrerollResult
result
=
platform_views_controller_
->
PostPrerollAction
(
raster_thread_merger
);
return
result
;
}
// |ExternalViewEmbedder|
std
::
vector
<
SkCanvas
*>
IOSExternalViewEmbedder
::
GetCurrentCanvases
()
{
FML_CHECK
(
platform_views_controller_
);
return
platform_views_controller_
->
GetCurrentCanvases
();
}
// |ExternalViewEmbedder|
SkCanvas
*
IOSExternalViewEmbedder
::
CompositeEmbeddedView
(
int
view_id
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::CompositeEmbeddedView"
);
FML_CHECK
(
platform_views_controller_
);
return
platform_views_controller_
->
CompositeEmbeddedView
(
view_id
);
}
// |ExternalViewEmbedder|
void
IOSExternalViewEmbedder
::
SubmitFrame
(
GrDirectContext
*
context
,
std
::
unique_ptr
<
SurfaceFrame
>
frame
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::SubmitFrame"
);
FML_CHECK
(
platform_views_controller_
);
platform_views_controller_
->
SubmitFrame
(
std
::
move
(
context
),
ios_context_
,
std
::
move
(
frame
));
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::DidSubmitFrame"
);
}
// |ExternalViewEmbedder|
void
IOSExternalViewEmbedder
::
EndFrame
(
bool
should_resubmit_frame
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSExternalViewEmbedder::EndFrame"
);
FML_CHECK
(
platform_views_controller_
);
return
platform_views_controller_
->
EndFrame
(
should_resubmit_frame
,
raster_thread_merger
);
}
// |ExternalViewEmbedder|
bool
IOSExternalViewEmbedder
::
SupportsDynamicThreadMerging
()
{
return
true
;
}
}
// namespace flutter
shell/platform/darwin/ios/ios_surface.h
浏览文件 @
279c1cff
...
...
@@ -6,6 +6,7 @@
#define FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS_SURFACE_H_
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h"
#import "flutter/shell/platform/darwin/ios/ios_external_view_embedder.h"
#include <memory>
...
...
@@ -22,18 +23,19 @@ namespace flutter {
// mechanism which is still in a release preview.
bool
IsIosEmbeddedViewsPreviewEnabled
();
class
IOSSurface
:
public
ExternalViewEmbedder
{
class
IOSSurface
{
public:
static
std
::
unique_ptr
<
IOSSurface
>
Create
(
std
::
shared_ptr
<
IOSContext
>
context
,
fml
::
scoped_nsobject
<
CALayer
>
layer
,
FlutterPlatformViewsController
*
platform_views_controller
);
// |ExternalViewEmbedder|
virtual
~
IOSSurface
();
std
::
shared_ptr
<
IOSContext
>
GetContext
()
const
;
std
::
shared_ptr
<
IOSExternalViewEmbedder
>
GetSurfaceExternalViewEmbedder
()
const
;
virtual
~
IOSSurface
();
virtual
bool
IsValid
()
const
=
0
;
virtual
void
UpdateStorageSizeIfNecessary
()
=
0
;
...
...
@@ -51,45 +53,8 @@ class IOSSurface : public ExternalViewEmbedder {
private:
std
::
shared_ptr
<
IOSContext
>
ios_context_
;
FlutterPlatformViewsController
*
platform_views_controller_
;
// |ExternalViewEmbedder|
SkCanvas
*
GetRootCanvas
()
override
;
// |ExternalViewEmbedder|
void
CancelFrame
()
override
;
// |ExternalViewEmbedder|
void
BeginFrame
(
SkISize
frame_size
,
GrDirectContext
*
context
,
double
device_pixel_ratio
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
std
::
shared_ptr
<
IOSExternalViewEmbedder
>
external_view_embedder_
;
// |ExternalViewEmbedder|
void
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
flutter
::
EmbeddedViewParams
>
params
)
override
;
// |ExternalViewEmbedder|
PostPrerollResult
PostPrerollAction
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
std
::
vector
<
SkCanvas
*>
GetCurrentCanvases
()
override
;
// |ExternalViewEmbedder|
SkCanvas
*
CompositeEmbeddedView
(
int
view_id
)
override
;
// |ExternalViewEmbedder|
void
SubmitFrame
(
GrDirectContext
*
context
,
std
::
unique_ptr
<
SurfaceFrame
>
frame
)
override
;
// |ExternalViewEmbedder|
void
EndFrame
(
bool
should_resubmit_frame
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
bool
SupportsDynamicThreadMerging
()
override
;
public:
FML_DISALLOW_COPY_AND_ASSIGN
(
IOSSurface
);
};
...
...
shell/platform/darwin/ios/ios_surface.mm
浏览文件 @
279c1cff
...
...
@@ -53,8 +53,10 @@ std::unique_ptr<IOSSurface> IOSSurface::Create(
IOSSurface
::
IOSSurface
(
std
::
shared_ptr
<
IOSContext
>
ios_context
,
FlutterPlatformViewsController
*
platform_views_controller
)
:
ios_context_
(
std
::
move
(
ios_context
))
,
platform_views_controller_
(
platform_views_controller
)
{
:
ios_context_
(
std
::
move
(
ios_context
))
{
FML_DCHECK
(
ios_context_
);
external_view_embedder_
=
std
::
make_shared
<
IOSExternalViewEmbedder
>
(
platform_views_controller
,
ios_context_
);
}
IOSSurface
::~
IOSSurface
()
=
default
;
...
...
@@ -63,80 +65,8 @@ std::shared_ptr<IOSContext> IOSSurface::GetContext() const {
return
ios_context_
;
}
// |ExternalViewEmbedder|
SkCanvas
*
IOSSurface
::
GetRootCanvas
()
{
// On iOS, the root surface is created from the on-screen render target. Only the surfaces for the
// various overlays are controlled by this class.
return
nullptr
;
}
// |ExternalViewEmbedder|
void
IOSSurface
::
CancelFrame
()
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::CancelFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
platform_views_controller_
->
CancelFrame
();
}
// |ExternalViewEmbedder|
void
IOSSurface
::
BeginFrame
(
SkISize
frame_size
,
GrDirectContext
*
context
,
double
device_pixel_ratio
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::BeginFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
platform_views_controller_
->
SetFrameSize
(
frame_size
);
}
// |ExternalViewEmbedder|
void
IOSSurface
::
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
EmbeddedViewParams
>
params
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::PrerollCompositeEmbeddedView"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
platform_views_controller_
->
PrerollCompositeEmbeddedView
(
view_id
,
std
::
move
(
params
));
}
// |ExternalViewEmbedder|
PostPrerollResult
IOSSurface
::
PostPrerollAction
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::PostPrerollAction"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
PostPrerollResult
result
=
platform_views_controller_
->
PostPrerollAction
(
raster_thread_merger
);
return
result
;
}
// |ExternalViewEmbedder|
std
::
vector
<
SkCanvas
*>
IOSSurface
::
GetCurrentCanvases
()
{
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
return
platform_views_controller_
->
GetCurrentCanvases
();
}
// |ExternalViewEmbedder|
SkCanvas
*
IOSSurface
::
CompositeEmbeddedView
(
int
view_id
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::CompositeEmbeddedView"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
return
platform_views_controller_
->
CompositeEmbeddedView
(
view_id
);
}
// |ExternalViewEmbedder|
void
IOSSurface
::
SubmitFrame
(
GrDirectContext
*
context
,
std
::
unique_ptr
<
SurfaceFrame
>
frame
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::SubmitFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
platform_views_controller_
->
SubmitFrame
(
std
::
move
(
context
),
ios_context_
,
std
::
move
(
frame
));
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::DidSubmitFrame"
);
}
// |ExternalViewEmbedder|
void
IOSSurface
::
EndFrame
(
bool
should_resubmit_frame
,
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::EndFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
return
platform_views_controller_
->
EndFrame
(
should_resubmit_frame
,
raster_thread_merger
);
}
// |ExternalViewEmbedder|
bool
IOSSurface
::
SupportsDynamicThreadMerging
()
{
return
true
;
std
::
shared_ptr
<
IOSExternalViewEmbedder
>
IOSSurface
::
GetSurfaceExternalViewEmbedder
()
const
{
return
external_view_embedder_
;
}
}
// namespace flutter
shell/platform/darwin/ios/ios_surface_gl.mm
浏览文件 @
279c1cff
...
...
@@ -84,7 +84,7 @@ bool IOSSurfaceGL::GLContextPresent(uint32_t fbo_id) {
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder
*
IOSSurfaceGL
::
GetExternalViewEmbedder
()
{
return
this
;
return
GetSurfaceExternalViewEmbedder
().
get
()
;
}
}
// namespace flutter
shell/platform/darwin/ios/ios_surface_metal.mm
浏览文件 @
279c1cff
...
...
@@ -55,7 +55,7 @@ std::unique_ptr<Surface> IOSSurfaceMetal::CreateGPUSurface(GrDirectContext* /* u
// |GPUSurfaceDelegate|
ExternalViewEmbedder
*
IOSSurfaceMetal
::
GetExternalViewEmbedder
()
{
return
this
;
return
GetSurfaceExternalViewEmbedder
().
get
()
;
}
}
// namespace flutter
shell/platform/darwin/ios/ios_surface_software.mm
浏览文件 @
279c1cff
...
...
@@ -124,7 +124,7 @@ bool IOSSurfaceSoftware::PresentBackingStore(sk_sp<SkSurface> backing_store) {
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder
*
IOSSurfaceSoftware
::
GetExternalViewEmbedder
()
{
return
this
;
return
GetSurfaceExternalViewEmbedder
().
get
()
;
}
}
// namespace flutter
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录