1cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi/*
2cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * Copyright (C) 2017 The Android Open Source Project
3cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi *
4cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
5cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * you may not use this file except in compliance with the License.
6cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * You may obtain a copy of the License at
7cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi *
8cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
9cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi *
10cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * Unless required by applicable law or agreed to in writing, software
11cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
12cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * See the License for the specific language governing permissions and
14cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * limitations under the License
15cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi */
16cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
176519c1b0fe85c5f25115539e936e4333e8537098Winson Chungpackage com.android.systemui.shared.recents.model;
18cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
19cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport android.util.ArrayMap;
20cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
216519c1b0fe85c5f25115539e936e4333e8537098Winson Chungimport com.android.systemui.shared.recents.model.Task.TaskKey;
22cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
23cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport java.io.PrintWriter;
24cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
25cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi/**
26cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * Like {@link TaskKeyLruCache}, but without LRU functionality.
27cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi */
28cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggipublic class TaskKeyStrongCache<V> extends TaskKeyCache<V> {
29cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
30cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    private static final String TAG = "TaskKeyCache";
31cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
32cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    private final ArrayMap<Integer, V> mCache = new ArrayMap<>();
33cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
34cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    final void copyEntries(TaskKeyStrongCache<V> other) {
35cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        for (int i = other.mKeys.size() - 1; i >= 0; i--) {
36cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            TaskKey key = other.mKeys.valueAt(i);
37cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            put(key, other.mCache.get(key.id));
38cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        }
39cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
40cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
41cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    public void dump(String prefix, PrintWriter writer) {
42cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        String innerPrefix = prefix + "  ";
43cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.print(prefix); writer.print(TAG);
44cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.print(" numEntries="); writer.print(mKeys.size());
45cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.println();
46cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        int keyCount = mKeys.size();
47cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        for (int i = 0; i < keyCount; i++) {
48cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            writer.print(innerPrefix); writer.println(mKeys.get(mKeys.keyAt(i)));
49cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        }
50cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
51cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
52cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
53cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected V getCacheEntry(int id) {
54cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        return mCache.get(id);
55cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
56cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
57cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
58cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void putCacheEntry(int id, V value) {
59cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.put(id, value);
60cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
61cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
62cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
63cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void removeCacheEntry(int id) {
64cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.remove(id);
65cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
66cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
67cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
68cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void evictAllCache() {
69cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.clear();
70cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
71cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi}
72