Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter::DisplayListBuilder Class Referencefinal

#include <dl_builder.h>

Inheritance diagram for flutter::DisplayListBuilder:
flutter::DlCanvas flutter::DlOpReceiver flutter::DisplayListOpFlags

Public Member Functions

 DisplayListBuilder (bool prepare_rtree)
 
 DisplayListBuilder (const DlRect &cull_rect=kMaxCullRect, bool prepare_rtree=false)
 
 DisplayListBuilder (DlScalar width, DlScalar height)
 
 ~DisplayListBuilder ()
 
DlISize GetBaseLayerDimensions () const override
 
SkImageInfo GetImageInfo () const override
 
size_t GetRecordCount () const
 Return the number of records currently recorded in the builder.
 
bool IsEmpty () const
 Return true if the builder has not yet recorded any commands.
 
void Save () override
 
void SaveLayer (const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override
 
void Restore () override
 
int GetSaveCount () const override
 
void RestoreToCount (int restore_count) override
 
void Translate (DlScalar tx, DlScalar ty) override
 
void Scale (DlScalar sx, DlScalar sy) override
 
void Rotate (DlScalar degrees) override
 
void Skew (DlScalar sx, DlScalar sy) override
 
void Transform2DAffine (DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) override
 
void TransformFullPerspective (DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt) override
 
void TransformReset () override
 
void Transform (const DlMatrix &matrix) override
 
void SetTransform (const DlMatrix &matrix) override
 
DlMatrix GetMatrix () const override
 
void ClipRect (const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
 
void ClipOval (const DlRect &bounds, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
 
void ClipRoundRect (const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
 
void ClipRoundSuperellipse (const DlRoundSuperellipse &rse, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
 
void ClipPath (const DlPath &path, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
 
DlRect GetDestinationClipCoverage () const override
 
DlRect GetLocalClipCoverage () const override
 
bool QuickReject (const DlRect &bounds) const override
 
void DrawPaint (const DlPaint &paint) override
 
void DrawColor (DlColor color, DlBlendMode mode) override
 
void DrawLine (const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
 
void DrawDashedLine (const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length, const DlPaint &paint) override
 
void DrawRect (const DlRect &rect, const DlPaint &paint) override
 
void DrawOval (const DlRect &bounds, const DlPaint &paint) override
 
void DrawCircle (const DlPoint &center, DlScalar radius, const DlPaint &paint) override
 
void DrawRoundRect (const DlRoundRect &rrect, const DlPaint &paint) override
 
void DrawDiffRoundRect (const DlRoundRect &outer, const DlRoundRect &inner, const DlPaint &paint) override
 
void DrawRoundSuperellipse (const DlRoundSuperellipse &rse, const DlPaint &paint) override
 
void DrawPath (const DlPath &path, const DlPaint &paint) override
 
void DrawArc (const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter, const DlPaint &paint) override
 
void DrawPoints (DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint) override
 
void DrawVertices (const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode, const DlPaint &paint) override
 
void DrawImage (const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
 
void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override
 
void DrawImageNine (const sk_sp< DlImage > &image, const DlIRect &center, const DlRect &dst, DlFilterMode filter, const DlPaint *paint=nullptr) override
 
void DrawAtlas (const sk_sp< DlImage > &atlas, const DlRSTransform xform[], const DlRect tex[], const DlColor colors[], int count, DlBlendMode mode, DlImageSampling sampling, const DlRect *cullRect, const DlPaint *paint=nullptr) override
 
void DrawDisplayList (const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1) override
 
void DrawText (const std::shared_ptr< DlText > &text, DlScalar x, DlScalar y, const DlPaint &paint) override
 
void DrawShadow (const DlPath &path, const DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr) override
 Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for its opacity) as would be produced by a directional light source uniformly shining in the device space direction {0, -1, 1} against a backdrop which is |elevation * dpr| device coordinates below the |path| in the Z direction.
 
void Flush () override
 
sk_sp< DisplayListBuild ()
 
virtual void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)=0
 
virtual void DrawImageRect (const sk_sp< DlImage > &image, const DlIRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)
 
void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)
 
- Public Member Functions inherited from flutter::DlCanvas
virtual ~DlCanvas ()=default
 
void Clear (DlColor color)
 
void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)
 

Static Public Attributes

static constexpr DlRect kMaxCullRect
 
- Static Public Attributes inherited from flutter::DlCanvas
static constexpr DlScalar kShadowLightHeight = 600
 
static constexpr DlScalar kShadowLightRadius = 800
 

Friends

DlOpReceiverDisplayListBuilderBenchmarkAccessor (DisplayListBuilder &builder)
 
DlOpReceiverDisplayListBuilderTestingAccessor (DisplayListBuilder &builder)
 
DlPaint DisplayListBuilderTestingAttributes (DisplayListBuilder &builder)
 
int DisplayListBuilderTestingLastOpIndex (DisplayListBuilder &builder)
 

Additional Inherited Members

- Static Public Member Functions inherited from flutter::DlCanvas
static DlRect ComputeShadowBounds (const DlPath &path, float elevation, DlScalar dpr, const DlMatrix &ctm)
 Compute the local coverage for a |DrawShadow| operation using the given parameters (excluding the color and the transparent occluder parameters which do not affect the bounds).
 

Detailed Description

Definition at line 27 of file dl_builder.h.

Constructor & Destructor Documentation

◆ DisplayListBuilder() [1/3]

flutter::DisplayListBuilder::DisplayListBuilder ( bool  prepare_rtree)
inlineexplicit

Definition at line 35 of file dl_builder.h.

36 : DisplayListBuilder(kMaxCullRect, prepare_rtree) {}
static constexpr DlRect kMaxCullRect
Definition dl_builder.h:32
DisplayListBuilder(bool prepare_rtree)
Definition dl_builder.h:35

◆ DisplayListBuilder() [2/3]

flutter::DisplayListBuilder::DisplayListBuilder ( const DlRect cull_rect = kMaxCullRect,
bool  prepare_rtree = false 
)
explicit

Definition at line 224 of file dl_builder.cc.

226 : original_cull_rect_(ProtectEmpty(cull_rect)) {
227 Init(prepare_rtree);
228}
static const DlRect & ProtectEmpty(const DlRect &rect)

◆ DisplayListBuilder() [3/3]

flutter::DisplayListBuilder::DisplayListBuilder ( DlScalar  width,
DlScalar  height 
)
inline

Definition at line 41 of file dl_builder.h.

int32_t height
int32_t width
static constexpr TRect MakeWH(Type width, Type height)
Definition rect.h:140

◆ ~DisplayListBuilder()

flutter::DisplayListBuilder::~DisplayListBuilder ( )

Definition at line 241 of file dl_builder.cc.

241 {
242 DisplayList::DisposeOps(storage_, offsets_);
243}

Member Function Documentation

◆ Build()

sk_sp< DisplayList > flutter::DisplayListBuilder::Build ( )

Definition at line 161 of file dl_builder.cc.

161 {
162 while (save_stack_.size() > 1) {
163 restore();
164 }
165
166 int count = render_op_count_;
167 size_t nested_bytes = nested_bytes_;
168 int nested_count = nested_op_count_;
169 uint32_t total_depth = depth_;
170 bool opacity_compatible = current_layer().is_group_opacity_compatible();
171 bool is_safe = is_ui_thread_safe_;
172 bool affects_transparency = current_layer().affects_transparent_layer;
173 bool root_has_backdrop_filter = current_layer().contains_backdrop_filter;
174 bool root_is_unbounded = current_layer().is_unbounded;
175 DlBlendMode max_root_blend_mode = current_layer().max_blend_mode;
176
177 sk_sp<DlRTree> rtree;
178 DlRect bounds;
179 if (rtree_data_.has_value()) {
180 auto& rects = rtree_data_->rects;
181 auto& indices = rtree_data_->indices;
182 rtree = sk_make_sp<DlRTree>(rects.data(), rects.size(), indices.data(),
183 [](int id) { return id >= 0; });
184 // RTree bounds may be tighter due to applying filter bounds
185 // adjustments to each op as we restore layers rather than to
186 // the entire layer bounds.
187 bounds = rtree->bounds();
188 rtree_data_.reset();
189 } else {
190 bounds = current_layer().global_space_accumulator.GetBounds();
191 }
192
193 render_op_count_ = op_index_ = 0;
194 nested_bytes_ = nested_op_count_ = 0;
195 depth_ = 0;
196 is_ui_thread_safe_ = true;
197 current_opacity_compatibility_ = true;
198 render_op_depth_cost_ = 1u;
199 current_ = DlPaint();
200
201 save_stack_.pop_back();
202 Init(rtree != nullptr);
203
204 storage_.trim();
205 DisplayListStorage storage;
206 std::vector<size_t> offsets;
207 std::swap(offsets, offsets_);
208 std::swap(storage, storage_);
209
210 return sk_sp<DisplayList>(new DisplayList(
211 std::move(storage), std::move(offsets), count, nested_bytes, nested_count,
212 total_depth, bounds, opacity_compatible, is_safe, affects_transparency,
213 max_root_blend_mode, root_has_backdrop_filter, root_is_unbounded,
214 std::move(rtree)));
215}
impeller::Rect DlRect
impeller::BlendMode DlBlendMode
flutter::DisplayList DisplayList
flutter::DlPaint DlPaint

References flutter::DisplayListStorage::trim().

Referenced by flutter::testing::MockRasterCache::AddMockPicture(), flutter::BM_DisplayListDispatchByIndexDefault(), flutter::BM_DisplayListDispatchByIteratorDefault(), flutter::BM_DisplayListDispatchByVectorCull(), flutter::BM_DisplayListDispatchByVectorDefault(), flutter::BM_DisplayListDispatchCull(), flutter::BM_DisplayListDispatchDefault(), flutter::testing::BM_DrawArc(), flutter::testing::BM_DrawCircle(), flutter::testing::BM_DrawDRRect(), flutter::testing::BM_DrawImage(), flutter::testing::BM_DrawImageNine(), flutter::testing::BM_DrawImageRect(), flutter::testing::BM_DrawLine(), flutter::testing::BM_DrawOval(), flutter::testing::BM_DrawPath(), flutter::testing::BM_DrawPoints(), flutter::testing::BM_DrawRect(), flutter::testing::BM_DrawRRect(), flutter::testing::BM_DrawRSE(), flutter::testing::BM_DrawShadow(), flutter::testing::BM_DrawTextBlob(), flutter::testing::BM_DrawVertices(), flutter::testing::BM_EmptyDisplayList(), flutter::testing::BM_SaveLayer(), flutter::testing::BM_SingleOpDisplayList(), impeller::interop::DisplayListBuilder::Build(), flutter::testing::DisplayListTestBase< BaseT >::Build(), flutter::testing::DisplayListTestBase< BaseT >::Build(), impeller::testing::CanRenderConicalGradientWithDithering(), impeller::testing::CanRenderLinearGradientWithDithering(), impeller::testing::CanRenderRadialGradientWithDithering(), impeller::testing::CanRenderSweepGradientWithDithering(), flutter::testing::DlSurfaceInstanceImpeller::Clear(), flutter::testing::DiffContextTest::CreateDisplayList(), flutter::testing::LayerTreeTest::display_list(), flutter::testing::LayerTestBase< BaseT >::display_list(), impeller::testing::DoGradientOvalStrokeMaskBlur(), flutter::LayerTree::Flatten(), flutter::testing::DisplayListNopTest::get_output(), flutter::testing::RenderEnvironment::GetResult(), flutter::testing::GetSampleDisplayList(), flutter::testing::GetSampleDisplayList(), flutter::testing::GetSampleNestedDisplayList(), flutter::testing::DlJobRenderer::MakeDisplayList(), flutter::testing::MakeSizedDisplayList(), flutter::testing::makeTestDisplayList(), flutter::testing::MakeTestDisplayList(), impeller::testing::MaskBlurVariantTest(), impeller::DlPlayground::OpenPlaygroundHere(), flutter::testing::LayerTestBase< BaseT >::reset_display_list(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::DisplayListNopTest::test_attributes_image(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::DisplayListNopTest::test_mode_color_via_filter(), flutter::testing::DisplayListNopTest::test_mode_color_via_rendering(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), and flutter::testing::DisplayListTestBase< BaseT >::verify_inverted_bounds().

◆ ClipOval()

void flutter::DisplayListBuilder::ClipOval ( const DlRect bounds,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1064 of file dl_builder.cc.

1066 {
1067 if (!bounds.IsFinite()) {
1068 return;
1069 }
1070 if (current_info().is_nop) {
1071 return;
1072 }
1073 if (current_info().has_valid_clip && clip_op == DlClipOp::kIntersect &&
1074 layer_local_state().oval_covers_cull(bounds)) {
1075 return;
1076 }
1077 global_state().clipOval(bounds, clip_op, is_aa);
1078 layer_local_state().clipOval(bounds, clip_op, is_aa);
1079 if (global_state().is_cull_rect_empty() ||
1080 layer_local_state().is_cull_rect_empty()) {
1081 current_info().is_nop = true;
1082 return;
1083 }
1084 current_info().has_valid_clip = true;
1085 checkForDeferredSave();
1086 switch (clip_op) {
1088 Push<ClipIntersectOvalOp>(0, bounds, is_aa);
1089 break;
1091 Push<ClipDifferenceOvalOp>(0, bounds, is_aa);
1092 break;
1093 }
1094}
void clipOval(const DlRect &bounds, DlClipOp op, bool is_aa)

References flutter::DisplayListMatrixClipState::clipOval(), impeller::TRect< T >::IsFinite(), flutter::kDifference, and flutter::kIntersect.

Referenced by impeller::interop::DisplayListBuilder::ClipOval(), ClipPath(), ClipRoundRect(), ClipRoundSuperellipse(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ ClipPath()

void flutter::DisplayListBuilder::ClipPath ( const DlPath path,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1167 of file dl_builder.cc.

1169 {
1170 if (current_info().is_nop) {
1171 return;
1172 }
1173 {
1174 DlRect rect;
1175 if (path.IsRect(&rect)) {
1176 ClipRect(rect, clip_op, is_aa);
1177 return;
1178 }
1179 if (path.IsOval(&rect)) {
1180 ClipOval(rect, clip_op, is_aa);
1181 return;
1182 }
1183 DlRoundRect rrect;
1184 if (path.IsRoundRect(&rrect)) {
1185 ClipRoundRect(rrect, clip_op, is_aa);
1186 return;
1187 }
1188 }
1189 global_state().clipPath(path, clip_op, is_aa);
1190 layer_local_state().clipPath(path, clip_op, is_aa);
1191 if (global_state().is_cull_rect_empty() ||
1192 layer_local_state().is_cull_rect_empty()) {
1193 current_info().is_nop = true;
1194 return;
1195 }
1196 current_info().has_valid_clip = true;
1197 checkForDeferredSave();
1198 switch (clip_op) {
1200 Push<ClipIntersectPathOp>(0, path, is_aa);
1201 break;
1203 Push<ClipDifferencePathOp>(0, path, is_aa);
1204 break;
1205 }
1206}
void ClipRect(const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void ClipRoundRect(const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void ClipOval(const DlRect &bounds, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void clipPath(const DlPath &path, DlClipOp op, bool is_aa)
impeller::RoundRect DlRoundRect
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52

References ClipOval(), flutter::DisplayListMatrixClipState::clipPath(), ClipRect(), ClipRoundRect(), flutter::kDifference, flutter::kIntersect, and flutter::path.

Referenced by canvas_clipPath(), impeller::interop::DisplayListBuilder::ClipPath(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ ClipRect()

void flutter::DisplayListBuilder::ClipRect ( const DlRect rect,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1033 of file dl_builder.cc.

1035 {
1036 if (!rect.IsFinite()) {
1037 return;
1038 }
1039 if (current_info().is_nop) {
1040 return;
1041 }
1042 if (current_info().has_valid_clip && clip_op == DlClipOp::kIntersect &&
1043 layer_local_state().rect_covers_cull(rect)) {
1044 return;
1045 }
1046 global_state().clipRect(rect, clip_op, is_aa);
1047 layer_local_state().clipRect(rect, clip_op, is_aa);
1048 if (global_state().is_cull_rect_empty() ||
1049 layer_local_state().is_cull_rect_empty()) {
1050 current_info().is_nop = true;
1051 return;
1052 }
1053 current_info().has_valid_clip = true;
1054 checkForDeferredSave();
1055 switch (clip_op) {
1057 Push<ClipIntersectRectOp>(0, rect, is_aa);
1058 break;
1060 Push<ClipDifferenceRectOp>(0, rect, is_aa);
1061 break;
1062 }
1063}
void clipRect(const DlRect &rect, DlClipOp op, bool is_aa)

References flutter::DisplayListMatrixClipState::clipRect(), impeller::TRect< T >::IsFinite(), flutter::kDifference, and flutter::kIntersect.

Referenced by flutter::BM_DisplayListBuilderWithClipRect(), canvas_clipRect(), ClipPath(), impeller::interop::DisplayListBuilder::ClipRect(), ClipRoundRect(), ClipRoundSuperellipse(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ ClipRoundRect()

void flutter::DisplayListBuilder::ClipRoundRect ( const DlRoundRect rrect,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1095 of file dl_builder.cc.

1097 {
1098 if (rrect.IsRect()) {
1099 ClipRect(rrect.GetBounds(), clip_op, is_aa);
1100 return;
1101 }
1102 if (rrect.IsOval()) {
1103 ClipOval(rrect.GetBounds(), clip_op, is_aa);
1104 return;
1105 }
1106 if (current_info().is_nop) {
1107 return;
1108 }
1109 if (current_info().has_valid_clip && clip_op == DlClipOp::kIntersect &&
1110 layer_local_state().rrect_covers_cull(rrect)) {
1111 return;
1112 }
1113 global_state().clipRRect(rrect, clip_op, is_aa);
1114 layer_local_state().clipRRect(rrect, clip_op, is_aa);
1115 if (global_state().is_cull_rect_empty() ||
1116 layer_local_state().is_cull_rect_empty()) {
1117 current_info().is_nop = true;
1118 return;
1119 }
1120 current_info().has_valid_clip = true;
1121 checkForDeferredSave();
1122 switch (clip_op) {
1124 Push<ClipIntersectRoundRectOp>(0, rrect, is_aa);
1125 break;
1127 Push<ClipDifferenceRoundRectOp>(0, rrect, is_aa);
1128 break;
1129 }
1130}
void clipRRect(const DlRoundRect &rrect, DlClipOp op, bool is_aa)

References ClipOval(), ClipRect(), flutter::DisplayListMatrixClipState::clipRRect(), impeller::RoundRect::GetBounds(), impeller::RoundRect::IsOval(), impeller::RoundRect::IsRect(), flutter::kDifference, and flutter::kIntersect.

Referenced by canvas_clipRRect(), ClipPath(), impeller::interop::DisplayListBuilder::ClipRoundedRect(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ ClipRoundSuperellipse()

void flutter::DisplayListBuilder::ClipRoundSuperellipse ( const DlRoundSuperellipse rse,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1131 of file dl_builder.cc.

1133 {
1134 if (rse.IsRect()) {
1135 ClipRect(rse.GetBounds(), clip_op, is_aa);
1136 return;
1137 }
1138 if (rse.IsOval()) {
1139 ClipOval(rse.GetBounds(), clip_op, is_aa);
1140 return;
1141 }
1142 if (current_info().is_nop) {
1143 return;
1144 }
1145 if (current_info().has_valid_clip && clip_op == DlClipOp::kIntersect &&
1146 layer_local_state().rsuperellipse_covers_cull(rse)) {
1147 return;
1148 }
1149 global_state().clipRSuperellipse(rse, clip_op, is_aa);
1150 layer_local_state().clipRSuperellipse(rse, clip_op, is_aa);
1151 if (global_state().is_cull_rect_empty() ||
1152 layer_local_state().is_cull_rect_empty()) {
1153 current_info().is_nop = true;
1154 return;
1155 }
1156 current_info().has_valid_clip = true;
1157 checkForDeferredSave();
1158 switch (clip_op) {
1160 Push<ClipIntersectRoundSuperellipseOp>(0, rse, is_aa);
1161 break;
1163 Push<ClipDifferenceRoundSuperellipseOp>(0, rse, is_aa);
1164 break;
1165 }
1166}
void clipRSuperellipse(const DlRoundSuperellipse &rse, DlClipOp op, bool is_aa)

References ClipOval(), ClipRect(), flutter::DisplayListMatrixClipState::clipRSuperellipse(), impeller::RoundSuperellipse::GetBounds(), impeller::RoundSuperellipse::IsOval(), impeller::RoundSuperellipse::IsRect(), flutter::kDifference, and flutter::kIntersect.

◆ DrawArc()

void flutter::DisplayListBuilder::DrawArc ( const DlRect bounds,
DlScalar  start,
DlScalar  sweep,
bool  useCenter,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1455 of file dl_builder.cc.

1459 {
1460 SetAttributesFromPaint(
1461 paint, useCenter ? kDrawArcWithCenterFlags : kDrawArcNoCenterFlags);
1462 drawArc(bounds, start, sweep, useCenter);
1463}
static constexpr DisplayListAttributeFlags kDrawArcWithCenterFlags
static constexpr DisplayListAttributeFlags kDrawArcNoCenterFlags

References flutter::DisplayListOpFlags::kDrawArcNoCenterFlags, flutter::DisplayListOpFlags::kDrawArcWithCenterFlags, and start.

Referenced by flutter::testing::BM_DrawArc(), canvas_drawArc(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawAtlas()

void flutter::DisplayListBuilder::DrawAtlas ( const sk_sp< DlImage > &  atlas,
const DlRSTransform  xform[],
const DlRect  tex[],
const DlColor  colors[],
int  count,
DlBlendMode  mode,
DlImageSampling  sampling,
const DlRect cullRect,
const DlPaint paint = nullptr 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1740 of file dl_builder.cc.

1748 {
1749 if (paint != nullptr) {
1750 SetAttributesFromPaint(*paint,
1752 drawAtlas(atlas, xform, tex, colors, count, mode, sampling, cull_rect,
1753 true);
1754 } else {
1755 drawAtlas(atlas, xform, tex, colors, count, mode, sampling, cull_rect,
1756 false);
1757 }
1758}
static constexpr DisplayListAttributeFlags kDrawAtlasWithPaintFlags

References flutter::DisplayListOpFlags::kDrawAtlasWithPaintFlags, and flutter::mode.

Referenced by canvas_drawAtlas(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawCircle()

void flutter::DisplayListBuilder::DrawCircle ( const DlPoint center,
DlScalar  radius,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1311 of file dl_builder.cc.

1313 {
1314 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawCircleFlags);
1315 drawCircle(center, radius);
1316}
static constexpr DisplayListAttributeFlags kDrawCircleFlags

References flutter::DisplayListOpFlags::kDrawCircleFlags.

Referenced by flutter::testing::BM_DrawCircle(), canvas_drawCircle(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and flutter::testing::TEST_P().

◆ DrawColor()

void flutter::DisplayListBuilder::DrawColor ( DlColor  color,
DlBlendMode  mode 
)
overridevirtual

◆ DrawDashedLine()

void flutter::DisplayListBuilder::DrawDashedLine ( const DlPoint p0,
const DlPoint p1,
DlScalar  on_length,
DlScalar  off_length,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1263 of file dl_builder.cc.

1267 {
1268 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawLineFlags);
1269 drawDashedLine(p0, p1, on_length, off_length);
1270}
static constexpr DisplayListAttributeFlags kDrawLineFlags

References flutter::DisplayListOpFlags::kDrawLineFlags, and p1.

Referenced by impeller::interop::DisplayListBuilder::DrawDashedLine(), and flutter::testing::TEST().

◆ DrawDiffRoundRect()

void flutter::DisplayListBuilder::DrawDiffRoundRect ( const DlRoundRect outer,
const DlRoundRect inner,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1349 of file dl_builder.cc.

1351 {
1352 if (auto rrect_and_paint = DiffRoundRectToRoundRect(outer, inner, paint)) {
1353 DrawRoundRect(rrect_and_paint->first, rrect_and_paint->second);
1354 return;
1355 }
1356 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawDRRectFlags);
1357 drawDiffRoundRect(outer, inner);
1358}
void DrawRoundRect(const DlRoundRect &rrect, const DlPaint &paint) override
static constexpr DisplayListAttributeFlags kDrawDRRectFlags

References DrawRoundRect(), and flutter::DisplayListOpFlags::kDrawDRRectFlags.

Referenced by flutter::testing::BM_DrawDRRect(), canvas_drawDRRect(), impeller::interop::DisplayListBuilder::DrawRoundedRectDifference(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawDisplayList()

void flutter::DisplayListBuilder::DrawDisplayList ( const sk_sp< DisplayList display_list,
DlScalar  opacity = SK_Scalar1 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1760 of file dl_builder.cc.

1761 {
1762 if (!std::isfinite(opacity) || opacity <= SK_ScalarNearlyZero ||
1763 display_list->op_count() == 0 || display_list->GetBounds().IsEmpty() ||
1764 current_info().is_nop) {
1765 return;
1766 }
1767 const DlRect bounds = display_list->GetBounds();
1768 bool accumulated;
1769 sk_sp<const DlRTree> rtree;
1770 if (display_list->root_is_unbounded()) {
1771 accumulated = AccumulateUnbounded();
1772 } else if (!rtree_data_.has_value() || !(rtree = display_list->rtree())) {
1773 accumulated = AccumulateOpBounds(bounds, kDrawDisplayListFlags);
1774 } else {
1775 std::list<DlRect> rects =
1776 rtree->searchAndConsolidateRects(GetLocalClipCoverage(), false);
1777 accumulated = false;
1778 for (const DlRect& rect : rects) {
1779 // TODO (https://github.com/flutter/flutter/issues/114919): Attributes
1780 // are not necessarily `kDrawDisplayListFlags`.
1781 if (AccumulateOpBounds(rect, kDrawDisplayListFlags)) {
1782 accumulated = true;
1783 }
1784 }
1785 }
1786 if (!accumulated) {
1787 return;
1788 }
1789
1790 DlPaint current_paint = current_;
1791 Push<DrawDisplayListOp>(0, display_list,
1792 opacity < SK_Scalar1 ? opacity : SK_Scalar1);
1793
1794 // This depth increment accounts for every draw call in the child
1795 // DisplayList and is in addition to the implicit depth increment
1796 // that was performed when we pushed the DrawDisplayListOp. The
1797 // eventual dispatcher can use or ignore the implicit depth increment
1798 // as it sees fit depending on whether it needs to do rendering
1799 // before or after the drawDisplayList op, but it must be accounted
1800 // for if the depth value accounting is to remain consistent between
1801 // the recording and dispatching process.
1802 depth_ += display_list->total_depth();
1803
1804 is_ui_thread_safe_ = is_ui_thread_safe_ && display_list->isUIThreadSafe();
1805 // Not really necessary if the developer is interacting with us via
1806 // our attribute-state-less DlCanvas methods, but this avoids surprises
1807 // for those who may have been using the stateful Dispatcher methods.
1808 SetAttributesFromPaint(current_paint,
1810
1811 // The non-nested op count accumulated in the |Push| method will include
1812 // this call to |drawDisplayList| for non-nested op count metrics.
1813 // But, for nested op count metrics we want the |drawDisplayList| call itself
1814 // to be transparent. So we subtract 1 from our accumulated nested count to
1815 // balance out against the 1 that was accumulated into the regular count.
1816 // This behavior is identical to the way SkPicture computed nested op counts.
1817 nested_op_count_ += display_list->op_count(true) - 1;
1818 nested_bytes_ += display_list->bytes(true);
1819 UpdateLayerOpacityCompatibility(display_list->can_apply_group_opacity());
1820 // Nop DisplayLists are eliminated above so we either affect transparent
1821 // pixels or we do not. We should not have [kNoEffect].
1822 UpdateLayerResult(display_list->modifies_transparent_black()
1823 ? OpResult::kAffectsAll
1824 : OpResult::kPreservesTransparency,
1825 display_list->max_root_blend_mode());
1826 if (display_list->root_has_backdrop_filter()) {
1827 current_layer().contains_backdrop_filter = true;
1828 }
1829}
DlRect GetLocalClipCoverage() const override
Definition dl_builder.h:145
static constexpr DisplayListAttributeFlags kDrawDisplayListFlags
static constexpr DisplayListAttributeFlags kSaveLayerWithPaintFlags

References GetLocalClipCoverage(), flutter::DisplayListOpFlags::kDrawDisplayListFlags, and flutter::DisplayListOpFlags::kSaveLayerWithPaintFlags.

Referenced by canvas_drawPicture(), impeller::interop::DisplayListBuilder::DrawDisplayList(), flutter::testing::GetSampleNestedDisplayList(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawImage()

void flutter::DisplayListBuilder::DrawImage ( const sk_sp< DlImage > &  image,
const DlPoint point,
DlImageSampling  sampling,
const DlPaint paint = nullptr 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1590 of file dl_builder.cc.

1593 {
1594 if (paint != nullptr) {
1595 SetAttributesFromPaint(*paint,
1597 drawImage(image, point, sampling, true);
1598 } else {
1599 drawImage(image, point, sampling, false);
1600 }
1601}
static constexpr DisplayListAttributeFlags kDrawImageWithPaintFlags
FlutterVulkanImage * image

References image, and flutter::DisplayListOpFlags::kDrawImageWithPaintFlags.

Referenced by flutter::testing::BM_DrawImage(), canvas_drawImage(), impeller::interop::DisplayListBuilder::DrawTexture(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::DisplayListNopTest::test_attributes_image(), flutter::testing::TEST_F(), flutter::testing::DisplayListNopTest::test_mode_color_via_rendering(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawImageNine()

void flutter::DisplayListBuilder::DrawImageNine ( const sk_sp< DlImage > &  image,
const DlIRect center,
const DlRect dst,
DlFilterMode  filter,
const DlPaint paint = nullptr 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1652 of file dl_builder.cc.

1656 {
1657 if (paint != nullptr) {
1658 SetAttributesFromPaint(*paint,
1660 drawImageNine(image, center, dst, filter, true);
1661 } else {
1662 drawImageNine(image, center, dst, filter, false);
1663 }
1664}
static constexpr DisplayListAttributeFlags kDrawImageNineWithPaintFlags

References image, and flutter::DisplayListOpFlags::kDrawImageNineWithPaintFlags.

Referenced by flutter::testing::BM_DrawImageNine(), canvas_drawImageNine(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawImageRect() [1/4]

virtual void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlIRect src,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
inlinevirtual

Reimplemented from flutter::DlCanvas.

Definition at line 149 of file dl_canvas.h.

155 {
156 auto float_src = DlRect::MakeLTRB(src.GetLeft(), src.GetTop(),
157 src.GetRight(), src.GetBottom());
158 DrawImageRect(image, float_src, dst, sampling, paint, constraint);
159 }
void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

◆ DrawImageRect() [2/4]

void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
inline

Definition at line 160 of file dl_canvas.h.

165 {
166 DrawImageRect(image, image->GetBounds(), dst, sampling, paint, constraint);
167 }

◆ DrawImageRect() [3/4]

void flutter::DisplayListBuilder::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlRect src,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
overridevirtual

◆ DrawImageRect() [4/4]

virtual void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlRect src,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
virtual

Implements flutter::DlCanvas.

◆ DrawLine()

◆ DrawOval()

◆ DrawPaint()

void flutter::DisplayListBuilder::DrawPaint ( const DlPaint paint)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1220 of file dl_builder.cc.

1220 {
1221 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawPaintFlags);
1222 drawPaint();
1223}
static constexpr DisplayListAttributeFlags kDrawPaintFlags

References flutter::DisplayListOpFlags::kDrawPaintFlags.

Referenced by canvas_drawPaint(), impeller::testing::DoGradientOvalStrokeMaskBlur(), impeller::interop::DisplayListBuilder::DrawPaint(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), and flutter::testing::TEST_P().

◆ DrawPath()

void flutter::DisplayListBuilder::DrawPath ( const DlPath path,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1401 of file dl_builder.cc.

1401 {
1402 DlRect rect;
1403 bool closed;
1404 if (path.IsRect(&rect, &closed) &&
1405 (paint.getDrawStyle() == DlDrawStyle::kFill || closed)) {
1406 DrawRect(rect, paint);
1407 return;
1408 }
1409
1410 DlRoundRect rrect;
1411 if (path.IsRoundRect(&rrect)) {
1412 DrawRoundRect(rrect, paint);
1413 return;
1414 }
1415
1416 DlRect oval_bounds;
1417 if (path.IsOval(&oval_bounds)) {
1418 DrawOval(oval_bounds, paint);
1419 return;
1420 }
1421
1422 DlPoint start;
1423 DlPoint end;
1424 if (path.IsLine(&start, &end)) {
1425 DrawLine(start, end, paint);
1426 return;
1427 }
1428
1429 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawPathFlags);
1430 drawPath(path);
1431}
void DrawOval(const DlRect &bounds, const DlPaint &paint) override
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static constexpr DisplayListAttributeFlags kDrawPathFlags
@ kFill
fills interior of shapes
impeller::Point DlPoint
const size_t start
const size_t end

References DrawLine(), DrawOval(), DrawRect(), DrawRoundRect(), end, flutter::DlPaint::getDrawStyle(), flutter::DisplayListOpFlags::kDrawPathFlags, flutter::kFill, flutter::path, and start.

Referenced by flutter::testing::MockRasterCache::AddMockPicture(), flutter::testing::BM_DrawPath(), canvas_drawPath(), impeller::interop::DisplayListBuilder::DrawPath(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and flutter::testing::TEST_P().

◆ DrawPoints()

void flutter::DisplayListBuilder::DrawPoints ( DlPointMode  mode,
uint32_t  count,
const DlPoint  pts[],
const DlPaint paint 
)
overridevirtual

◆ DrawRect()

void flutter::DisplayListBuilder::DrawRect ( const DlRect rect,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1281 of file dl_builder.cc.

1281 {
1282 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawRectFlags);
1283 drawRect(rect);
1284}
static constexpr DisplayListAttributeFlags kDrawRectFlags

References flutter::DisplayListOpFlags::kDrawRectFlags.

Referenced by flutter::testing::BM_DrawRect(), flutter::testing::BM_SaveLayer(), flutter::testing::BM_SingleOpDisplayList(), impeller::testing::CanRenderConicalGradientWithDithering(), impeller::testing::CanRenderLinearGradientWithDithering(), impeller::testing::CanRenderRadialGradientWithDithering(), impeller::testing::CanRenderSweepGradientWithDithering(), canvas_drawRect(), flutter::testing::DiffContextTest::CreateDisplayList(), DrawPath(), impeller::interop::DisplayListBuilder::DrawRect(), flutter::testing::GetSampleDisplayList(), flutter::testing::GetSampleNestedDisplayList(), flutter::testing::MakeSizedDisplayList(), flutter::testing::makeTestDisplayList(), flutter::testing::MakeTestDisplayList(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::DisplayListNopTest::test_mode_color_via_filter(), flutter::testing::DisplayListNopTest::test_mode_color_via_rendering(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawRoundRect()

void flutter::DisplayListBuilder::DrawRoundRect ( const DlRoundRect rrect,
const DlPaint paint 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1333 of file dl_builder.cc.

1334 {
1335 SetAttributesFromPaint(paint, DisplayListOpFlags::kDrawRRectFlags);
1336 drawRoundRect(rrect);
1337}
static constexpr DisplayListAttributeFlags kDrawRRectFlags

References flutter::DisplayListOpFlags::kDrawRRectFlags.

Referenced by flutter::testing::BM_DrawRRect(), canvas_drawRRect(), impeller::testing::DoGradientOvalStrokeMaskBlur(), DrawDiffRoundRect(), DrawPath(), impeller::interop::DisplayListBuilder::DrawRoundedRect(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), and flutter::testing::TEST_P().

◆ DrawRoundSuperellipse()

void flutter::DisplayListBuilder::DrawRoundSuperellipse ( const DlRoundSuperellipse rse,
const DlPaint paint 
)
overridevirtual

◆ DrawShadow()

void flutter::DisplayListBuilder::DrawShadow ( const DlPath path,
const DlColor  color,
const DlScalar  elevation,
bool  transparent_occluder,
DlScalar  dpr 
)
overridevirtual

Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for its opacity) as would be produced by a directional light source uniformly shining in the device space direction {0, -1, 1} against a backdrop which is |elevation * dpr| device coordinates below the |path| in the Z direction.

Normally the renderer might consider omitting the rendering of any of the shadow pixels that fall under the |path| itself, as an optimization, unless the |transparent_occluder| flag is specified which would indicate that the optimization isn't appropriate.

Note that the |elevation| and |dpr| are unique in the API for being considered in pure device coordinates while the |path| is interpreted relative to the current local-to-device transform.

See also
|ComputeShadowBounds|

Implements flutter::DlCanvas.

Definition at line 1868 of file dl_builder.cc.

1872 {
1873 OpResult result = PaintResult(DlPaint(color));
1874 if (result != OpResult::kNoEffect) {
1875 DlRect shadow_bounds =
1876 DlCanvas::ComputeShadowBounds(path, elevation, dpr, GetMatrix());
1877 if (AccumulateOpBounds(shadow_bounds, kDrawShadowFlags)) {
1878 transparent_occluder //
1879 ? Push<DrawShadowTransparentOccluderOp>(0, path, color, elevation,
1880 dpr)
1881 : Push<DrawShadowOp>(0, path, color, elevation, dpr);
1882 UpdateLayerOpacityCompatibility(false);
1883 UpdateLayerResult(result, DlBlendMode::kSrcOver);
1884 }
1885 }
1886}
DlMatrix GetMatrix() const override
Definition dl_builder.h:111
static constexpr DisplayListAttributeFlags kDrawShadowFlags
static DlRect ComputeShadowBounds(const DlPath &path, float elevation, DlScalar dpr, const DlMatrix &ctm)
Compute the local coverage for a |DrawShadow| operation using the given parameters (excluding the col...
Definition dl_canvas.cc:125

References flutter::DlCanvas::ComputeShadowBounds(), GetMatrix(), flutter::DisplayListOpFlags::kDrawShadowFlags, and flutter::path.

Referenced by flutter::testing::BM_DrawShadow(), canvas_drawShadow(), impeller::interop::DisplayListBuilder::DrawShadow(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ DrawText()

void flutter::DisplayListBuilder::DrawText ( const std::shared_ptr< DlText > &  text,
DlScalar  x,
DlScalar  y,
const DlPaint paint 
)
overridevirtual

◆ DrawVertices()

◆ Flush()

void flutter::DisplayListBuilder::Flush ( )
inlineoverridevirtual

Implements flutter::DlCanvas.

Definition at line 252 of file dl_builder.h.

252{}

◆ GetBaseLayerDimensions()

DlISize flutter::DisplayListBuilder::GetBaseLayerDimensions ( ) const
overridevirtual

Implements flutter::DlCanvas.

Definition at line 253 of file dl_builder.cc.

253 {
254 return DlIRect::RoundOut(original_cull_rect_).GetSize();
255}
RoundOut(const TRect< U > &r)
Definition rect.h:713

References impeller::TRect< T >::RoundOut().

Referenced by GetImageInfo().

◆ GetDestinationClipCoverage()

◆ GetImageInfo()

SkImageInfo flutter::DisplayListBuilder::GetImageInfo ( ) const
overridevirtual

Implements flutter::DlCanvas.

Definition at line 257 of file dl_builder.cc.

257 {
259 return SkImageInfo::MakeUnknown(size.width, size.height);
260}
DlISize GetBaseLayerDimensions() const override
impeller::ISize32 DlISize
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size

References GetBaseLayerDimensions(), and flutter::size.

◆ GetLocalClipCoverage()

DlRect flutter::DisplayListBuilder::GetLocalClipCoverage ( ) const
inlineoverridevirtual

◆ GetMatrix()

◆ GetRecordCount()

size_t flutter::DisplayListBuilder::GetRecordCount ( ) const

Return the number of records currently recorded in the builder.

Returns
The number of records already recorded.

Definition at line 245 of file dl_builder.cc.

245 {
246 return offsets_.size();
247}

◆ GetSaveCount()

◆ IsEmpty()

bool flutter::DisplayListBuilder::IsEmpty ( ) const

Return true if the builder has not yet recorded any commands.

Returns
Whether the builder is empty.

Definition at line 249 of file dl_builder.cc.

249 {
250 return offsets_.empty();
251}

Referenced by flutter::testing::DlSurfaceInstanceImpeller::Clear().

◆ QuickReject()

bool flutter::DisplayListBuilder::QuickReject ( const DlRect bounds) const
overridevirtual

Return true iff the supplied bounds are easily shown to be outside of the current clip bounds. This method may conservatively return false if it cannot make the determination.

Implements flutter::DlCanvas.

Definition at line 1208 of file dl_builder.cc.

1208 {
1209 return global_state().content_culled(bounds);
1210}
bool content_culled(const DlRect &content_bounds) const

References flutter::DisplayListMatrixClipState::content_culled().

Referenced by canvas_quickReject().

◆ Restore()

void flutter::DisplayListBuilder::Restore ( )
overridevirtual

Implements flutter::DlCanvas.

Definition at line 662 of file dl_builder.cc.

662 {
663 if (save_stack_.size() <= 1) {
664 return;
665 }
666
667 if (!current_info().has_deferred_save_op) {
668 SaveOpBase* op = reinterpret_cast<SaveOpBase*>(storage_.base() +
669 current_info().save_offset);
670 FML_CHECK(op->type == DisplayListOpType::kSave ||
671 op->type == DisplayListOpType::kSaveLayer ||
672 op->type == DisplayListOpType::kSaveLayerBackdrop);
673
674 op->restore_index = op_index_;
675 op->total_content_depth = depth_ - current_info().save_depth;
676
677 if (current_info().is_save_layer) {
678 RestoreLayer();
679 }
680
681 // Wait until all outgoing bounds information for the saveLayer is
682 // recorded before pushing the record to the buffer so that any rtree
683 // bounds will be attributed to the op_index of the restore op.
684 Push<RestoreOp>(0);
685 } else {
686 FML_DCHECK(!current_info().is_save_layer);
687 }
688
689 save_stack_.pop_back();
690}
uint8_t * base()
Returns a pointer to the base of the storage.
Definition dl_storage.h:24
#define FML_CHECK(condition)
Definition logging.h:104
#define FML_DCHECK(condition)
Definition logging.h:122

References flutter::DisplayListStorage::base(), FML_CHECK, FML_DCHECK, flutter::SaveOpBase::restore_index, flutter::SaveOpBase::total_content_depth, and flutter::DLOp::type.

Referenced by flutter::BM_DisplayListBuilderWithGlobalSaveLayer(), flutter::BM_DisplayListBuilderWithSaveLayer(), flutter::BM_DisplayListBuilderWithSaveLayerAndImageFilter(), flutter::testing::BM_SaveLayer(), canvas_restore(), impeller::testing::DoGradientOvalStrokeMaskBlur(), impeller::interop::DisplayListBuilder::Restore(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and flutter::testing::TEST_P().

◆ RestoreToCount()

void flutter::DisplayListBuilder::RestoreToCount ( int  restore_count)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 898 of file dl_builder.cc.

898 {
899 FML_DCHECK(restore_count <= GetSaveCount());
900 while (restore_count < GetSaveCount() && GetSaveCount() > 1) {
901 restore();
902 }
903}
int GetSaveCount() const override
Definition dl_builder.h:71

References FML_DCHECK, and GetSaveCount().

Referenced by canvas_restoreToCount(), impeller::interop::DisplayListBuilder::RestoreToCount(), and impeller::testing::TEST_P().

◆ Rotate()

void flutter::DisplayListBuilder::Rotate ( DlScalar  degrees)
overridevirtual

◆ Save()

void flutter::DisplayListBuilder::Save ( )
overridevirtual

Implements flutter::DlCanvas.

Definition at line 501 of file dl_builder.cc.

501 {
502 bool was_nop = current_info().is_nop;
503 save_stack_.emplace_back(&current_info());
504 current_info().is_nop = was_nop;
505
506 FML_DCHECK(save_stack_.size() >= 2u);
507 FML_DCHECK(current_info().has_deferred_save_op);
508}

References FML_DCHECK.

Referenced by canvas_save(), impeller::testing::DoGradientOvalStrokeMaskBlur(), impeller::interop::DisplayListBuilder::Save(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::testing::TEST_P().

◆ SaveLayer()

void flutter::DisplayListBuilder::SaveLayer ( const std::optional< DlRect > &  bounds,
const DlPaint paint = nullptr,
const DlImageFilter backdrop = nullptr,
std::optional< int64_t >  backdrop_id = std::nullopt 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 642 of file dl_builder.cc.

645 {
646 SaveLayerOptions options;
647 DlRect temp_bounds;
648 if (bounds.has_value()) {
649 options = options.with_bounds_from_caller();
650 temp_bounds = *bounds;
651 } else {
652 FML_DCHECK(temp_bounds.IsEmpty());
653 }
654 if (paint != nullptr) {
655 options = options.with_renders_with_attributes();
656 SetAttributesFromPaint(*paint,
658 }
659 saveLayer(temp_bounds, options, backdrop, backdrop_id);
660}
flutter::SaveLayerOptions SaveLayerOptions

References FML_DCHECK, impeller::TRect< T >::IsEmpty(), flutter::DisplayListOpFlags::kSaveLayerWithPaintFlags, flutter::SaveLayerOptions::with_bounds_from_caller(), and flutter::SaveLayerOptions::with_renders_with_attributes().

Referenced by flutter::BM_DisplayListBuilderWithGlobalSaveLayer(), flutter::BM_DisplayListBuilderWithSaveLayer(), flutter::BM_DisplayListBuilderWithSaveLayerAndImageFilter(), flutter::testing::BM_SaveLayer(), canvas_saveLayer(), impeller::interop::DisplayListBuilder::SaveLayer(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and flutter::testing::TEST_P().

◆ Scale()

void flutter::DisplayListBuilder::Scale ( DlScalar  sx,
DlScalar  sy 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 913 of file dl_builder.cc.

913 {
914 if (std::isfinite(sx) && std::isfinite(sy) && (sx != 1.0 || sy != 1.0)) {
915 checkForDeferredSave();
916 Push<ScaleOp>(0, sx, sy);
917 global_state().scale(sx, sy);
918 layer_local_state().scale(sx, sy);
919 }
920}
void scale(DlScalar sx, DlScalar sy)

References flutter::DisplayListMatrixClipState::scale().

Referenced by flutter::BM_DisplayListBuilderWithGlobalSaveLayer(), flutter::BM_DisplayListBuilderWithScaleAndTranslate(), impeller::testing::CanRenderConicalGradientWithDithering(), impeller::testing::CanRenderSweepGradientWithDithering(), canvas_scale(), impeller::testing::DoGradientOvalStrokeMaskBlur(), flutter::testing::RenderEnvironment::GetResult(), impeller::testing::MaskBlurVariantTest(), impeller::interop::DisplayListBuilder::Scale(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), and flutter::testing::TEST_P().

◆ SetTransform()

void flutter::DisplayListBuilder::SetTransform ( const DlMatrix matrix)
inlineoverridevirtual

Implements flutter::DlCanvas.

Definition at line 102 of file dl_builder.h.

102 {
104 Transform(matrix);
105 }
void TransformReset() override
void Transform(const DlMatrix &matrix) override

References Transform(), and TransformReset().

Referenced by impeller::interop::DisplayListBuilder::SetTransform(), flutter::testing::TEST(), and flutter::testing::TEST().

◆ Skew()

void flutter::DisplayListBuilder::Skew ( DlScalar  sx,
DlScalar  sy 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 929 of file dl_builder.cc.

929 {
930 if (std::isfinite(sx) && std::isfinite(sy) && (sx != 0.0 || sy != 0.0)) {
931 checkForDeferredSave();
932 Push<SkewOp>(0, sx, sy);
933 global_state().skew(sx, sy);
934 layer_local_state().skew(sx, sy);
935 }
936}
void skew(DlScalar skx, DlScalar sky)

References flutter::DisplayListMatrixClipState::skew().

Referenced by canvas_skew(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and impeller::testing::TEST_P().

◆ Transform()

void flutter::DisplayListBuilder::Transform ( const DlMatrix matrix)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 1025 of file dl_builder.cc.

1025 {
1027 matrix.e[0][0], matrix.e[1][0], matrix.e[2][0], matrix.e[3][0],
1028 matrix.e[0][1], matrix.e[1][1], matrix.e[2][1], matrix.e[3][1],
1029 matrix.e[0][2], matrix.e[1][2], matrix.e[2][2], matrix.e[3][2],
1030 matrix.e[0][3], matrix.e[1][3], matrix.e[2][3], matrix.e[3][3]);
1031}
void TransformFullPerspective(DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt) override

References impeller::Matrix::e, and TransformFullPerspective().

Referenced by canvas_transform(), SetTransform(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and impeller::interop::DisplayListBuilder::Transform().

◆ Transform2DAffine()

void flutter::DisplayListBuilder::Transform2DAffine ( DlScalar  mxx,
DlScalar  mxy,
DlScalar  mxt,
DlScalar  myx,
DlScalar  myy,
DlScalar  myt 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 941 of file dl_builder.cc.

943 {
944 if (std::isfinite(mxx) && std::isfinite(myx) &&
945 std::isfinite(mxy) && std::isfinite(myy) &&
946 std::isfinite(mxt) && std::isfinite(myt)) {
947 if (mxx == 1 && mxy == 0 &&
948 myx == 0 && myy == 1) {
949 Translate(mxt, myt);
950 } else {
951 checkForDeferredSave();
952 Push<Transform2DAffineOp>(0,
953 mxx, mxy, mxt,
954 myx, myy, myt);
955 global_state().transform2DAffine(mxx, mxy, mxt,
956 myx, myy, myt);
957 layer_local_state().transform2DAffine(mxx, mxy, mxt,
958 myx, myy, myt);
959 }
960 }
961}
void Translate(DlScalar tx, DlScalar ty) override
void transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt)

References flutter::DisplayListMatrixClipState::transform2DAffine(), and Translate().

Referenced by flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and flutter::testing::TEST_F().

◆ TransformFullPerspective()

void flutter::DisplayListBuilder::TransformFullPerspective ( DlScalar  mxx,
DlScalar  mxy,
DlScalar  mxz,
DlScalar  mxt,
DlScalar  myx,
DlScalar  myy,
DlScalar  myz,
DlScalar  myt,
DlScalar  mzx,
DlScalar  mzy,
DlScalar  mzz,
DlScalar  mzt,
DlScalar  mwx,
DlScalar  mwy,
DlScalar  mwz,
DlScalar  mwt 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 963 of file dl_builder.cc.

967 {
968 if ( mxz == 0 &&
969 myz == 0 &&
970 mzx == 0 && mzy == 0 && mzz == 1 && mzt == 0 &&
971 mwx == 0 && mwy == 0 && mwz == 0 && mwt == 1) {
972 transform2DAffine(mxx, mxy, mxt,
973 myx, myy, myt);
974 } else if (std::isfinite(mxx) && std::isfinite(mxy) &&
975 std::isfinite(mxz) && std::isfinite(mxt) &&
976 std::isfinite(myx) && std::isfinite(myy) &&
977 std::isfinite(myz) && std::isfinite(myt) &&
978 std::isfinite(mzx) && std::isfinite(mzy) &&
979 std::isfinite(mzz) && std::isfinite(mzt) &&
980 std::isfinite(mwx) && std::isfinite(mwy) &&
981 std::isfinite(mwz) && std::isfinite(mwt)) {
982 checkForDeferredSave();
983 Push<TransformFullPerspectiveOp>(0,
984 mxx, mxy, mxz, mxt,
985 myx, myy, myz, myt,
986 mzx, mzy, mzz, mzt,
987 mwx, mwy, mwz, mwt);
988 global_state().transformFullPerspective(mxx, mxy, mxz, mxt,
989 myx, myy, myz, myt,
990 mzx, mzy, mzz, mzt,
991 mwx, mwy, mwz, mwt);
992 layer_local_state().transformFullPerspective(mxx, mxy, mxz, mxt,
993 myx, myy, myz, myt,
994 mzx, mzy, mzz, mzt,
995 mwx, mwy, mwz, mwt);
996 }
997}
void transformFullPerspective(DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt)

References flutter::DisplayListMatrixClipState::transformFullPerspective().

Referenced by flutter::BM_DisplayListBuilderWithPerspective(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), and Transform().

◆ TransformReset()

void flutter::DisplayListBuilder::TransformReset ( )
overridevirtual

Implements flutter::DlCanvas.

Definition at line 999 of file dl_builder.cc.

999 {
1000 checkForDeferredSave();
1001 Push<TransformResetOp>(0);
1002
1003 // The matrices in layer_tracker_ and tracker_ are similar, but
1004 // start at a different base transform. The tracker_ potentially
1005 // has some number of transform operations on it that prefix the
1006 // operations accumulated in layer_tracker_. So we can't set them both
1007 // to identity in parallel as they would no longer maintain their
1008 // relationship to each other.
1009 // Instead we reinterpret this operation as transforming by the
1010 // inverse of the current transform. Doing so to tracker_ sets it
1011 // to identity so we can avoid the math there, but we must do the
1012 // math the long way for layer_tracker_. This becomes:
1013 // layer_tracker_.transform(tracker_.inverse());
1014 if (!layer_local_state().inverseTransform(global_state())) {
1015 // If the inverse operation failed then that means that either
1016 // the matrix above the current layer was singular, or the matrix
1017 // became singular while we were accumulating the current layer.
1018 // In either case, we should no longer be accumulating any
1019 // contents so we set the layer tracking transform to a singular one.
1020 layer_local_state().setTransform(DlMatrix::MakeScale({0.0f, 0.0f, 0.0f}));
1021 }
1022
1023 global_state().setIdentity();
1024}
void setTransform(const DlMatrix &matrix)
static constexpr Matrix MakeScale(const Vector3 &s)
Definition matrix.h:104

References impeller::Matrix::MakeScale(), flutter::DisplayListMatrixClipState::setIdentity(), and flutter::DisplayListMatrixClipState::setTransform().

Referenced by impeller::interop::DisplayListBuilder::ResetTransform(), SetTransform(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and flutter::testing::TEST_F().

◆ Translate()

void flutter::DisplayListBuilder::Translate ( DlScalar  tx,
DlScalar  ty 
)
overridevirtual

Implements flutter::DlCanvas.

Definition at line 905 of file dl_builder.cc.

905 {
906 if (std::isfinite(tx) && std::isfinite(ty) && (tx != 0.0 || ty != 0.0)) {
907 checkForDeferredSave();
908 Push<TranslateOp>(0, tx, ty);
909 global_state().translate(tx, ty);
910 layer_local_state().translate(tx, ty);
911 }
912}
void translate(DlScalar tx, DlScalar ty)

References flutter::DisplayListMatrixClipState::translate().

Referenced by flutter::BM_DisplayListBuilderWithGlobalSaveLayer(), flutter::BM_DisplayListBuilderWithScaleAndTranslate(), impeller::testing::CanRenderConicalGradientWithDithering(), impeller::testing::CanRenderLinearGradientWithDithering(), impeller::testing::CanRenderRadialGradientWithDithering(), impeller::testing::CanRenderSweepGradientWithDithering(), canvas_translate(), impeller::testing::DoGradientOvalStrokeMaskBlur(), impeller::testing::MaskBlurVariantTest(), flutter::testing::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), impeller::testing::TEST_P(), flutter::testing::TEST_P(), flutter::testing::TEST_P(), Transform2DAffine(), and impeller::interop::DisplayListBuilder::Translate().

Friends And Related Symbol Documentation

◆ DisplayListBuilderBenchmarkAccessor

DlOpReceiver & DisplayListBuilderBenchmarkAccessor ( DisplayListBuilder builder)
friend

Definition at line 11 of file dl_builder_benchmarks.cc.

11 {
12 return builder.asReceiver();
13}

◆ DisplayListBuilderTestingAccessor

DlOpReceiver & DisplayListBuilderTestingAccessor ( DisplayListBuilder builder)
friend

Definition at line 36 of file display_list_unittests.cc.

36 {
37 return builder.asReceiver();
38}

◆ DisplayListBuilderTestingAttributes

DlPaint DisplayListBuilderTestingAttributes ( DisplayListBuilder builder)
friend

Definition at line 40 of file display_list_unittests.cc.

40 {
41 return builder.CurrentAttributes();
42}

◆ DisplayListBuilderTestingLastOpIndex

int DisplayListBuilderTestingLastOpIndex ( DisplayListBuilder builder)
friend

Definition at line 44 of file display_list_unittests.cc.

44 {
45 return builder.LastOpIndex();
46}

Member Data Documentation

◆ kMaxCullRect

constexpr DlRect flutter::DisplayListBuilder::kMaxCullRect
staticconstexpr
Initial value:
=
DlRect::MakeLTRB(-1E9F, -1E9F, 1E9F, 1E9F)

Definition at line 32 of file dl_builder.h.

Referenced by flutter::DisplayListMatrixClipState::GetLocalCullCoverage().


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