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
17cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggipackage com.android.systemui.recents.model;
18cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
19cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport android.util.ArrayMap;
20cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport android.util.Log;
21cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport android.util.SparseArray;
22cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
23cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport com.android.systemui.recents.model.Task.TaskKey;
24cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
25cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggiimport java.io.PrintWriter;
26cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
27cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi/**
28cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi * Like {@link TaskKeyLruCache}, but without LRU functionality.
29cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi */
30cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggipublic class TaskKeyStrongCache<V> extends TaskKeyCache<V> {
31cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
32cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    private static final String TAG = "TaskKeyCache";
33cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
34cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    private final ArrayMap<Integer, V> mCache = new ArrayMap<>();
35cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
36cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    final void copyEntries(TaskKeyStrongCache<V> other) {
37cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        for (int i = other.mKeys.size() - 1; i >= 0; i--) {
38cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            TaskKey key = other.mKeys.valueAt(i);
39cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            put(key, other.mCache.get(key.id));
40cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        }
41cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
42cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
43cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    public void dump(String prefix, PrintWriter writer) {
44cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        String innerPrefix = prefix + "  ";
45cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.print(prefix); writer.print(TAG);
46cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.print(" numEntries="); writer.print(mKeys.size());
47cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        writer.println();
48cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        int keyCount = mKeys.size();
49cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        for (int i = 0; i < keyCount; i++) {
50cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi            writer.print(innerPrefix); writer.println(mKeys.get(mKeys.keyAt(i)));
51cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        }
52cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
53cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
54cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
55cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected V getCacheEntry(int id) {
56cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        return mCache.get(id);
57cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
58cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
59cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
60cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void putCacheEntry(int id, V value) {
61cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.put(id, value);
62cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
63cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
64cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
65cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void removeCacheEntry(int id) {
66cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.remove(id);
67cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
68cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi
69cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    @Override
70cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    protected void evictAllCache() {
71cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi        mCache.clear();
72cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi    }
73cdef591e52e691a6f57e367caa5670fdc4ee1a8aJorim Jaggi}
74