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

#include <display_list_layer.h>

Inheritance diagram for flutter::DisplayListLayer:
flutter::Layer

Public Member Functions

 DisplayListLayer (const DlPoint &offset, sk_sp< DisplayList > display_list, bool is_complex, bool will_change)
 
DisplayListdisplay_list () const
 
bool IsReplacing (DiffContext *context, const Layer *layer) const override
 
void Diff (DiffContext *context, const Layer *old_layer) override
 
const DisplayListLayeras_display_list_layer () const override
 
void Preroll (PrerollContext *frame) override
 
void Paint (PaintContext &context) const override
 
const DisplayListRasterCacheItemraster_cache_item () const
 
RasterCacheKeyID caching_key_id () const override
 
- Public Member Functions inherited from flutter::Layer
 Layer ()
 
virtual ~Layer ()
 
void AssignOldLayer (Layer *old_layer)
 
virtual void PreservePaintRegion (DiffContext *context)
 
virtual void PaintChildren (PaintContext &context) const
 
bool subtree_has_platform_view () const
 
void set_subtree_has_platform_view (bool value)
 
const DlRectpaint_bounds () const
 
void set_paint_bounds (const DlRect &paint_bounds)
 
bool is_empty () const
 
bool needs_painting (PaintContext &context) const
 
uint64_t original_layer_id () const
 
uint64_t unique_id () const
 
virtual const ContainerLayeras_container_layer () const
 
virtual const TextureLayeras_texture_layer () const
 
virtual const PerformanceOverlayLayeras_performance_overlay_layer () const
 
virtual const testing::MockLayeras_mock_layer () const
 

Static Public Attributes

static constexpr size_t kMaxBytesToCompare = 10000
 
- Static Public Attributes inherited from flutter::Layer
static constexpr int kSaveLayerRenderFlags
 
static constexpr int kRasterCacheRenderFlags
 

Detailed Description

Definition at line 18 of file display_list_layer.h.

Constructor & Destructor Documentation

◆ DisplayListLayer()

flutter::DisplayListLayer::DisplayListLayer ( const DlPoint offset,
sk_sp< DisplayList display_list,
bool  is_complex,
bool  will_change 
)

Definition at line 17 of file display_list_layer.cc.

21 : offset_(offset), display_list_(std::move(display_list)) {
22 if (display_list_) {
23 bounds_ = display_list_->GetBounds().Shift(offset_.x, offset_.y);
24#if !SLIMPELLER
25 display_list_raster_cache_item_ = DisplayListRasterCacheItem::Make(
26 display_list_, ToSkPoint(offset_), is_complex, will_change);
27#endif // !SLIMPELLER
28 }
29}
DisplayList * display_list() const
static std::unique_ptr< DisplayListRasterCacheItem > Make(const sk_sp< DisplayList > &, const SkPoint &offset, bool is_complex, bool will_change)
const SkPoint & ToSkPoint(const DlPoint &point)

References flutter::DisplayListRasterCacheItem::Make(), flutter::ToSkPoint(), impeller::TPoint< T >::x, and impeller::TPoint< T >::y.

Member Function Documentation

◆ as_display_list_layer()

const DisplayListLayer * flutter::DisplayListLayer::as_display_list_layer ( ) const
inlineoverridevirtual

Reimplemented from flutter::Layer.

Definition at line 33 of file display_list_layer.h.

33 {
34 return this;
35 }

◆ caching_key_id()

RasterCacheKeyID flutter::DisplayListLayer::caching_key_id ( ) const
inlineoverridevirtual

Reimplemented from flutter::Layer.

Definition at line 46 of file display_list_layer.h.

46 {
47 return RasterCacheKeyID(display_list()->unique_id(),
49 }
uint64_t unique_id() const
Definition layer.h:237

References display_list(), flutter::kDisplayList, and flutter::Layer::unique_id().

◆ Diff()

void flutter::DisplayListLayer::Diff ( DiffContext context,
const Layer old_layer 
)
overridevirtual

Reimplemented from flutter::Layer.

Definition at line 41 of file display_list_layer.cc.

41 {
42 DiffContext::AutoSubtreeRestore subtree(context);
43 if (!context->IsSubtreeDirty()) {
44#ifndef NDEBUG
45 FML_DCHECK(old_layer);
46 auto prev = old_layer->as_display_list_layer();
47 DiffContext::Statistics dummy_statistics;
48 // IsReplacing has already determined that the display list is same
49 FML_DCHECK(prev->offset_ == offset_ &&
50 Compare(dummy_statistics, this, prev));
51#endif
52 }
53 context->PushTransform(DlMatrix::MakeTranslation(offset_));
54 if (context->has_raster_cache()) {
55 context->WillPaintWithIntegralTransform();
56 }
57 context->AddLayerBounds(display_list()->GetBounds());
58 context->SetLayerPaintRegion(this, context->CurrentSubtreeRegion());
59}
#define FML_DCHECK(condition)
Definition logging.h:122
static constexpr Matrix MakeTranslation(const Vector3 &t)
Definition matrix.h:95

References flutter::DiffContext::AddLayerBounds(), flutter::Layer::as_display_list_layer(), flutter::DiffContext::CurrentSubtreeRegion(), display_list(), FML_DCHECK, flutter::DiffContext::has_raster_cache(), flutter::DiffContext::IsSubtreeDirty(), impeller::Matrix::MakeTranslation(), flutter::DiffContext::PushTransform(), flutter::DiffContext::SetLayerPaintRegion(), and flutter::DiffContext::WillPaintWithIntegralTransform().

◆ display_list()

DisplayList * flutter::DisplayListLayer::display_list ( ) const
inline

Definition at line 27 of file display_list_layer.h.

27{ return display_list_.get(); }

Referenced by caching_key_id(), Diff(), and Preroll().

◆ IsReplacing()

bool flutter::DisplayListLayer::IsReplacing ( DiffContext context,
const Layer layer 
) const
overridevirtual

Reimplemented from flutter::Layer.

Definition at line 31 of file display_list_layer.cc.

32 {
33 // Only return true for identical display lists; This way
34 // ContainerLayer::DiffChildren can detect when a display list layer
35 // got inserted between other display list layers
36 auto old_layer = layer->as_display_list_layer();
37 return old_layer != nullptr && offset_ == old_layer->offset_ &&
38 Compare(context->statistics(), this, old_layer);
39}

References flutter::Layer::as_display_list_layer(), and flutter::DiffContext::statistics().

◆ Paint()

void flutter::DisplayListLayer::Paint ( PaintContext context) const
overridevirtual

Implements flutter::Layer.

Definition at line 109 of file display_list_layer.cc.

109 {
110 FML_DCHECK(display_list_);
111 FML_DCHECK(needs_painting(context));
112
113 auto mutator = context.state_stack.save();
114 mutator.translate(offset_.x, offset_.y);
115
116#if !SLIMPELLER
117 if (context.raster_cache) {
118 // Always apply the integral transform in the presence of a raster cache
119 // whether or not we successfully draw from the cache
120 mutator.integralTransform();
121
122 if (display_list_raster_cache_item_) {
123 DlPaint paint;
124 if (display_list_raster_cache_item_->Draw(
125 context, context.state_stack.fill(paint))) {
126 TRACE_EVENT_INSTANT0("flutter", "raster cache hit");
127 return;
128 }
129 }
130 }
131#endif // !SLIMPELLER
132
133 DlScalar opacity = context.state_stack.outstanding_opacity();
134 context.canvas->DrawDisplayList(display_list_, opacity);
135}
bool needs_painting(PaintContext &context) const
Definition layer.h:218
impeller::Scalar DlScalar
flutter::DlPaint DlPaint
#define TRACE_EVENT_INSTANT0(category_group, name)

References flutter::PaintContext::canvas, flutter::DlCanvas::DrawDisplayList(), flutter::LayerStateStack::fill(), FML_DCHECK, flutter::Layer::needs_painting(), flutter::LayerStateStack::outstanding_opacity(), flutter::LayerStateStack::save(), flutter::PaintContext::state_stack, TRACE_EVENT_INSTANT0, flutter::LayerStateStack::MutatorContext::translate(), impeller::TPoint< T >::x, and impeller::TPoint< T >::y.

◆ Preroll()

void flutter::DisplayListLayer::Preroll ( PrerollContext frame)
overridevirtual

Implements flutter::Layer.

Definition at line 96 of file display_list_layer.cc.

96 {
97 DisplayList* disp_list = display_list();
98
99#if !SLIMPELLER
100 AutoCache cache = AutoCache(display_list_raster_cache_item_.get(), context,
101 context->state_stack.matrix());
102#endif // !SLIMPELLER
103 if (disp_list->can_apply_group_opacity()) {
104 context->renderable_state_flags = LayerStateStack::kCallerCanApplyOpacity;
105 }
106 set_paint_bounds(bounds_);
107}
void set_paint_bounds(const DlRect &paint_bounds)
Definition layer.h:209
static constexpr int kCallerCanApplyOpacity
flutter::DisplayList DisplayList

References flutter::DisplayList::can_apply_group_opacity(), display_list(), flutter::LayerStateStack::kCallerCanApplyOpacity, flutter::LayerStateStack::matrix(), flutter::PrerollContext::renderable_state_flags, flutter::Layer::set_paint_bounds(), and flutter::PrerollContext::state_stack.

◆ raster_cache_item()

const DisplayListRasterCacheItem * flutter::DisplayListLayer::raster_cache_item ( ) const
inline

Definition at line 42 of file display_list_layer.h.

42 {
43 return display_list_raster_cache_item_.get();
44 }

Member Data Documentation

◆ kMaxBytesToCompare

constexpr size_t flutter::DisplayListLayer::kMaxBytesToCompare = 10000
staticconstexpr

Definition at line 20 of file display_list_layer.h.


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