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