1a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling/* 2a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Copyright (C) 2013 The Android Open Source Project 3a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * 4a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Licensed under the Apache License, Version 2.0 (the "License"); 5a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * you may not use this file except in compliance with the License. 6a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * You may obtain a copy of the License at 7a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * 8a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * http://www.apache.org/licenses/LICENSE-2.0 9a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * 10a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Unless required by applicable law or agreed to in writing, software 11a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * distributed under the License is distributed on an "AS IS" BASIS, 12a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * See the License for the specific language governing permissions and 14a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * limitations under the License. 15a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 16a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 17a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberlingpackage com.android.camera.app; 18a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 190aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayanimport java.util.HashMap; 200aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan 21a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling/** 22a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Keeps track of memory used by the app and informs modules and services if 23a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * memory gets low. 24a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 25a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberlingpublic interface MemoryManager { 26a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** 27a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Classes implementing this interface will be able to get updates about 28a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * memory status changes. 29a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 30a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public static interface MemoryListener { 31a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** 32a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Called when the app is experiencing a change in memory state. Modules 33a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * should listen to these to not exceed the available memory. 34a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * 35a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * @param state the new state, one of {@link MemoryManager#STATE_OK}, 36a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * {@link MemoryManager#STATE_LOW_MEMORY}, 37a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 38a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public void onMemoryStateChanged(int state); 39a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 40a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** 41a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Called when the system is about to kill our app due to high memory 42a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * load. 43a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 44a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public void onLowMemory(); 45a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling } 46a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 47a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** The memory status is OK. The app can function as normal. */ 48a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public static final int STATE_OK = 0; 49a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 50a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** The memory is running low. E.g. no new media should be captured. */ 51a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public static final int STATE_LOW_MEMORY = 1; 52a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 53a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** 54a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Add a new listener that is informed about upcoming memory events. 55a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 56a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public void addListener(MemoryListener listener); 57a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling 58a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling /** 59a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Removes an already registered listener. 60a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */ 61a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling public void removeListener(MemoryListener listener); 6210809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling 6310809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling /** 6477d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling * Returns the maximum amount of memory allowed to be allocated in native 6577d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling * code by our app (in megabytes). 6610809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling */ 6777d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling public int getMaxAllowedNativeMemoryAllocation(); 680aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan 690aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan /** 700aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan * Queries the memory consumed, total memory, and memory thresholds for this app. 710aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan * 720aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan * @return HashMap containing memory metrics keyed by string labels 730aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan * defined in {@link MemoryQuery}. 740aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan */ 751fc61197e36b25c593e8b0e95a10a9167d7d621eSascha Häberling public HashMap queryMemory(); 76a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling} 77