1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_TILES_IMAGE_DECODE_CONTROLLER_H_
6 #define CC_TILES_IMAGE_DECODE_CONTROLLER_H_
8 #include "base/containers/hash_tables.h"
9 #include "base/memory/ref_counted.h"
10 #include "cc/base/cc_export.h"
11 #include "cc/raster/tile_task_runner.h"
12 #include "skia/ext/refptr.h"
13 #include "third_party/skia/include/core/SkPixelRef.h"
17 class ImageDecodeController
{
19 ImageDecodeController();
20 ~ImageDecodeController();
22 scoped_refptr
<ImageDecodeTask
> GetTaskForPixelRef(SkPixelRef
* pixel_ref
,
24 uint64_t prepare_tiles_id
);
26 // Note that this function has to remain thread safe.
27 void DecodePixelRef(SkPixelRef
* pixel_ref
);
29 // TODO(vmpstr): This should go away once the controller is decoding images
30 // based on priority and memory.
31 void AddLayerUsedCount(int layer_id
);
32 void SubtractLayerUsedCount(int layer_id
);
34 void OnImageDecodeTaskCompleted(int layer_id
,
35 SkPixelRef
* pixel_ref
,
39 scoped_refptr
<ImageDecodeTask
> CreateTaskForPixelRef(
40 SkPixelRef
* pixel_ref
,
42 uint64_t prepare_tiles_id
);
44 using PixelRefTaskMap
=
45 base::hash_map
<uint32_t, scoped_refptr
<ImageDecodeTask
>>;
46 using LayerPixelRefTaskMap
= base::hash_map
<int, PixelRefTaskMap
>;
47 LayerPixelRefTaskMap image_decode_tasks_
;
49 using LayerCountMap
= base::hash_map
<int, int>;
50 LayerCountMap used_layer_counts_
;
55 #endif // CC_TILES_IMAGE_DECODE_CONTROLLER_H_