LayerCache.h revision dda570201ac851dd85af3861f7e575721d3345da
14aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/* 24aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Copyright (C) 2010 The Android Open Source Project 34aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 44aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 54aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * you may not use this file except in compliance with the License. 64aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * You may obtain a copy of the License at 74aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 84aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 94aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Unless required by applicable law or agreed to in writing, software 114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * See the License for the specific language governing permissions and 144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * limitations under the License. 154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#ifndef ANDROID_UI_LAYER_CACHE_H 184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define ANDROID_UI_LAYER_CACHE_H 19d5a85fb63d91a9297e8d9a11016f3b3ed60dfbabRomain Guy 20c46d07a29e94807e768f8b162ce9f77a88ba6f46Romain Guy#include "Layer.h" 219c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "GenerationCache.h" 226554943a1dd6854c0f4976900956e556767b49e1Romain Guy 236554943a1dd6854c0f4976900956e556767b49e1Romain Guynamespace android { 24113e0824d6bddf4376240681f9cf6a2deded9498John Recknamespace uirenderer { 25c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craik 269c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haaseclass LayerCache: public OnEntryRemoved<LayerSize, Layer*> { 272af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craikpublic: 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy LayerCache(uint32_t maxByteSize); 29113e0824d6bddf4376240681f9cf6a2deded9498John Reck ~LayerCache(); 3013631f3da855f200a151e7837ed9f6b079622b58Romain Guy 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy /** 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Used as a callback when an entry is removed from the cache. 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Do not invoke directly. 3458ecc204fbcacef34806290492384677a330d4d4Romain Guy */ 35eea6ef9c767c734797912022113191dd255c4ae6Chris Craik void operator()(LayerSize& bitmap, Layer*& texture); 3654c1a64d5441a964890b44280e4457e11f4f924aRomain Guy 37eea6ef9c767c734797912022113191dd255c4ae6Chris Craik /** 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Returns the layer of specified dimensions, NULL if cannot be found. 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Layer* get(LayerSize& size); 4144fd8d24f761f82d21e9b00932648a1b6bf91449John Reck /** 4244fd8d24f761f82d21e9b00932648a1b6bf91449John Reck * Adds the layer to the cache. The layer will not be added if there is 434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * not enough space available. 444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 4544fd8d24f761f82d21e9b00932648a1b6bf91449John Reck * @return True if the layer was added, false otherwise. 4644fd8d24f761f82d21e9b00932648a1b6bf91449John Reck */ 4744fd8d24f761f82d21e9b00932648a1b6bf91449John Reck bool put(LayerSize& size, Layer* layer); 48d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase /** 4944fd8d24f761f82d21e9b00932648a1b6bf91449John Reck * Clears the cache. This causes all layers to be deleted. 5043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy */ 51735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy void clear(); 522fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 5344fd8d24f761f82d21e9b00932648a1b6bf91449John Reck /** 5444fd8d24f761f82d21e9b00932648a1b6bf91449John Reck * Sets the maximum size of the cache in bytes. 5544fd8d24f761f82d21e9b00932648a1b6bf91449John Reck */ 565977baa1fa24125c148a72699b53e62abaf08960Chet Haase void setMaxSize(uint32_t maxSize); 575977baa1fa24125c148a72699b53e62abaf08960Chet Haase /** 587c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guy * Returns the maximum size of the cache in bytes. 597d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy */ 6044fd8d24f761f82d21e9b00932648a1b6bf91449John Reck uint32_t getMaxSize(); 6144fd8d24f761f82d21e9b00932648a1b6bf91449John Reck /** 6244fd8d24f761f82d21e9b00932648a1b6bf91449John Reck * Returns the current size of the cache in bytes. 6344fd8d24f761f82d21e9b00932648a1b6bf91449John Reck */ 6444fd8d24f761f82d21e9b00932648a1b6bf91449John Reck uint32_t getSize(); 6514e513058ed4168c94e015638d16f5f87fd8063aChris Craik 6645e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guyprivate: 6745e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy void deleteLayer(Layer* layer); 6827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 6945e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy GenerationCache<LayerSize, Layer*> mCache; 7044b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase 7127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy uint32_t mSize; 7227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy uint32_t mMaxSize; 7327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy}; // class LayerCache 7427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 752af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik}; // namespace uirenderer 76b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}; // namespace android 77b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 78daf98e941e140e8739458126640183b9f296a2abChet Haase#endif // ANDROID_UI_LAYER_CACHE_H 79daf98e941e140e8739458126640183b9f296a2abChet Haase