Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
6a3b5feb
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,发现更多精彩内容 >>
未验证
提交
6a3b5feb
编写于
10月 15, 2020
作者:
K
Kaushik Iska
提交者:
GitHub
10月 15, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ios] Refactor IOSSurface factory and unify surface creation (#21877)
上级
62459b3b
变更
17
显示空白变更内容
内联
并排
Showing
17 changed file
with
167 addition
and
46 deletion
+167
-46
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/framework/Source/FlutterEngine.mm
shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
+18
-8
shell/platform/darwin/ios/framework/Source/FlutterEnginePlatformViewTest.mm
...win/ios/framework/Source/FlutterEnginePlatformViewTest.mm
+1
-0
shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h
...platform/darwin/ios/framework/Source/FlutterOverlayView.h
+0
-2
shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm
...latform/darwin/ios/framework/Source/FlutterOverlayView.mm
+0
-8
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm
...tform/darwin/ios/framework/Source/FlutterPlatformViews.mm
+5
-4
shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm
...m/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm
+35
-7
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h
...rwin/ios/framework/Source/FlutterPlatformViews_Internal.h
+7
-2
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.mm
...win/ios/framework/Source/FlutterPlatformViews_Internal.mm
+3
-2
shell/platform/darwin/ios/framework/Source/FlutterView.h
shell/platform/darwin/ios/framework/Source/FlutterView.h
+0
-1
shell/platform/darwin/ios/framework/Source/FlutterView.mm
shell/platform/darwin/ios/framework/Source/FlutterView.mm
+0
-9
shell/platform/darwin/ios/framework/Source/accessibility_bridge_test.mm
.../darwin/ios/framework/Source/accessibility_bridge_test.mm
+16
-1
shell/platform/darwin/ios/ios_surface_factory.h
shell/platform/darwin/ios/ios_surface_factory.h
+39
-0
shell/platform/darwin/ios/ios_surface_factory.mm
shell/platform/darwin/ios/ios_surface_factory.mm
+30
-0
shell/platform/darwin/ios/platform_view_ios.h
shell/platform/darwin/ios/platform_view_ios.h
+3
-0
shell/platform/darwin/ios/platform_view_ios.mm
shell/platform/darwin/ios/platform_view_ios.mm
+6
-2
未找到文件。
ci/licenses_golden/licenses_flutter
浏览文件 @
6a3b5feb
...
...
@@ -1010,6 +1010,8 @@ 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
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface_factory.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface_factory.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface_gl.h
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface_gl.mm
FILE: ../../../flutter/shell/platform/darwin/ios/ios_surface_metal.h
...
...
shell/platform/darwin/ios/BUILD.gn
浏览文件 @
6a3b5feb
...
...
@@ -99,6 +99,8 @@ source_set("flutter_framework_source") {
"ios_render_target_gl.mm",
"ios_surface.h",
"ios_surface.mm",
"ios_surface_factory.h",
"ios_surface_factory.mm",
"ios_surface_gl.h",
"ios_surface_gl.mm",
"ios_surface_software.h",
...
...
shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
浏览文件 @
6a3b5feb
...
...
@@ -28,7 +28,9 @@
#import "flutter/shell/platform/darwin/ios/framework/Source/platform_message_response_darwin.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/profiler_metrics_ios.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.h"
#import "flutter/shell/platform/darwin/ios/ios_context.h"
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
#import "flutter/shell/platform/darwin/ios/ios_surface_factory.h"
#import "flutter/shell/platform/darwin/ios/platform_view_ios.h"
#import "flutter/shell/platform/darwin/ios/rendering_api_selection.h"
#include "flutter/shell/profiling/sampling_profiler.h"
...
...
@@ -63,6 +65,7 @@ static constexpr int kNumProfilerSamplesPerSec = 5;
fml
::
WeakPtr
<
FlutterViewController
>
_viewController
;
fml
::
scoped_nsobject
<
FlutterObservatoryPublisher
>
_publisher
;
std
::
shared_ptr
<
flutter
::
IOSSurfaceFactory
>
_surfaceFactory
;
std
::
unique_ptr
<
flutter
::
FlutterPlatformViewsController
>
_platformViewsController
;
std
::
unique_ptr
<
flutter
::
ProfilerMetricsIOS
>
_profiler_metrics
;
std
::
unique_ptr
<
flutter
::
SamplingProfiler
>
_profiler
;
...
...
@@ -127,7 +130,7 @@ static constexpr int kNumProfilerSamplesPerSec = 5;
_pluginPublications
=
[
NSMutableDictionary
new
];
_registrars
=
[[
NSMutableDictionary
alloc
]
init
];
_platformViewsController
.
reset
(
new
flutter
::
FlutterPlatformViewsController
())
;
[
self
ensurePlatformViewController
]
;
_binaryMessenger
=
[[
FlutterBinaryMessengerRelay
alloc
]
initWithParent
:
self
];
_connections
.
reset
(
new
flutter
::
ConnectionCollection
());
...
...
@@ -161,6 +164,16 @@ static constexpr int kNumProfilerSamplesPerSec = 5;
return
self
;
}
-
(
void
)
ensurePlatformViewController
{
if
(
!
_platformViewsController
)
{
auto
renderingApi
=
flutter
::
GetRenderingAPIForProcess
(
FlutterView
.
forceSoftwareRendering
);
_surfaceFactory
=
flutter
::
IOSSurfaceFactory
::
Create
(
renderingApi
);
auto
pvc
=
new
flutter
::
FlutterPlatformViewsController
(
_surfaceFactory
);
_surfaceFactory
->
SetPlatformViewsController
(
pvc
);
_platformViewsController
.
reset
(
pvc
);
}
}
-
(
void
)
dealloc
{
/// Notify plugins of dealloc. This should happen first in dealloc since the
/// plugins may be talking to things like the binaryMessenger.
...
...
@@ -510,13 +523,13 @@ static constexpr int kNumProfilerSamplesPerSec = 5;
threadHostType
};
// Lambda captures by pointers to ObjC objects are fine here because the
// create call is
// synchronous.
// create call is synchronous.
flutter
::
Shell
::
CreateCallback
<
flutter
::
PlatformView
>
on_create_platform_view
=
[](
flutter
::
Shell
&
shell
)
{
[
self
](
flutter
::
Shell
&
shell
)
{
[
self
ensurePlatformViewController
];
return
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
shell
,
flutter
::
GetRenderingAPIForProcess
(
FlutterView
.
forceSoftwareRendering
),
shell
.
GetTaskRunners
());
s
elf
->
_surfaceFactory
,
s
hell
.
GetTaskRunners
());
};
flutter
::
Shell
::
CreateCallback
<
flutter
::
Rasterizer
>
on_create_rasterizer
=
...
...
@@ -544,9 +557,6 @@ static constexpr int kNumProfilerSamplesPerSec = 5;
[
self
setupChannels
];
[
self
onLocaleUpdated
:
nil
];
[
self
initializeDisplays
];
if
(
!
_platformViewsController
)
{
_platformViewsController
.
reset
(
new
flutter
::
FlutterPlatformViewsController
());
}
_publisher
.
reset
([[
FlutterObservatoryPublisher
alloc
]
initWithEnableObservatoryPublication:
settings
.
enable_observatory_publication
]);
[
self
maybeSetupPlatformViewChannels
];
...
...
shell/platform/darwin/ios/framework/Source/FlutterEnginePlatformViewTest.mm
浏览文件 @
6a3b5feb
...
...
@@ -67,6 +67,7 @@ class MockDelegate : public PlatformView::Delegate {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
project
=
OCMClassMock
([
FlutterDartProject
class
]);
...
...
shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h
浏览文件 @
6a3b5feb
...
...
@@ -35,8 +35,6 @@
-
(
instancetype
)
init
NS_DESIGNATED_INITIALIZER
;
-
(
instancetype
)
initWithContentsScale
:(
CGFloat
)
contentsScale
;
-
(
std
::
unique_ptr
<
flutter
::
IOSSurface
>
)
createSurface
:
(
std
::
shared_ptr
<
flutter
::
IOSContext
>
)
ios_context
;
@end
...
...
shell/platform/darwin/ios/framework/Source/FlutterOverlayView.mm
浏览文件 @
6a3b5feb
...
...
@@ -62,14 +62,6 @@
return
[
FlutterView
layerClass
];
}
-
(
std
::
unique_ptr
<
flutter
::
IOSSurface
>
)
createSurface
:
(
std
::
shared_ptr
<
flutter
::
IOSContext
>
)
ios_context
{
return
flutter
::
IOSSurface
::
Create
(
std
::
move
(
ios_context
),
// context
fml
::
scoped_nsobject
<
CALayer
>
{[
self
.
layer
retain
]},
// layer
nullptr
// platform views controller
);
}
// TODO(amirh): implement drawLayer to support snapshotting.
@end
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm
浏览文件 @
6a3b5feb
...
...
@@ -16,6 +16,7 @@
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h"
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
#import "flutter/shell/platform/darwin/ios/ios_surface_factory.h"
#import "flutter/shell/platform/darwin/ios/ios_surface_gl.h"
namespace
flutter
{
...
...
@@ -32,8 +33,8 @@ std::shared_ptr<FlutterPlatformViewLayer> FlutterPlatformViewLayerPool::GetLayer
overlay_view
.
reset
([[
FlutterOverlayView
alloc
]
init
]);
overlay_view_wrapper
.
reset
([[
FlutterOverlayView
alloc
]
init
]);
std
::
unique_ptr
<
IOSSurface
>
ios_surface
=
[
overlay_view
.
get
()
createSurface
:
std
:
:
move
(
ios_context
)]
;
auto
ca_layer
=
fml
::
scoped_nsobject
<
CALayer
>
{[[
overlay_view
.
get
()
layer
]
retain
]};
std
::
unique_ptr
<
IOSSurface
>
ios_surface
=
ios_surface_factory_
->
CreateSurface
(
ca_layer
)
;
std
::
unique_ptr
<
Surface
>
surface
=
ios_surface
->
CreateGPUSurface
();
layer
=
std
::
make_shared
<
FlutterPlatformViewLayer
>
(
...
...
@@ -44,8 +45,8 @@ std::shared_ptr<FlutterPlatformViewLayer> FlutterPlatformViewLayerPool::GetLayer
overlay_view
.
reset
([[
FlutterOverlayView
alloc
]
initWithContentsScale
:
screenScale
]);
overlay_view_wrapper
.
reset
([[
FlutterOverlayView
alloc
]
initWithContentsScale
:
screenScale
]);
std
::
unique_ptr
<
IOSSurface
>
ios_surface
=
[
overlay_view
.
get
()
createSurface
:
std
:
:
move
(
ios_context
)]
;
auto
ca_layer
=
fml
::
scoped_nsobject
<
CALayer
>
{[[
overlay_view
.
get
()
layer
]
retain
]};
std
::
unique_ptr
<
IOSSurface
>
ios_surface
=
ios_surface_factory_
->
CreateSurface
(
ca_layer
)
;
std
::
unique_ptr
<
Surface
>
surface
=
ios_surface
->
CreateGPUSurface
(
gr_context
);
layer
=
std
::
make_shared
<
FlutterPlatformViewLayer
>
(
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm
浏览文件 @
6a3b5feb
...
...
@@ -121,12 +121,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -175,12 +179,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -230,12 +238,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -301,12 +313,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -373,12 +389,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -445,12 +465,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
@@ -518,12 +542,16 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surface_factory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surface_factory
,
/*task_runners=*/
runners
);
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surface_factory
);
surface_factory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
FlutterPlatformViewsTestMockFlutterPlatformFactory
*
factory
=
[[
FlutterPlatformViewsTestMockFlutterPlatformFactory
new
]
autorelease
];
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h
浏览文件 @
6a3b5feb
...
...
@@ -61,6 +61,7 @@ void ResetAnchor(CALayer* layer);
class
IOSContextGL
;
class
IOSSurface
;
class
IOSSurfaceFactory
;
struct
FlutterPlatformViewLayer
{
FlutterPlatformViewLayer
(
fml
::
scoped_nsobject
<
UIView
>
overlay_view
,
...
...
@@ -87,7 +88,9 @@ struct FlutterPlatformViewLayer {
// This class isn't thread safe.
class
FlutterPlatformViewLayerPool
{
public:
FlutterPlatformViewLayerPool
()
=
default
;
FlutterPlatformViewLayerPool
(
std
::
shared_ptr
<
IOSSurfaceFactory
>
ios_surface_factory
)
:
ios_surface_factory_
(
ios_surface_factory
)
{}
~
FlutterPlatformViewLayerPool
()
=
default
;
// Gets a layer from the pool if available, or allocates a new one.
...
...
@@ -118,12 +121,14 @@ class FlutterPlatformViewLayerPool {
size_t
available_layer_index_
=
0
;
std
::
vector
<
std
::
shared_ptr
<
FlutterPlatformViewLayer
>>
layers_
;
const
std
::
shared_ptr
<
IOSSurfaceFactory
>
ios_surface_factory_
;
FML_DISALLOW_COPY_AND_ASSIGN
(
FlutterPlatformViewLayerPool
);
};
class
FlutterPlatformViewsController
{
public:
FlutterPlatformViewsController
();
FlutterPlatformViewsController
(
std
::
shared_ptr
<
IOSSurfaceFactory
>
surface_factory
);
~
FlutterPlatformViewsController
();
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.mm
浏览文件 @
6a3b5feb
...
...
@@ -23,8 +23,9 @@ FlutterPlatformViewLayer::FlutterPlatformViewLayer(
FlutterPlatformViewLayer
::~
FlutterPlatformViewLayer
()
=
default
;
FlutterPlatformViewsController
::
FlutterPlatformViewsController
()
:
layer_pool_
(
std
::
make_unique
<
FlutterPlatformViewLayerPool
>
()),
FlutterPlatformViewsController
::
FlutterPlatformViewsController
(
std
::
shared_ptr
<
IOSSurfaceFactory
>
surface_factory
)
:
layer_pool_
(
std
::
make_unique
<
FlutterPlatformViewLayerPool
>
(
surface_factory
)),
weak_factory_
(
std
::
make_unique
<
fml
::
WeakPtrFactory
<
FlutterPlatformViewsController
>>
(
this
)){};
FlutterPlatformViewsController
::~
FlutterPlatformViewsController
()
=
default
;
...
...
shell/platform/darwin/ios/framework/Source/FlutterView.h
浏览文件 @
6a3b5feb
...
...
@@ -32,7 +32,6 @@
-
(
instancetype
)
initWithDelegate
:(
id
<
FlutterViewEngineDelegate
>
)
delegate
opaque
:(
BOOL
)
opaque
NS_DESIGNATED_INITIALIZER
;
-
(
std
::
unique_ptr
<
flutter
::
IOSSurface
>
)
createSurface
:(
std
::
shared_ptr
<
flutter
::
IOSContext
>
)
context
;
// Set by FlutterEngine or FlutterViewController to override software rendering.
@property
(
class
,
nonatomic
)
BOOL
forceSoftwareRendering
;
...
...
shell/platform/darwin/ios/framework/Source/FlutterView.mm
浏览文件 @
6a3b5feb
...
...
@@ -83,15 +83,6 @@ static BOOL _forceSoftwareRendering;
flutter
::
GetRenderingAPIForProcess
(
FlutterView
.
forceSoftwareRendering
));
}
-
(
std
::
unique_ptr
<
flutter
::
IOSSurface
>
)
createSurface
:
(
std
::
shared_ptr
<
flutter
::
IOSContext
>
)
ios_context
{
return
flutter
::
IOSSurface
::
Create
(
std
::
move
(
ios_context
),
// context
fml
::
scoped_nsobject
<
CALayer
>
{[
self
.
layer
retain
]},
// layer
[
_delegate
platformViewsController
]
// platform views controller
);
}
-
(
void
)
drawLayer
:(
CALayer
*
)
layer
inContext
:(
CGContextRef
)
context
{
TRACE_EVENT0
(
"flutter"
,
"SnapshotFlutterView"
);
...
...
shell/platform/darwin/ios/framework/Source/accessibility_bridge_test.mm
浏览文件 @
6a3b5feb
...
...
@@ -137,6 +137,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
auto
bridge
=
std
::
make_unique
<
flutter
::
AccessibilityBridge
>
(
/*view=*/
nil
,
...
...
@@ -156,6 +157,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -182,6 +184,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -224,9 +227,12 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
/*raster=*/
thread_task_runner
,
/*ui=*/
thread_task_runner
,
/*io=*/
thread_task_runner
);
auto
surfaceFactory
=
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
);
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
/*ios_surface_factory=*/
surfaceFactory
,
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -234,8 +240,9 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
std
::
string
label
=
"some label"
;
auto
flutterPlatformViewsController
=
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
();
std
::
make_unique
<
flutter
::
FlutterPlatformViewsController
>
(
surfaceFactory
);
flutterPlatformViewsController
->
SetFlutterView
(
mockFlutterView
);
surfaceFactory
->
SetPlatformViewsController
(
flutterPlatformViewsController
.
get
());
MockFlutterPlatformFactory
*
factory
=
[[
MockFlutterPlatformFactory
new
]
autorelease
];
flutterPlatformViewsController
->
RegisterViewFactory
(
...
...
@@ -279,6 +286,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -344,6 +352,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -411,6 +420,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
...
...
@@ -477,6 +487,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
...
...
@@ -549,6 +560,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
...
...
@@ -623,6 +635,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
...
...
@@ -693,6 +706,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
id
mockFlutterView
=
OCMClassMock
([
FlutterView
class
]);
id
mockFlutterViewController
=
OCMClassMock
([
FlutterViewController
class
]);
...
...
@@ -760,6 +774,7 @@ fml::RefPtr<fml::TaskRunner> CreateNewThread(std::string name) {
auto
platform_view
=
std
::
make_unique
<
flutter
::
PlatformViewIOS
>
(
/*delegate=*/
mock_delegate
,
/*rendering_api=*/
flutter
::
IOSRenderingAPI
::
kSoftware
,
flutter
::
IOSSurfaceFactory
::
Create
(
flutter
::
IOSRenderingAPI
::
kSoftware
),
/*task_runners=*/
runners
);
fml
::
AutoResetWaitableEvent
latch
;
thread_task_runner
->
PostTask
([
&
]
{
...
...
shell/platform/darwin/ios/ios_surface_factory.h
0 → 100644
浏览文件 @
6a3b5feb
// 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__SURFACE_FACTORY_H_
#define FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS__SURFACE_FACTORY_H_
#include <memory>
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
#import "flutter/shell/platform/darwin/ios/rendering_api_selection.h"
namespace
flutter
{
class
IOSSurfaceFactory
{
public:
static
std
::
shared_ptr
<
IOSSurfaceFactory
>
Create
(
IOSRenderingAPI
rendering_api
);
explicit
IOSSurfaceFactory
(
std
::
shared_ptr
<
IOSContext
>
ios_context
);
~
IOSSurfaceFactory
();
void
SetPlatformViewsController
(
FlutterPlatformViewsController
*
platform_views_controller
);
std
::
unique_ptr
<
IOSSurface
>
CreateSurface
(
fml
::
scoped_nsobject
<
CALayer
>
ca_layer
);
private:
FlutterPlatformViewsController
*
platform_views_controller_
;
std
::
shared_ptr
<
IOSContext
>
ios_context_
;
FML_DISALLOW_COPY_AND_ASSIGN
(
IOSSurfaceFactory
);
};
}
// namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS__SURFACE_FACTORY_H_
shell/platform/darwin/ios/ios_surface_factory.mm
0 → 100644
浏览文件 @
6a3b5feb
// 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_surface_factory.h"
#import "flutter/shell/platform/darwin/ios/ios_context.h"
namespace
flutter
{
IOSSurfaceFactory
::
IOSSurfaceFactory
(
std
::
shared_ptr
<
IOSContext
>
ios_context
)
:
ios_context_
(
ios_context
)
{}
std
::
shared_ptr
<
IOSSurfaceFactory
>
IOSSurfaceFactory
::
Create
(
IOSRenderingAPI
rendering_api
)
{
std
::
shared_ptr
<
IOSContext
>
ios_context
=
IOSContext
::
Create
(
rendering_api
);
return
std
::
make_shared
<
IOSSurfaceFactory
>
(
ios_context
);
}
IOSSurfaceFactory
::~
IOSSurfaceFactory
()
=
default
;
void
IOSSurfaceFactory
::
SetPlatformViewsController
(
FlutterPlatformViewsController
*
platform_views_controller
)
{
platform_views_controller_
=
platform_views_controller
;
}
std
::
unique_ptr
<
IOSSurface
>
IOSSurfaceFactory
::
CreateSurface
(
fml
::
scoped_nsobject
<
CALayer
>
ca_layer
)
{
return
flutter
::
IOSSurface
::
Create
(
ios_context_
,
ca_layer
,
platform_views_controller_
);
}
}
// namespace flutter
shell/platform/darwin/ios/platform_view_ios.h
浏览文件 @
6a3b5feb
...
...
@@ -19,6 +19,7 @@
#import "flutter/shell/platform/darwin/ios/framework/Source/platform_message_router.h"
#import "flutter/shell/platform/darwin/ios/ios_context.h"
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
#import "flutter/shell/platform/darwin/ios/ios_surface_factory.h"
#import "flutter/shell/platform/darwin/ios/rendering_api_selection.h"
@
class
FlutterViewController
;
...
...
@@ -41,6 +42,7 @@ class PlatformViewIOS final : public PlatformView {
public:
explicit
PlatformViewIOS
(
PlatformView
::
Delegate
&
delegate
,
IOSRenderingAPI
rendering_api
,
std
::
shared_ptr
<
IOSSurfaceFactory
>
surface_factory
,
flutter
::
TaskRunners
task_runners
);
~
PlatformViewIOS
()
override
;
...
...
@@ -124,6 +126,7 @@ class PlatformViewIOS final : public PlatformView {
std
::
mutex
ios_surface_mutex_
;
std
::
unique_ptr
<
IOSSurface
>
ios_surface_
;
std
::
shared_ptr
<
IOSContext
>
ios_context_
;
std
::
shared_ptr
<
IOSSurfaceFactory
>
ios_surface_factory_
;
PlatformMessageRouter
platform_message_router_
;
AccessibilityBridgePtr
accessibility_bridge_
;
fml
::
scoped_nsprotocol
<
FlutterTextInputPlugin
*>
text_input_plugin_
;
...
...
shell/platform/darwin/ios/platform_view_ios.mm
浏览文件 @
6a3b5feb
...
...
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#import "flutter/shell/platform/darwin/ios/platform_view_ios.h"
#include <memory>
#include <utility>
...
...
@@ -46,9 +47,11 @@ void PlatformViewIOS::AccessibilityBridgePtr::reset(AccessibilityBridge* bridge)
PlatformViewIOS
::
PlatformViewIOS
(
PlatformView
::
Delegate
&
delegate
,
IOSRenderingAPI
rendering_api
,
std
::
shared_ptr
<
IOSSurfaceFactory
>
surface_factory
,
flutter
::
TaskRunners
task_runners
)
:
PlatformView
(
delegate
,
std
::
move
(
task_runners
)),
ios_context_
(
IOSContext
::
Create
(
rendering_api
)),
ios_surface_factory_
(
surface_factory
),
accessibility_bridge_
([
this
](
bool
enabled
)
{
PlatformView
::
SetSemanticsEnabled
(
enabled
);
})
{}
PlatformViewIOS
::~
PlatformViewIOS
()
=
default
;
...
...
@@ -102,8 +105,9 @@ void PlatformViewIOS::attachView() {
FML_DCHECK
(
owner_controller_
.
get
().
isViewLoaded
)
<<
"FlutterViewController's view should be loaded "
"before attaching to PlatformViewIOS."
;
ios_surface_
=
[
static_cast
<
FlutterView
*>
(
owner_controller_
.
get
().
view
)
createSurface
:
ios_context_
];
auto
flutter_view
=
static_cast
<
FlutterView
*>
(
owner_controller_
.
get
().
view
);
auto
ca_layer
=
fml
::
scoped_nsobject
<
CALayer
>
{[[
flutter_view
layer
]
retain
]};
ios_surface_
=
ios_surface_factory_
->
CreateSurface
(
ca_layer
);
FML_DCHECK
(
ios_surface_
!=
nullptr
);
if
(
accessibility_bridge_
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录