Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_34031325
engine
提交
caebc93e
E
engine
项目概览
qq_34031325
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
未验证
提交
caebc93e
编写于
4月 08, 2020
作者:
C
Chris Yang
提交者:
GitHub
4月 08, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Improve iOS PlatformViews to better handle thread merging. (#16935)" (#17600)
This reverts commit
f6b8eda7
.
上级
6245149b
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
31 addition
and
342 deletion
+31
-342
ci/licenses_golden/licenses_flutter
ci/licenses_golden/licenses_flutter
+0
-2
flow/embedded_views.h
flow/embedded_views.h
+0
-12
shell/common/BUILD.gn
shell/common/BUILD.gn
+0
-2
shell/common/animator_unittests.cc
shell/common/animator_unittests.cc
+1
-1
shell/common/rasterizer.cc
shell/common/rasterizer.cc
+0
-10
shell/common/shell_test.cc
shell/common/shell_test.cc
+6
-10
shell/common/shell_test.h
shell/common/shell_test.h
+3
-7
shell/common/shell_test_external_view_embedder.cc
shell/common/shell_test_external_view_embedder.cc
+0
-55
shell/common/shell_test_external_view_embedder.h
shell/common/shell_test_external_view_embedder.h
+0
-72
shell/common/shell_test_platform_view.cc
shell/common/shell_test_platform_view.cc
+3
-7
shell/common/shell_test_platform_view.h
shell/common/shell_test_platform_view.h
+1
-4
shell/common/shell_test_platform_view_gl.cc
shell/common/shell_test_platform_view_gl.cc
+3
-6
shell/common/shell_test_platform_view_gl.h
shell/common/shell_test_platform_view_gl.h
+1
-7
shell/common/shell_test_platform_view_vulkan.cc
shell/common/shell_test_platform_view_vulkan.cc
+5
-18
shell/common/shell_test_platform_view_vulkan.h
shell/common/shell_test_platform_view_vulkan.h
+2
-14
shell/common/shell_unittests.cc
shell/common/shell_unittests.cc
+1
-47
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm
...tform/darwin/ios/framework/Source/FlutterPlatformViews.mm
+2
-28
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h
...rwin/ios/framework/Source/FlutterPlatformViews_Internal.h
+0
-12
shell/platform/darwin/ios/ios_surface.h
shell/platform/darwin/ios/ios_surface.h
+0
-3
shell/platform/darwin/ios/ios_surface.mm
shell/platform/darwin/ios/ios_surface.mm
+3
-25
未找到文件。
ci/licenses_golden/licenses_flutter
浏览文件 @
caebc93e
...
...
@@ -592,8 +592,6 @@ FILE: ../../../flutter/shell/common/shell_io_manager.cc
FILE: ../../../flutter/shell/common/shell_io_manager.h
FILE: ../../../flutter/shell/common/shell_test.cc
FILE: ../../../flutter/shell/common/shell_test.h
FILE: ../../../flutter/shell/common/shell_test_external_view_embedder.cc
FILE: ../../../flutter/shell/common/shell_test_external_view_embedder.h
FILE: ../../../flutter/shell/common/shell_test_platform_view.cc
FILE: ../../../flutter/shell/common/shell_test_platform_view.h
FILE: ../../../flutter/shell/common/shell_test_platform_view_gl.cc
...
...
flow/embedded_views.h
浏览文件 @
caebc93e
...
...
@@ -253,18 +253,6 @@ class ExternalViewEmbedder {
// This is called after submitting the embedder frame and the surface frame.
virtual
void
FinishFrame
();
// This should only be called after |SubmitFrame|.
// This method provides the embedder a way to do additional tasks after
// |SubmitFrame|. After invoking this method, the current task on the
// TaskRunner should end immediately.
//
// For example on the iOS embedder, threads are merged in this call.
// A new frame on the platform thread starts immediately. If the GPU thread
// still has some task running, there could be two frames being rendered
// concurrently, which causes undefined behaviors.
virtual
void
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{}
FML_DISALLOW_COPY_AND_ASSIGN
(
ExternalViewEmbedder
);
};
// ExternalViewEmbedder
...
...
shell/common/BUILD.gn
浏览文件 @
caebc93e
...
...
@@ -191,8 +191,6 @@ if (enable_unittests) {
"pipeline_unittests.cc",
"shell_test.cc",
"shell_test.h",
"shell_test_external_view_embedder.cc",
"shell_test_external_view_embedder.h",
"shell_test_platform_view.cc",
"shell_test_platform_view.h",
"shell_unittests.cc",
...
...
shell/common/animator_unittests.cc
浏览文件 @
caebc93e
...
...
@@ -55,7 +55,7 @@ TEST_F(ShellTest, VSyncTargetTime) {
return
ShellTestPlatformView
::
Create
(
shell
,
shell
.
GetTaskRunners
(),
vsync_clock
,
std
::
move
(
create_vsync_waiter
),
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
,
nullptr
);
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
);
},
[](
Shell
&
shell
)
{
return
std
::
make_unique
<
Rasterizer
>
(
shell
,
shell
.
GetTaskRunners
());
...
...
shell/common/rasterizer.cc
浏览文件 @
caebc93e
...
...
@@ -136,16 +136,6 @@ void Rasterizer::Draw(fml::RefPtr<Pipeline<flutter::LayerTree>> pipeline) {
consume_result
=
PipelineConsumeResult
::
MoreAvailable
;
}
// Merging the thread as we know the next `Draw` should be run on the platform
// thread.
if
(
raster_status
==
RasterStatus
::
kResubmit
)
{
auto
*
external_view_embedder
=
surface_
->
GetExternalViewEmbedder
();
// We know only the `external_view_embedder` can
// causes|RasterStatus::kResubmit|. Check to make sure.
FML_DCHECK
(
external_view_embedder
!=
nullptr
);
external_view_embedder
->
EndFrame
(
raster_thread_merger_
);
}
// Consume as many pipeline items as possible. But yield the event loop
// between successive tries.
switch
(
consume_result
)
{
...
...
shell/common/shell_test.cc
浏览文件 @
caebc93e
...
...
@@ -260,12 +260,9 @@ std::unique_ptr<Shell> ShellTest::CreateShell(Settings settings,
simulate_vsync
);
}
std
::
unique_ptr
<
Shell
>
ShellTest
::
CreateShell
(
Settings
settings
,
TaskRunners
task_runners
,
bool
simulate_vsync
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
)
{
std
::
unique_ptr
<
Shell
>
ShellTest
::
CreateShell
(
Settings
settings
,
TaskRunners
task_runners
,
bool
simulate_vsync
)
{
const
auto
vsync_clock
=
std
::
make_shared
<
ShellTestVsyncClock
>
();
CreateVsyncWaiter
create_vsync_waiter
=
[
&
]()
{
if
(
simulate_vsync
)
{
...
...
@@ -278,18 +275,17 @@ std::unique_ptr<Shell> ShellTest::CreateShell(
};
return
Shell
::
Create
(
task_runners
,
settings
,
[
vsync_clock
,
&
create_vsync_waiter
,
shell_test_external_view_embedder
](
Shell
&
shell
)
{
[
vsync_clock
,
&
create_vsync_waiter
](
Shell
&
shell
)
{
return
ShellTestPlatformView
::
Create
(
shell
,
shell
.
GetTaskRunners
(),
vsync_clock
,
std
::
move
(
create_vsync_waiter
),
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
,
shell_test_external_view_embedder
);
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
);
},
[](
Shell
&
shell
)
{
return
std
::
make_unique
<
Rasterizer
>
(
shell
,
shell
.
GetTaskRunners
());
});
}
void
ShellTest
::
DestroyShell
(
std
::
unique_ptr
<
Shell
>
shell
)
{
DestroyShell
(
std
::
move
(
shell
),
GetTaskRunnersForFixture
());
}
...
...
shell/common/shell_test.h
浏览文件 @
caebc93e
...
...
@@ -15,7 +15,6 @@
#include "flutter/lib/ui/window/platform_message.h"
#include "flutter/shell/common/run_configuration.h"
#include "flutter/shell/common/shell.h"
#include "flutter/shell/common/shell_test_external_view_embedder.h"
#include "flutter/shell/common/thread_host.h"
#include "flutter/shell/common/vsync_waiters_test.h"
#include "flutter/testing/elf_loader.h"
...
...
@@ -32,12 +31,9 @@ class ShellTest : public ThreadTest {
Settings
CreateSettingsForFixture
();
std
::
unique_ptr
<
Shell
>
CreateShell
(
Settings
settings
,
bool
simulate_vsync
=
false
);
std
::
unique_ptr
<
Shell
>
CreateShell
(
Settings
settings
,
TaskRunners
task_runners
,
bool
simulate_vsync
=
false
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
=
nullptr
);
std
::
unique_ptr
<
Shell
>
CreateShell
(
Settings
settings
,
TaskRunners
task_runners
,
bool
simulate_vsync
=
false
);
void
DestroyShell
(
std
::
unique_ptr
<
Shell
>
shell
);
void
DestroyShell
(
std
::
unique_ptr
<
Shell
>
shell
,
TaskRunners
task_runners
);
TaskRunners
GetTaskRunnersForFixture
();
...
...
shell/common/shell_test_external_view_embedder.cc
已删除
100644 → 0
浏览文件 @
6245149b
#include "shell_test_external_view_embedder.h"
namespace
flutter
{
// |ExternalViewEmbedder|
void
ShellTestExternalViewEmbedder
::
CancelFrame
()
{}
// |ExternalViewEmbedder|
void
ShellTestExternalViewEmbedder
::
BeginFrame
(
SkISize
frame_size
,
GrContext
*
context
,
double
device_pixel_ratio
)
{}
// |ExternalViewEmbedder|
void
ShellTestExternalViewEmbedder
::
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
EmbeddedViewParams
>
params
)
{}
// |ExternalViewEmbedder|
PostPrerollResult
ShellTestExternalViewEmbedder
::
PostPrerollAction
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
FML_DCHECK
(
raster_thread_merger
);
return
post_preroll_result_
;
}
// |ExternalViewEmbedder|
std
::
vector
<
SkCanvas
*>
ShellTestExternalViewEmbedder
::
GetCurrentCanvases
()
{
return
{};
}
// |ExternalViewEmbedder|
SkCanvas
*
ShellTestExternalViewEmbedder
::
CompositeEmbeddedView
(
int
view_id
)
{
return
nullptr
;
}
// |ExternalViewEmbedder|
bool
ShellTestExternalViewEmbedder
::
SubmitFrame
(
GrContext
*
context
,
SkCanvas
*
background_canvas
)
{
return
true
;
}
// |ExternalViewEmbedder|
void
ShellTestExternalViewEmbedder
::
FinishFrame
()
{}
// |ExternalViewEmbedder|
void
ShellTestExternalViewEmbedder
::
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
end_frame_call_back_
();
}
// |ExternalViewEmbedder|
SkCanvas
*
ShellTestExternalViewEmbedder
::
GetRootCanvas
()
{
return
nullptr
;
}
}
// namespace flutter
shell/common/shell_test_external_view_embedder.h
已删除
100644 → 0
浏览文件 @
6245149b
// 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_TEST_EXTERNAL_VIEW_EMBEDDER_H_
#define FLUTTER_SHELL_TEST_EXTERNAL_VIEW_EMBEDDER_H_
#include "flutter/flow/embedded_views.h"
#include "flutter/fml/raster_thread_merger.h"
namespace
flutter
{
//------------------------------------------------------------------------------
/// @brief The external view embedder used by |ShellTestPlatformViewGL|
///
class
ShellTestExternalViewEmbedder
final
:
public
ExternalViewEmbedder
{
public:
using
EndFrameCallBack
=
std
::
function
<
void
(
void
)
>
;
ShellTestExternalViewEmbedder
(
const
EndFrameCallBack
&
end_frame_call_back
,
PostPrerollResult
post_preroll_result
)
:
end_frame_call_back_
(
end_frame_call_back
),
post_preroll_result_
(
post_preroll_result
)
{}
~
ShellTestExternalViewEmbedder
()
=
default
;
private:
// |ExternalViewEmbedder|
void
CancelFrame
()
override
;
// |ExternalViewEmbedder|
void
BeginFrame
(
SkISize
frame_size
,
GrContext
*
context
,
double
device_pixel_ratio
)
override
;
// |ExternalViewEmbedder|
void
PrerollCompositeEmbeddedView
(
int
view_id
,
std
::
unique_ptr
<
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|
bool
SubmitFrame
(
GrContext
*
context
,
SkCanvas
*
background_canvas
)
override
;
// |ExternalViewEmbedder|
void
FinishFrame
()
override
;
// |ExternalViewEmbedder|
void
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
// |ExternalViewEmbedder|
SkCanvas
*
GetRootCanvas
()
override
;
const
EndFrameCallBack
end_frame_call_back_
;
const
PostPrerollResult
post_preroll_result_
;
FML_DISALLOW_COPY_AND_ASSIGN
(
ShellTestExternalViewEmbedder
);
};
}
// namespace flutter
#endif // FLUTTER_SHELL_TEST_EXTERNAL_VIEW_EMBEDDER_H_
shell/common/shell_test_platform_view.cc
浏览文件 @
caebc93e
...
...
@@ -19,9 +19,7 @@ std::unique_ptr<ShellTestPlatformView> ShellTestPlatformView::Create(
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
BackendType
backend
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
)
{
BackendType
backend
)
{
// TODO(gw280): https://github.com/flutter/flutter/issues/50298
// Make this fully runtime configurable
switch
(
backend
)
{
...
...
@@ -29,14 +27,12 @@ std::unique_ptr<ShellTestPlatformView> ShellTestPlatformView::Create(
#ifdef SHELL_ENABLE_GL
case
BackendType
::
kGLBackend
:
return
std
::
make_unique
<
ShellTestPlatformViewGL
>
(
delegate
,
task_runners
,
vsync_clock
,
create_vsync_waiter
,
shell_test_external_view_embedder
);
delegate
,
task_runners
,
vsync_clock
,
create_vsync_waiter
);
#endif // SHELL_ENABLE_GL
#ifdef SHELL_ENABLE_VULKAN
case
BackendType
::
kVulkanBackend
:
return
std
::
make_unique
<
ShellTestPlatformViewVulkan
>
(
delegate
,
task_runners
,
vsync_clock
,
create_vsync_waiter
,
shell_test_external_view_embedder
);
delegate
,
task_runners
,
vsync_clock
,
create_vsync_waiter
);
#endif // SHELL_ENABLE_VULKAN
default:
FML_LOG
(
FATAL
)
<<
"No backends supported for ShellTestPlatformView"
;
...
...
shell/common/shell_test_platform_view.h
浏览文件 @
caebc93e
...
...
@@ -6,7 +6,6 @@
#define FLUTTER_SHELL_COMMON_SHELL_TEST_PLATFORM_VIEW_H_
#include "flutter/shell/common/platform_view.h"
#include "flutter/shell/common/shell_test_external_view_embedder.h"
#include "flutter/shell/common/vsync_waiters_test.h"
namespace
flutter
{
...
...
@@ -25,9 +24,7 @@ class ShellTestPlatformView : public PlatformView {
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
BackendType
backend
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
);
BackendType
backend
);
virtual
void
SimulateVSync
()
=
0
;
...
...
shell/common/shell_test_platform_view_gl.cc
浏览文件 @
caebc93e
...
...
@@ -12,14 +12,11 @@ ShellTestPlatformViewGL::ShellTestPlatformViewGL(
PlatformView
::
Delegate
&
delegate
,
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
)
CreateVsyncWaiter
create_vsync_waiter
)
:
ShellTestPlatformView
(
delegate
,
std
::
move
(
task_runners
)),
gl_surface_
(
SkISize
::
Make
(
800
,
600
)),
create_vsync_waiter_
(
std
::
move
(
create_vsync_waiter
)),
vsync_clock_
(
vsync_clock
),
shell_test_external_view_embedder_
(
shell_test_external_view_embedder
)
{}
vsync_clock_
(
vsync_clock
)
{}
ShellTestPlatformViewGL
::~
ShellTestPlatformViewGL
()
=
default
;
...
...
@@ -73,7 +70,7 @@ ShellTestPlatformViewGL::GetGLProcResolver() const {
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder
*
ShellTestPlatformViewGL
::
GetExternalViewEmbedder
()
{
return
shell_test_external_view_embedder_
.
get
()
;
return
nullptr
;
}
}
// namespace testing
...
...
shell/common/shell_test_platform_view_gl.h
浏览文件 @
caebc93e
...
...
@@ -5,7 +5,6 @@
#ifndef FLUTTER_SHELL_COMMON_SHELL_TEST_PLATFORM_VIEW_GL_H_
#define FLUTTER_SHELL_COMMON_SHELL_TEST_PLATFORM_VIEW_GL_H_
#include "flutter/shell/common/shell_test_external_view_embedder.h"
#include "flutter/shell/common/shell_test_platform_view.h"
#include "flutter/shell/gpu/gpu_surface_gl_delegate.h"
#include "flutter/testing/test_gl_surface.h"
...
...
@@ -19,9 +18,7 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView,
ShellTestPlatformViewGL
(
PlatformView
::
Delegate
&
delegate
,
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
);
CreateVsyncWaiter
create_vsync_waiter
);
virtual
~
ShellTestPlatformViewGL
()
override
;
...
...
@@ -34,9 +31,6 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock_
;
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder_
;
// |PlatformView|
std
::
unique_ptr
<
Surface
>
CreateRenderingSurface
()
override
;
...
...
shell/common/shell_test_platform_view_vulkan.cc
浏览文件 @
caebc93e
...
...
@@ -11,14 +11,11 @@ ShellTestPlatformViewVulkan::ShellTestPlatformViewVulkan(
PlatformView
::
Delegate
&
delegate
,
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
)
CreateVsyncWaiter
create_vsync_waiter
)
:
ShellTestPlatformView
(
delegate
,
std
::
move
(
task_runners
)),
create_vsync_waiter_
(
std
::
move
(
create_vsync_waiter
)),
vsync_clock_
(
vsync_clock
),
proc_table_
(
fml
::
MakeRefCounted
<
vulkan
::
VulkanProcTable
>
()),
shell_test_external_view_embedder_
(
shell_test_external_view_embedder
)
{}
proc_table_
(
fml
::
MakeRefCounted
<
vulkan
::
VulkanProcTable
>
())
{}
ShellTestPlatformViewVulkan
::~
ShellTestPlatformViewVulkan
()
=
default
;
...
...
@@ -32,8 +29,7 @@ void ShellTestPlatformViewVulkan::SimulateVSync() {
// |PlatformView|
std
::
unique_ptr
<
Surface
>
ShellTestPlatformViewVulkan
::
CreateRenderingSurface
()
{
return
std
::
make_unique
<
OffScreenSurface
>
(
proc_table_
,
shell_test_external_view_embedder_
);
return
std
::
make_unique
<
OffScreenSurface
>
(
proc_table_
);
}
// |PlatformView|
...
...
@@ -48,12 +44,8 @@ PointerDataDispatcherMaker ShellTestPlatformViewVulkan::GetDispatcherMaker() {
// We need to merge this functionality back into //vulkan.
// https://github.com/flutter/flutter/issues/51132
ShellTestPlatformViewVulkan
::
OffScreenSurface
::
OffScreenSurface
(
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
vk
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
)
:
valid_
(
false
),
vk_
(
std
::
move
(
vk
)),
shell_test_external_view_embedder_
(
shell_test_external_view_embedder
)
{
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
vk
)
:
valid_
(
false
),
vk_
(
std
::
move
(
vk
))
{
if
(
!
vk_
||
!
vk_
->
HasAcquiredMandatoryProcAddresses
())
{
FML_DLOG
(
ERROR
)
<<
"Proc table has not acquired mandatory proc addresses."
;
return
;
...
...
@@ -178,10 +170,5 @@ SkMatrix ShellTestPlatformViewVulkan::OffScreenSurface::GetRootTransformation()
return
matrix
;
}
flutter
::
ExternalViewEmbedder
*
ShellTestPlatformViewVulkan
::
OffScreenSurface
::
GetExternalViewEmbedder
()
{
return
shell_test_external_view_embedder_
.
get
();
}
}
// namespace testing
}
// namespace flutter
shell/common/shell_test_platform_view_vulkan.h
浏览文件 @
caebc93e
...
...
@@ -5,7 +5,6 @@
#ifndef FLUTTER_SHELL_COMMON_SHELL_TEST_PLATFORM_VIEW_VULKAN_H_
#define FLUTTER_SHELL_COMMON_SHELL_TEST_PLATFORM_VIEW_VULKAN_H_
#include "flutter/shell/common/shell_test_external_view_embedder.h"
#include "flutter/shell/common/shell_test_platform_view.h"
#include "flutter/shell/gpu/gpu_surface_vulkan_delegate.h"
#include "flutter/vulkan/vulkan_application.h"
...
...
@@ -19,9 +18,7 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
ShellTestPlatformViewVulkan
(
PlatformView
::
Delegate
&
delegate
,
TaskRunners
task_runners
,
std
::
shared_ptr
<
ShellTestVsyncClock
>
vsync_clock
,
CreateVsyncWaiter
create_vsync_waiter
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
);
CreateVsyncWaiter
create_vsync_waiter
);
~
ShellTestPlatformViewVulkan
()
override
;
...
...
@@ -30,9 +27,7 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
private:
class
OffScreenSurface
:
public
flutter
::
Surface
{
public:
OffScreenSurface
(
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
vk
,
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder
);
OffScreenSurface
(
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
vk
);
~
OffScreenSurface
()
override
;
...
...
@@ -47,13 +42,9 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
// |Surface|
GrContext
*
GetContext
()
override
;
flutter
::
ExternalViewEmbedder
*
GetExternalViewEmbedder
()
override
;
private:
bool
valid_
;
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
vk_
;
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder_
;
std
::
unique_ptr
<
vulkan
::
VulkanApplication
>
application_
;
std
::
unique_ptr
<
vulkan
::
VulkanDevice
>
logical_device_
;
sk_sp
<
GrContext
>
context_
;
...
...
@@ -70,9 +61,6 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
fml
::
RefPtr
<
vulkan
::
VulkanProcTable
>
proc_table_
;
std
::
shared_ptr
<
ShellTestExternalViewEmbedder
>
shell_test_external_view_embedder_
;
// |PlatformView|
std
::
unique_ptr
<
Surface
>
CreateRenderingSurface
()
override
;
...
...
shell/common/shell_unittests.cc
浏览文件 @
caebc93e
...
...
@@ -23,7 +23,6 @@
#include "flutter/shell/common/platform_view.h"
#include "flutter/shell/common/rasterizer.h"
#include "flutter/shell/common/shell_test.h"
#include "flutter/shell/common/shell_test_external_view_embedder.h"
#include "flutter/shell/common/shell_test_platform_view.h"
#include "flutter/shell/common/switches.h"
#include "flutter/shell/common/thread_host.h"
...
...
@@ -140,7 +139,7 @@ TEST_F(ShellTest,
return
static_cast
<
std
::
unique_ptr
<
VsyncWaiter
>>
(
std
::
make_unique
<
VsyncWaiterFallback
>
(
task_runners
));
},
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
,
nullptr
);
ShellTestPlatformView
::
BackendType
::
kDefaultBackend
);
},
[](
Shell
&
shell
)
{
return
std
::
make_unique
<
Rasterizer
>
(
shell
,
shell
.
GetTaskRunners
());
...
...
@@ -467,51 +466,6 @@ TEST_F(ShellTest, FrameRasterizedCallbackIsCalled) {
DestroyShell
(
std
::
move
(
shell
));
}
TEST_F
(
ShellTest
,
ExternalEmbedderEndFrameIsCalledWhenPostPrerollResultIsResubmit
)
{
auto
settings
=
CreateSettingsForFixture
();
fml
::
AutoResetWaitableEvent
endFrameLatch
;
bool
end_frame_called
=
false
;
auto
end_frame_callback
=
[
&
]
{
end_frame_called
=
true
;
endFrameLatch
.
Signal
();
};
auto
external_view_embedder
=
std
::
make_shared
<
ShellTestExternalViewEmbedder
>
(
end_frame_callback
,
PostPrerollResult
::
kResubmitFrame
);
auto
shell
=
CreateShell
(
std
::
move
(
settings
),
GetTaskRunnersForFixture
(),
false
,
external_view_embedder
);
// Create the surface needed by rasterizer
PlatformViewNotifyCreated
(
shell
.
get
());
auto
configuration
=
RunConfiguration
::
InferFromSettings
(
settings
);
configuration
.
SetEntrypoint
(
"emptyMain"
);
RunEngine
(
shell
.
get
(),
std
::
move
(
configuration
));
LayerTreeBuilder
builder
=
[
&
](
std
::
shared_ptr
<
ContainerLayer
>
root
)
{
SkPictureRecorder
recorder
;
SkCanvas
*
recording_canvas
=
recorder
.
beginRecording
(
SkRect
::
MakeXYWH
(
0
,
0
,
80
,
80
));
recording_canvas
->
drawRect
(
SkRect
::
MakeXYWH
(
0
,
0
,
80
,
80
),
SkPaint
(
SkColor4f
::
FromColor
(
SK_ColorRED
)));
auto
sk_picture
=
recorder
.
finishRecordingAsPicture
();
fml
::
RefPtr
<
SkiaUnrefQueue
>
queue
=
fml
::
MakeRefCounted
<
SkiaUnrefQueue
>
(
this
->
GetCurrentTaskRunner
(),
fml
::
TimeDelta
::
FromSeconds
(
0
));
auto
picture_layer
=
std
::
make_shared
<
PictureLayer
>
(
SkPoint
::
Make
(
10
,
10
),
flutter
::
SkiaGPUObject
<
SkPicture
>
({
sk_picture
,
queue
}),
false
,
false
);
root
->
Add
(
picture_layer
);
};
PumpOneFrame
(
shell
.
get
(),
100
,
100
,
builder
);
endFrameLatch
.
Wait
();
ASSERT_TRUE
(
end_frame_called
);
DestroyShell
(
std
::
move
(
shell
));
}
TEST
(
SettingsTest
,
FrameTimingSetsAndGetsProperly
)
{
// Ensure that all phases are in kPhases.
ASSERT_EQ
(
sizeof
(
FrameTiming
::
kPhases
),
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm
浏览文件 @
caebc93e
...
...
@@ -248,7 +248,7 @@ void FlutterPlatformViewsController::SetFrameSize(SkISize frame_size) {
}
void
FlutterPlatformViewsController
::
CancelFrame
()
{
composition_order_
=
active_composition_order_
;
composition_order_
.
clear
()
;
}
bool
FlutterPlatformViewsController
::
HasPendingViewOperations
()
{
...
...
@@ -267,9 +267,8 @@ PostPrerollResult FlutterPlatformViewsController::PostPrerollAction(
if
(
raster_thread_merger
->
IsMerged
())
{
raster_thread_merger
->
ExtendLeaseTo
(
kDefaultMergedLeaseDuration
);
}
else
{
// Wait until |EndFrame| to merge the threads.
merge_threads_
=
true
;
CancelFrame
();
raster_thread_merger
->
MergeWithLease
(
kDefaultMergedLeaseDuration
);
return
PostPrerollResult
::
kResubmitFrame
;
}
}
...
...
@@ -469,21 +468,6 @@ SkRect FlutterPlatformViewsController::GetPlatformViewRect(int view_id) {
bool
FlutterPlatformViewsController
::
SubmitFrame
(
GrContext
*
gr_context
,
std
::
shared_ptr
<
IOSContext
>
ios_context
,
SkCanvas
*
background_canvas
)
{
if
(
merge_threads_
)
{
// Threads are about to be merged, we drop everything from this frame
// and possibly resubmit the same layer tree in the next frame.
// Before merging thread, we know the code is not running on the main thread. Assert that
FML_DCHECK
(
!
[[
NSThread
currentThread
]
isMainThread
]);
picture_recorders_
.
clear
();
composition_order_
.
clear
();
return
true
;
}
// Any UIKit related code has to run on main thread.
// When on a non-main thread, we only allow the rest of the method to run if there is no platform
// view.
FML_DCHECK
([[
NSThread
currentThread
]
isMainThread
]
||
views_to_dispose_
.
empty
());
DisposeViews
();
// Resolve all pending GPU operations before allocating a new surface.
...
...
@@ -594,14 +578,6 @@ void FlutterPlatformViewsController::BringLayersIntoView(LayersMap layer_map) {
}
}
void
FlutterPlatformViewsController
::
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
if
(
merge_threads_
)
{
raster_thread_merger
->
MergeWithLease
(
kDefaultMergedLeaseDuration
);
merge_threads_
=
false
;
}
}
std
::
shared_ptr
<
FlutterPlatformViewLayer
>
FlutterPlatformViewsController
::
GetLayer
(
GrContext
*
gr_context
,
std
::
shared_ptr
<
IOSContext
>
ios_context
,
...
...
@@ -666,8 +642,6 @@ void FlutterPlatformViewsController::DisposeViews() {
return
;
}
FML_DCHECK
([[
NSThread
currentThread
]
isMainThread
]);
for
(
int64_t
viewId
:
views_to_dispose_
)
{
UIView
*
root_view
=
root_views_
[
viewId
].
get
();
[
root_view
removeFromSuperview
];
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h
浏览文件 @
caebc93e
...
...
@@ -134,8 +134,6 @@ class FlutterPlatformViewsController {
void
SetFrameSize
(
SkISize
frame_size
);
// Indicates that we don't compisite any platform views or overlays during this frame.
// Also reverts the composition_order_ to its original state at the begining of the frame.
void
CancelFrame
();
void
PrerollCompositeEmbeddedView
(
int
view_id
,
...
...
@@ -165,11 +163,6 @@ class FlutterPlatformViewsController {
std
::
shared_ptr
<
IOSContext
>
ios_context
,
SkCanvas
*
background_canvas
);
// Invoked at the very end of a frame.
// After invoking this method, nothing should happen on the current TaskRunner during the same
// frame.
void
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
);
void
OnMethodCall
(
FlutterMethodCall
*
call
,
FlutterResult
&
result
);
private:
...
...
@@ -280,10 +273,6 @@ class FlutterPlatformViewsController {
void
ApplyMutators
(
const
MutatorsStack
&
mutators_stack
,
UIView
*
embedded_view
);
void
CompositeWithParams
(
int
view_id
,
const
EmbeddedViewParams
&
params
);
// Default to `false`.
// If `true`, gpu thread and platform thread should be merged during |EndFrame|.
// Always resets to `false` right after the threads are merged.
bool
merge_threads_
;
// Allocates a new FlutterPlatformViewLayer if needed, draws the pixels within the rect from
// the picture on the layer's canvas.
std
::
shared_ptr
<
FlutterPlatformViewLayer
>
GetLayer
(
GrContext
*
gr_context
,
...
...
@@ -293,7 +282,6 @@ class FlutterPlatformViewsController {
int64_t
view_id
,
int64_t
overlay_id
);
// Removes overlay views and platform views that aren't needed in the current frame.
// Must run on the platform thread.
void
RemoveUnusedLayers
();
// Appends the overlay views and platform view and sets their z index based on the composition
// order.
...
...
shell/platform/darwin/ios/ios_surface.h
浏览文件 @
caebc93e
...
...
@@ -83,9 +83,6 @@ class IOSSurface : public ExternalViewEmbedder {
// |ExternalViewEmbedder|
void
FinishFrame
()
override
;
// |ExternalViewEmbedder|
void
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
override
;
public:
FML_DISALLOW_COPY_AND_ASSIGN
(
IOSSurface
);
};
...
...
shell/platform/darwin/ios/ios_surface.mm
浏览文件 @
caebc93e
...
...
@@ -90,12 +90,7 @@ void IOSSurface::CancelFrame() {
platform_views_controller_
->
CancelFrame
();
// Committing the current transaction as |BeginFrame| will create a nested
// CATransaction otherwise.
if
([[
NSThread
currentThread
]
isMainThread
])
{
// The only time we need to commit the `CATranscation` is when
// there are platform views in the scene, which has to be run on the
// main thread.
[
CATransaction
commit
];
}
[
CATransaction
commit
];
}
// |ExternalViewEmbedder|
...
...
@@ -103,12 +98,7 @@ void IOSSurface::BeginFrame(SkISize frame_size, GrContext* context, double devic
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::BeginFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
platform_views_controller_
->
SetFrameSize
(
frame_size
);
if
([[
NSThread
currentThread
]
isMainThread
])
{
// The only time we need to commit the `CATranscation` is when
// there are platform views in the scene, which has to be run on the
// main thread.
[
CATransaction
begin
];
}
[
CATransaction
begin
];
}
// |ExternalViewEmbedder|
...
...
@@ -150,22 +140,10 @@ bool IOSSurface::SubmitFrame(GrContext* context, SkCanvas* background_canvas) {
return
submitted
;
}
// |ExternalViewEmbedder|
void
IOSSurface
::
EndFrame
(
fml
::
RefPtr
<
fml
::
RasterThreadMerger
>
raster_thread_merger
)
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::EndFrame"
);
FML_CHECK
(
platform_views_controller_
!=
nullptr
);
return
platform_views_controller_
->
EndFrame
(
raster_thread_merger
);
}
// |ExternalViewEmbedder|
void
IOSSurface
::
FinishFrame
()
{
TRACE_EVENT0
(
"flutter"
,
"IOSSurface::DidSubmitFrame"
);
if
(
!
[[
NSThread
currentThread
]
isMainThread
])
{
return
;
}
// The only time we need to commit the `CATranscation` is when
// there are platform views in the scene, which has to be run on the
// main thread.
[
CATransaction
commit
];
}
}
// namespace flutter
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录