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