// Copyright 2015 The Chromium 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 CC_TILES_IMAGE_DECODE_CONTROLLER_H_ #define CC_TILES_IMAGE_DECODE_CONTROLLER_H_ #include "base/containers/hash_tables.h" #include "base/memory/ref_counted.h" #include "cc/base/cc_export.h" #include "cc/playback/discardable_image_map.h" #include "cc/raster/tile_task_runner.h" #include "skia/ext/refptr.h" namespace cc { class ImageDecodeController { public: ImageDecodeController(); ~ImageDecodeController(); scoped_refptr GetTaskForImage(const DrawImage& image, int layer_id, uint64_t prepare_tiles_id); // Note that this function has to remain thread safe. void DecodeImage(const SkImage* image); // TODO(vmpstr): This should go away once the controller is decoding images // based on priority and memory. void AddLayerUsedCount(int layer_id); void SubtractLayerUsedCount(int layer_id); void OnImageDecodeTaskCompleted(int layer_id, const SkImage* image, bool was_canceled); private: scoped_refptr CreateTaskForImage(const SkImage* image, int layer_id, uint64_t prepare_tiles_id); using ImageTaskMap = base::hash_map>; using LayerImageTaskMap = base::hash_map; LayerImageTaskMap image_decode_tasks_; using LayerCountMap = base::hash_map; LayerCountMap used_layer_counts_; }; } // namespace cc #endif // CC_TILES_IMAGE_DECODE_CONTROLLER_H_