Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
shell_test_platform_view_gl.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7#include <utility>
8
9#include <EGL/egl.h>
10
13#include "impeller/entity/gles/entity_shaders_gles.h"
14
15namespace flutter {
16namespace testing {
17
18static std::vector<std::shared_ptr<fml::Mapping>> ShaderLibraryMappings() {
19 return {
20 std::make_shared<fml::NonOwnedMapping>(
21 impeller_entity_shaders_gles_data,
22 impeller_entity_shaders_gles_length),
23 };
24}
25
26std::unique_ptr<ShellTestPlatformView> ShellTestPlatformView::CreateGL(
27 PlatformView::Delegate& delegate,
28 const TaskRunners& task_runners,
29 const std::shared_ptr<ShellTestVsyncClock>& vsync_clock,
30 const CreateVsyncWaiter& create_vsync_waiter,
31 const std::shared_ptr<ShellTestExternalViewEmbedder>&
32 shell_test_external_view_embedder,
33 const std::shared_ptr<const fml::SyncSwitch>& is_gpu_disabled_sync_switch) {
34 return std::make_unique<ShellTestPlatformViewGL>(
35 delegate, task_runners, vsync_clock, create_vsync_waiter,
36 shell_test_external_view_embedder);
37}
38
40 PlatformView::Delegate& delegate,
41 const TaskRunners& task_runners,
42 std::shared_ptr<ShellTestVsyncClock> vsync_clock,
43 CreateVsyncWaiter create_vsync_waiter,
44 std::shared_ptr<ShellTestExternalViewEmbedder>
45 shell_test_external_view_embedder)
46 : ShellTestPlatformView(delegate, task_runners),
47 gl_surface_(DlISize(800, 600)),
48 create_vsync_waiter_(std::move(create_vsync_waiter)),
49 vsync_clock_(std::move(vsync_clock)),
50 shell_test_external_view_embedder_(
51 std::move(shell_test_external_view_embedder)) {
52 if (GetSettings().enable_impeller) {
53 auto resolver = [](const char* name) -> void* {
54 return reinterpret_cast<void*>(::eglGetProcAddress(name));
55 };
56 // ANGLE needs this to initialize version strings checked by
57 // impeller::ProcTableGLES.
58 gl_surface_.MakeCurrent();
59 auto gl = std::make_unique<impeller::ProcTableGLES>(resolver);
60 if (!gl->IsValid()) {
61 FML_LOG(ERROR) << "Proc table when a shell unittests invalid.";
62 return;
63 }
64 impeller_context_ = impeller::ContextGLES::Create(
65 impeller::Flags{}, std::move(gl), ShaderLibraryMappings(), true,
66 std::make_shared<fml::WrapperBasicTaskRunner>(
67 task_runners.GetIOTaskRunner()));
68 }
69}
70
72
73std::unique_ptr<VsyncWaiter> ShellTestPlatformViewGL::CreateVSyncWaiter() {
74 return create_vsync_waiter_();
75}
76
77// |ShellTestPlatformView|
79 vsync_clock_->SimulateVSync();
80}
81
82// |PlatformView|
83std::unique_ptr<Surface> ShellTestPlatformViewGL::CreateRenderingSurface() {
84 return std::make_unique<GPUSurfaceGLSkia>(this, true);
85}
86
87// |PlatformView|
88std::shared_ptr<ExternalViewEmbedder>
89ShellTestPlatformViewGL::CreateExternalViewEmbedder() {
90 return shell_test_external_view_embedder_;
91}
92
93// |PlatformView|
94PointerDataDispatcherMaker ShellTestPlatformViewGL::GetDispatcherMaker() {
95 return [](DefaultPointerDataDispatcher::Delegate& delegate) {
96 return std::make_unique<SmoothPointerDataDispatcher>(delegate);
97 };
98}
99
100// |GPUSurfaceGLDelegate|
101std::unique_ptr<GLContextResult>
102ShellTestPlatformViewGL::GLContextMakeCurrent() {
103 return std::make_unique<GLContextDefaultResult>(gl_surface_.MakeCurrent());
104}
105
106// |GPUSurfaceGLDelegate|
107bool ShellTestPlatformViewGL::GLContextClearCurrent() {
108 return gl_surface_.ClearCurrent();
109}
110
111// |GPUSurfaceGLDelegate|
112bool ShellTestPlatformViewGL::GLContextPresent(
113 const GLPresentInfo& present_info) {
114 return gl_surface_.Present();
115}
116
117// |GPUSurfaceGLDelegate|
118GLFBOInfo ShellTestPlatformViewGL::GLContextFBO(GLFrameInfo frame_info) const {
119 return GLFBOInfo{
120 .fbo_id = gl_surface_.GetFramebuffer(frame_info.width, frame_info.height),
121 };
122}
123
124// |GPUSurfaceGLDelegate|
126ShellTestPlatformViewGL::GetGLProcResolver() const {
127 return [surface = &gl_surface_](const char* name) -> void* {
128 return surface->GetProcAddress(name);
129 };
130}
131
132} // namespace testing
133} // namespace flutter
std::function< void *(const char *)> GLProcResolver
Used to forward events from the platform view to interested subsystems. This forwarding is done by th...
const Settings & GetSettings() const
Get the settings for this platform view instance.
fml::RefPtr< fml::TaskRunner > GetIOTaskRunner() const
ShellTestPlatformViewGL(PlatformView::Delegate &delegate, const TaskRunners &task_runners, std::shared_ptr< ShellTestVsyncClock > vsync_clock, CreateVsyncWaiter create_vsync_waiter, std::shared_ptr< ShellTestExternalViewEmbedder > shell_test_external_view_embedder)
static std::unique_ptr< ShellTestPlatformView > CreateGL(PlatformView::Delegate &delegate, const TaskRunners &task_runners, const std::shared_ptr< ShellTestVsyncClock > &vsync_clock, const CreateVsyncWaiter &create_vsync_waiter, const std::shared_ptr< ShellTestExternalViewEmbedder > &shell_test_external_view_embedder, const std::shared_ptr< const fml::SyncSwitch > &is_gpu_disabled_sync_switch)
uint32_t GetFramebuffer(uint32_t width, uint32_t height) const
static std::shared_ptr< ContextGLES > Create(const Flags &flags, std::unique_ptr< ProcTableGLES > gl, const std::vector< std::shared_ptr< fml::Mapping > > &shader_libraries, bool enable_gpu_tracing, std::shared_ptr< fml::BasicTaskRunner > io_task_runner=nullptr)
VkSurfaceKHR surface
Definition main.cc:65
#define FML_LOG(severity)
Definition logging.h:101
static std::vector< std::shared_ptr< fml::Mapping > > ShaderLibraryMappings()
std::function< std::unique_ptr< VsyncWaiter >()> CreateVsyncWaiter
std::function< std::unique_ptr< PointerDataDispatcher >(PointerDataDispatcher::Delegate &)> PointerDataDispatcherMaker
Signature for constructing PointerDataDispatcher.
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27
Definition ref_ptr.h:261