Flutter Engine
 
Loading...
Searching...
No Matches
flutter::CompositorContext::ScopedFrame Class Reference

#include <compositor_context.h>

Public Member Functions

 ScopedFrame (CompositorContext &context, GrDirectContext *gr_context, DlCanvas *canvas, ExternalViewEmbedder *view_embedder, const DlMatrix &root_surface_transformation, bool instrumentation_enabled, bool surface_supports_readback, fml::RefPtr< fml::RasterThreadMerger > raster_thread_merger, impeller::AiksContext *aiks_context)
 
virtual ~ScopedFrame ()
 
DlCanvascanvas ()
 
ExternalViewEmbedderview_embedder ()
 
CompositorContextcontext () const
 
const DlMatrixroot_surface_transformation () const
 
bool surface_supports_readback ()
 
GrDirectContext * gr_context () const
 
impeller::AiksContextaiks_context () const
 
virtual RasterStatus Raster (LayerTree &layer_tree, bool ignore_raster_cache, FrameDamage *frame_damage)
 

Detailed Description

Definition at line 107 of file compositor_context.h.

Constructor & Destructor Documentation

◆ ScopedFrame()

flutter::CompositorContext::ScopedFrame::ScopedFrame ( CompositorContext context,
GrDirectContext *  gr_context,
DlCanvas canvas,
ExternalViewEmbedder view_embedder,
const DlMatrix root_surface_transformation,
bool  instrumentation_enabled,
bool  surface_supports_readback,
fml::RefPtr< fml::RasterThreadMerger raster_thread_merger,
impeller::AiksContext aiks_context 
)

Definition at line 88 of file compositor_context.cc.

98 : context_(context),
99 gr_context_(gr_context),
100 canvas_(canvas),
101 aiks_context_(aiks_context),
102 view_embedder_(view_embedder),
103 root_surface_transformation_(root_surface_transformation),
104 instrumentation_enabled_(instrumentation_enabled),
105 surface_supports_readback_(surface_supports_readback),
106 raster_thread_merger_(std::move(raster_thread_merger)) {
107 context_.BeginFrame(*this, instrumentation_enabled_);
108}
impeller::AiksContext * aiks_context() const
const DlMatrix & root_surface_transformation() const

◆ ~ScopedFrame()

flutter::CompositorContext::ScopedFrame::~ScopedFrame ( )
virtual

Definition at line 110 of file compositor_context.cc.

110 {
111 context_.EndFrame(*this, instrumentation_enabled_);
112}

Member Function Documentation

◆ aiks_context()

impeller::AiksContext * flutter::CompositorContext::ScopedFrame::aiks_context ( ) const
inline

Definition at line 135 of file compositor_context.h.

135{ return aiks_context_; }

Referenced by flutter::LayerTree::Paint().

◆ canvas()

DlCanvas * flutter::CompositorContext::ScopedFrame::canvas ( )
inline

Definition at line 121 of file compositor_context.h.

121{ return canvas_; }

Referenced by flutter::LayerTree::Paint(), and flutter::LayerTree::Preroll().

◆ context()

CompositorContext & flutter::CompositorContext::ScopedFrame::context ( ) const
inline

Definition at line 125 of file compositor_context.h.

125{ return context_; }

Referenced by flutter::LayerTree::Paint(), and flutter::LayerTree::Preroll().

◆ gr_context()

GrDirectContext * flutter::CompositorContext::ScopedFrame::gr_context ( ) const
inline

Definition at line 133 of file compositor_context.h.

133{ return gr_context_; }

Referenced by flutter::LayerTree::Paint(), and flutter::LayerTree::Preroll().

◆ Raster()

RasterStatus flutter::CompositorContext::ScopedFrame::Raster ( flutter::LayerTree layer_tree,
bool  ignore_raster_cache,
FrameDamage frame_damage 
)
virtual

Definition at line 114 of file compositor_context.cc.

117 {
118 TRACE_EVENT0("flutter", "CompositorContext::ScopedFrame::Raster");
119
120 std::optional<DlRect> clip_rect;
121 if (frame_damage) {
122 clip_rect = frame_damage->ComputeClipRect(layer_tree, !ignore_raster_cache,
123 !gr_context_);
124
125 if (aiks_context_ &&
126 !ShouldPerformPartialRepaint(clip_rect, layer_tree.frame_size())) {
127 clip_rect = std::nullopt;
128 frame_damage->Reset();
129 }
130 }
131
132 bool root_needs_readback = layer_tree.Preroll(
133 *this, ignore_raster_cache, clip_rect ? *clip_rect : kGiantRect);
134 bool needs_save_layer = root_needs_readback && !surface_supports_readback();
136 if (view_embedder_ && raster_thread_merger_) {
137 post_preroll_result =
138 view_embedder_->PostPrerollAction(raster_thread_merger_);
139 }
140
141 if (post_preroll_result == PostPrerollResult::kResubmitFrame) {
143 }
144 if (post_preroll_result == PostPrerollResult::kSkipAndRetryFrame) {
146 }
147
148 if (aiks_context_) {
149 PaintLayerTreeImpeller(layer_tree, clip_rect, ignore_raster_cache);
150 } else {
151 PaintLayerTreeSkia(layer_tree, clip_rect, needs_save_layer,
152 ignore_raster_cache);
153 }
155}
virtual PostPrerollResult PostPrerollAction(const fml::RefPtr< fml::RasterThreadMerger > &raster_thread_merger)
const DlISize & frame_size() const
Definition layer_tree.h:54
bool Preroll(CompositorContext::ScopedFrame &frame, bool ignore_raster_cache=false, DlRect cull_rect=kGiantRect)
Definition layer_tree.cc:28
static constexpr DlRect kGiantRect
Definition layer.h:40
#define TRACE_EVENT0(category_group, name)

References flutter::FrameDamage::ComputeClipRect(), flutter::LayerTree::frame_size(), flutter::kGiantRect, flutter::kResubmit, flutter::kResubmitFrame, flutter::kSkipAndRetry, flutter::kSkipAndRetryFrame, flutter::kSuccess, flutter::LayerTree::Preroll(), flutter::FrameDamage::Reset(), and TRACE_EVENT0.

◆ root_surface_transformation()

const DlMatrix & flutter::CompositorContext::ScopedFrame::root_surface_transformation ( ) const
inline

Definition at line 127 of file compositor_context.h.

127 {
128 return root_surface_transformation_;
129 }

Referenced by flutter::LayerTree::Preroll().

◆ surface_supports_readback()

bool flutter::CompositorContext::ScopedFrame::surface_supports_readback ( )
inline

Definition at line 131 of file compositor_context.h.

131{ return surface_supports_readback_; }

◆ view_embedder()

ExternalViewEmbedder * flutter::CompositorContext::ScopedFrame::view_embedder ( )
inline

Definition at line 123 of file compositor_context.h.

123{ return view_embedder_; }

Referenced by flutter::LayerTree::Paint(), and flutter::LayerTree::Preroll().


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