106 {
109
110 auto mutator = context.state_stack.save();
111 mutator.translate(offset_.
x(), offset_.
y());
112
113 if (context.raster_cache) {
114
115
116 mutator.integralTransform();
117
118 if (display_list_raster_cache_item_) {
120 if (display_list_raster_cache_item_->Draw(
121 context, context.state_stack.fill(
paint))) {
123 return;
124 }
125 }
126 }
127
128 SkScalar opacity = context.state_stack.outstanding_opacity();
129
130 if (context.enable_leaf_layer_tracing) {
131 const auto canvas_size = context.canvas->GetBaseLayerSize();
132 auto offscreen_surface =
133 std::make_unique<OffscreenSurface>(context.gr_context, canvas_size);
134
135 const auto& ctm = context.canvas->GetTransform();
136
138 {
139
140 auto* canvas = offscreen_surface->GetCanvas();
141 {
142 DlAutoCanvasRestore save(canvas, true);
144 canvas->SetTransform(ctm);
145 canvas->DrawDisplayList(display_list_, opacity);
146 }
147 canvas->Flush();
148 }
151
152 const SkRect device_bounds =
154 sk_sp<SkData> raster_data = offscreen_surface->GetRasterData(
true);
155 LayerSnapshotData snapshot_data(
unique_id(), offscreen_render_time,
156 raster_data, device_bounds);
157 context.layer_snapshot_store->Add(snapshot_data);
158 }
159
160 context.canvas->DrawDisplayList(display_list_, opacity);
161}
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)