19#include "flutter/third_party/skia/include/core/SkColorSpace.h"
20#include "flutter/third_party/skia/include/gpu/ganesh/GrDirectContext.h"
35 if (display_list ==
nullptr ||
48 unsigned int complexity_score = complexity_calculator->
Compute(display_list);
53 const sk_sp<DisplayList>& display_list,
54 const SkPoint& offset,
60 display_list_(display_list),
62 is_complex_(is_complex),
63 will_change_(will_change) {}
66 const sk_sp<DisplayList>& display_list,
67 const SkPoint& offset,
70 return std::make_unique<DisplayListRasterCacheItem>(
display_list, offset,
71 is_complex, will_change);
83 complexity_calculator)) {
89 transformation_matrix_.preTranslate(offset_.x(), offset_.y());
91 if (!transformation_matrix_.invert(
nullptr)) {
109 auto* raster_cache = context->raster_cache;
110 DlRect bounds = display_list_->GetBounds().Shift(offset_.x(), offset_.y());
135 if (!context.raster_cache || !canvas) {
139 return context.raster_cache->Draw(
key_id_, *canvas, paint,
145static const auto*
flow_type =
"RasterCacheFlow::DisplayList";
149 bool parent_cached)
const {
159 !context.raster_cache->GenerateNewCacheInThisFrame() || !
id.has_value()) {
163 ToSkRect(display_list_->GetBounds()).makeOffset(offset_.x(), offset_.y());
168 .matrix = transformation_matrix_,
169 .logical_rect = bounds,
173 return context.raster_cache->UpdateCacheEntry(
174 id.
value(), r_context,
178 display_list_->rtree());
static DisplayListComplexityCalculator * GetForBackend(GrBackendApi backend)
static DisplayListComplexityCalculator * GetForSoftware()
virtual bool ShouldBeCached(unsigned int complexity_score)=0
virtual unsigned int Compute(const DisplayList *display_list)=0
const DlRect & GetBounds() const
void PrerollSetup(PrerollContext *context, const DlMatrix &matrix) override
void PrerollFinalize(PrerollContext *context, const DlMatrix &matrix) override
bool TryToPrepareRasterCache(const PaintContext &context, bool parent_cached=false) const override
static std::unique_ptr< DisplayListRasterCacheItem > Make(const sk_sp< DisplayList > &, const SkPoint &offset, bool is_complex, bool will_change)
DisplayListRasterCacheItem(const sk_sp< DisplayList > &display_list, const SkPoint &offset, bool is_complex=true, bool will_change=false)
const DisplayList * display_list() const
bool Draw(const PaintContext &context, const DlPaint *paint) const override
Developer-facing API for rendering anything within the engine.
virtual void DrawDisplayList(const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1)=0
bool content_culled(const DlRect &content_bounds) const
static constexpr int kCallerCanApplyOpacity
virtual std::optional< RasterCacheKeyID > GetId() const
#define FML_DCHECK(condition)
static bool IsDisplayListWorthRasterizing(const DisplayList *display_list, bool will_change, bool is_complex, DisplayListComplexityCalculator *complexity_calculator)
SkMatrix ToSkMatrix(const DlMatrix &matrix)
static const auto * flow_type
const SkRect & ToSkRect(const DlRect &rect)
bool rendering_above_platform_view
sk_sp< SkColorSpace > dst_color_space
GrDirectContext * gr_context
GrDirectContext * gr_context
std::vector< RasterCacheItem * > * raster_cached_entries
LayerStateStack & state_stack
int renderable_state_flags
const size_t accesses_since_visible
GrDirectContext * gr_context
static bool CanRasterizeRect(const SkRect &cull_rect)
A 4x4 matrix using column-major storage.