PatchCache.cpp revision fb8b763f762ae21923c58d64caa729b012f40e05
1f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/* 2f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Copyright (C) 2010 The Android Open Source Project 3f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 4f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * you may not use this file except in compliance with the License. 6f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * You may obtain a copy of the License at 7f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 8f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 10f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Unless required by applicable law or agreed to in writing, software 11f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * See the License for the specific language governing permissions and 14f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * limitations under the License. 15f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy */ 16f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 17f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#define LOG_TAG "OpenGLRenderer" 18f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 19f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <utils/Log.h> 20f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <utils/ResourceTypes.h> 21f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 22f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include "PatchCache.h" 23fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "Properties.h" 24f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 25f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace android { 26f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace uirenderer { 27f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 28f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 29f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy// Constructors/destructor 30f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 31f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 32fb8b763f762ae21923c58d64caa729b012f40e05Romain GuyPatchCache::PatchCache(): mCache(DEFAULT_PATCH_CACHE_SIZE) { 33fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy} 34fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 35f7f93556c8fcc640ab5adef79d021a80a72a645aRomain GuyPatchCache::PatchCache(uint32_t maxEntries): mCache(maxEntries) { 36f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy} 37f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 38f7f93556c8fcc640ab5adef79d021a80a72a645aRomain GuyPatchCache::~PatchCache() { 39f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy clear(); 40f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy} 41f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 42f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 43f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy// Callbacks 44f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 45f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 46f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guyvoid PatchCache::operator()(PatchDescription& description, Patch*& mesh) { 47f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy if (mesh) delete mesh; 48f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy} 49f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 50f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 51f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy// Caching 52f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/////////////////////////////////////////////////////////////////////////////// 53f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 54f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guyvoid PatchCache::clear() { 55f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy mCache.setOnEntryRemovedListener(this); 56f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy mCache.clear(); 57f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy mCache.setOnEntryRemovedListener(NULL); 58f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy} 59f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 60f7f93556c8fcc640ab5adef79d021a80a72a645aRomain GuyPatch* PatchCache::get(const Res_png_9patch* patch) { 61f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy const uint32_t width = patch->numXDivs; 62f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy const uint32_t height = patch->numYDivs; 63f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy const PatchDescription description(width, height); 64f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 65f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy Patch* mesh = mCache.get(description); 66f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy if (!mesh) { 67f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy PATCH_LOGD("Creating new patch mesh, w=%d h=%d", width, height); 68f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy mesh = new Patch(width, height); 69f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy mCache.put(description, mesh); 70f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy } 71f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 72f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy return mesh; 73f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy} 74f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 75f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace uirenderer 76f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace android 77