Flutter Engine
 
Loading...
Searching...
No Matches
flutter::SurfaceFrame Class Reference

#include <surface_frame.h>

Classes

struct  FramebufferInfo
 
struct  SubmitInfo
 

Public Types

using EncodeCallback = std::function< bool(SurfaceFrame &surface_frame, DlCanvas *canvas)>
 
using SubmitCallback = std::function< bool(SurfaceFrame &surface_frame)>
 

Public Member Functions

 SurfaceFrame (sk_sp< SkSurface > surface, FramebufferInfo framebuffer_info, const EncodeCallback &encode_callback, const SubmitCallback &submit_callback, DlISize frame_size, std::unique_ptr< GLContextResult > context_result=nullptr, bool display_list_fallback=false)
 
bool Encode ()
 
bool Submit ()
 
bool IsSubmitted () const
 
sk_sp< SkSurface > SkiaSurface () const
 
DlCanvasCanvas ()
 
const FramebufferInfoframebuffer_info () const
 
void set_submit_info (const SubmitInfo &submit_info)
 
const SubmitInfosubmit_info () const
 
sk_sp< DisplayListBuildDisplayList ()
 
void set_user_data (std::shared_ptr< impeller::Surface > data)
 
std::shared_ptr< impeller::Surfacetake_user_data ()
 

Detailed Description

Definition at line 27 of file surface_frame.h.

Member Typedef Documentation

◆ EncodeCallback

using flutter::SurfaceFrame::EncodeCallback = std::function<bool(SurfaceFrame& surface_frame, DlCanvas* canvas)>

Definition at line 29 of file surface_frame.h.

◆ SubmitCallback

using flutter::SurfaceFrame::SubmitCallback = std::function<bool(SurfaceFrame& surface_frame)>

Definition at line 31 of file surface_frame.h.

Constructor & Destructor Documentation

◆ SurfaceFrame()

flutter::SurfaceFrame::SurfaceFrame ( sk_sp< SkSurface >  surface,
FramebufferInfo  framebuffer_info,
const EncodeCallback encode_callback,
const SubmitCallback submit_callback,
DlISize  frame_size,
std::unique_ptr< GLContextResult context_result = nullptr,
bool  display_list_fallback = false 
)

Definition at line 18 of file surface_frame.cc.

25 : surface_(std::move(surface)),
26 framebuffer_info_(framebuffer_info),
27 encode_callback_(encode_callback),
28 submit_callback_(submit_callback),
29 context_result_(std::move(context_result)) {
30 FML_DCHECK(submit_callback_);
31 if (surface_) {
32#if !SLIMPELLER
33 adapter_.set_canvas(surface_->getCanvas());
34 canvas_ = &adapter_;
35#else // !SLIMPELLER
36 FML_LOG(FATAL) << "Impeller opt-out unavailable.";
37 return;
38#endif // !SLIMPELLER
39 } else if (display_list_fallback) {
40 FML_DCHECK(!frame_size.IsEmpty());
41 // The root frame of a surface will be filled by the layer_tree which
42 // performs branch culling so it will be unlikely to need an rtree for
43 // further culling during `DisplayList::Dispatch`. Further, this canvas
44 // will live underneath any platform views so we do not need to compute
45 // exact coverage to describe "pixel ownership" to the platform.
46 dl_builder_ = sk_make_sp<DisplayListBuilder>(DlRect::MakeSize(frame_size),
47 /*prepare_rtree=*/false);
48 canvas_ = dl_builder_.get();
49 }
50}
void set_canvas(SkCanvas *canvas)
const FramebufferInfo & framebuffer_info() const
#define FML_LOG(severity)
Definition logging.h:101
#define FML_DCHECK(condition)
Definition logging.h:122
static constexpr TRect MakeSize(const TSize< U > &size)
Definition rect.h:150

References FML_DCHECK, FML_LOG, impeller::TSize< T >::IsEmpty(), impeller::TRect< Scalar >::MakeSize(), flutter::DlSkCanvasAdapter::set_canvas(), and surface.

Member Function Documentation

◆ BuildDisplayList()

sk_sp< DisplayList > flutter::SurfaceFrame::BuildDisplayList ( )

Definition at line 114 of file surface_frame.cc.

114 {
115 TRACE_EVENT0("impeller", "SurfaceFrame::BuildDisplayList");
116 return dl_builder_ ? dl_builder_->Build() : nullptr;
117}
#define TRACE_EVENT0(category_group, name)

References TRACE_EVENT0.

◆ Canvas()

DlCanvas * flutter::SurfaceFrame::Canvas ( )

Definition at line 82 of file surface_frame.cc.

82 {
83 return canvas_;
84}

Referenced by flutter::TEST().

◆ Encode()

bool flutter::SurfaceFrame::Encode ( )

Definition at line 52 of file surface_frame.cc.

52 {
53 TRACE_EVENT0("flutter", "SurfaceFrame::Encode");
54 if (encoded_) {
55 return false;
56 }
57
58 encoded_ = PerformEncode();
59
60 return encoded_;
61}

References TRACE_EVENT0.

Referenced by Submit().

◆ framebuffer_info()

const FramebufferInfo & flutter::SurfaceFrame::framebuffer_info ( ) const
inline

Definition at line 120 of file surface_frame.h.

120{ return framebuffer_info_; }

◆ IsSubmitted()

bool flutter::SurfaceFrame::IsSubmitted ( ) const

Definition at line 78 of file surface_frame.cc.

78 {
79 return submitted_;
80}

◆ set_submit_info()

void flutter::SurfaceFrame::set_submit_info ( const SubmitInfo submit_info)
inline

Definition at line 122 of file surface_frame.h.

122 {
123 submit_info_ = submit_info;
124 }
const SubmitInfo & submit_info() const

References submit_info().

◆ set_user_data()

void flutter::SurfaceFrame::set_user_data ( std::shared_ptr< impeller::Surface data)
inline

Definition at line 129 of file surface_frame.h.

129 {
130 user_data_ = std::move(data);
131 }
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36

References flutter::data.

◆ SkiaSurface()

sk_sp< SkSurface > flutter::SurfaceFrame::SkiaSurface ( ) const

Definition at line 86 of file surface_frame.cc.

86 {
87 return surface_;
88}

◆ Submit()

bool flutter::SurfaceFrame::Submit ( )

Definition at line 63 of file surface_frame.cc.

63 {
64 TRACE_EVENT0("flutter", "SurfaceFrame::Submit");
65 if (!encoded_ && !Encode()) {
66 return false;
67 }
68
69 if (submitted_) {
70 return false;
71 }
72
73 submitted_ = PerformSubmit();
74
75 return submitted_;
76}

References Encode(), and TRACE_EVENT0.

◆ submit_info()

const SubmitInfo & flutter::SurfaceFrame::submit_info ( ) const
inline

Definition at line 125 of file surface_frame.h.

125{ return submit_info_; }

Referenced by set_submit_info(), flutter::TEST(), and flutter::TEST().

◆ take_user_data()

std::shared_ptr< impeller::Surface > flutter::SurfaceFrame::take_user_data ( )
inline

Definition at line 133 of file surface_frame.h.

133 {
134 return std::move(user_data_);
135 }

The documentation for this class was generated from the following files: