// 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. #include "flutter/flow/layers/cacheable_layer.h" namespace flutter { AutoCache::AutoCache(CacheableLayer& cacheable_layer, PrerollContext* context, bool caching_enabled) { if (context->raster_cache && caching_enabled) { raster_cache_item_ = cacheable_layer.realize_raster_cache_item(); if (raster_cache_item_) { context_ = context; matrix_ = context->state_stack.transform_3x3(); raster_cache_item_->PrerollSetup(context_, matrix_); } } else { cacheable_layer.disable_raster_cache_item(); } } AutoCache::~AutoCache() { if (raster_cache_item_) { raster_cache_item_->PrerollFinalize(context_, matrix_); } } RasterCacheItem* CacheableContainerLayer::realize_raster_cache_item() { if (!layer_raster_cache_item_) { layer_raster_cache_item_ = LayerRasterCacheItem::Make( this, layer_cache_threshold_, can_cache_children_); } return layer_raster_cache_item_.get(); } void CacheableContainerLayer::disable_raster_cache_item() { if (layer_raster_cache_item_) { layer_raster_cache_item_->reset_cache_state(); } } } // namespace flutter