blob: 8509775589077695775979b73b06ef8bccfe2586 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_FLOW_RASTER_CACHE_ITEM_H_
#define FLUTTER_FLOW_RASTER_CACHE_ITEM_H_
#include <memory>
#include <optional>
#include "flutter/flow/raster_cache_key.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPicture.h"
#include "include/core/SkPoint.h"
namespace flutter {
struct PrerollContext;
struct PaintContext;
class DisplayList;
class RasterCache;
class LayerRasterCacheItem;
class DisplayListRasterCacheItem;
class SkPictureRasterCacheItem;
class RasterCacheItem {
public:
enum CacheState {
kNone = 0,
kCurrent,
kChildren,
};
explicit RasterCacheItem(RasterCacheKeyID key_id,
CacheState cache_state = CacheState::kNone,
unsigned child_entries = 0)
: key_id_(key_id),
cache_state_(cache_state),
child_items_(child_entries) {}
virtual void PrerollSetup(PrerollContext* context,
const SkMatrix& matrix) = 0;
virtual void PrerollFinalize(PrerollContext* context,
const SkMatrix& matrix) = 0;
virtual bool Draw(const PaintContext& context,
const SkPaint* paint) const = 0;
virtual bool Draw(const PaintContext& context,
SkCanvas* canvas,
const SkPaint* paint) const = 0;
virtual std::optional<RasterCacheKeyID> GetId() const { return key_id_; }
virtual bool TryToPrepareRasterCache(const PaintContext& context,
bool parent_cached = false) const = 0;
unsigned child_items() const { return child_items_; }
void set_matrix(const SkMatrix& matrix) { matrix_ = matrix; }
CacheState cache_state() const { return cache_state_; }
bool need_caching() const { return cache_state_ != CacheState::kNone; }
virtual ~RasterCacheItem() = default;
protected:
// The id for cache the layer self.
RasterCacheKeyID key_id_;
CacheState cache_state_ = CacheState::kNone;
mutable SkMatrix matrix_;
unsigned child_items_;
};
} // namespace flutter
#endif // FLUTTER_FLOW_RASTER_CACHE_ITEM_H_