110 {
113
114 auto mutator = context.state_stack.save();
115 mutator.translate(offset_.
x(), offset_.
y());
116
117#if !SLIMPELLER
118 if (context.raster_cache) {
119
120
121 mutator.integralTransform();
122
123 if (display_list_raster_cache_item_) {
125 if (display_list_raster_cache_item_->Draw(
126 context, context.state_stack.fill(
paint))) {
128 return;
129 }
130 }
131 }
132#endif
133
134 SkScalar opacity = context.state_stack.outstanding_opacity();
135
136#if !SLIMPELLER
137
138 if (context.enable_leaf_layer_tracing) {
139 const auto canvas_size = context.canvas->GetBaseLayerSize();
140 auto offscreen_surface =
141 std::make_unique<OffscreenSurface>(context.gr_context, canvas_size);
142
143 const auto& ctm = context.canvas->GetTransform();
144
146 {
147
148 auto* canvas = offscreen_surface->GetCanvas();
149 {
150 DlAutoCanvasRestore save(canvas, true);
152 canvas->SetTransform(ctm);
153 canvas->DrawDisplayList(display_list_, opacity);
154 }
155 canvas->Flush();
156 }
159
160 const SkRect device_bounds =
162 sk_sp<SkData> raster_data = offscreen_surface->GetRasterData(
true);
163 LayerSnapshotData snapshot_data(
unique_id(), offscreen_render_time,
164 raster_data, device_bounds);
165 context.layer_snapshot_store->Add(snapshot_data);
166 }
167#endif
168
169 context.canvas->DrawDisplayList(display_list_, opacity);
170}
const SkRect & paint_bounds() const
bool needs_painting(PaintContext &context) const
static constexpr DlColor kTransparent()
static SkRect GetDeviceBounds(const SkRect &rect, const SkMatrix &ctm)
#define TRACE_EVENT_INSTANT0(category_group, name)