summaryrefslogtreecommitdiff
path: root/libs/hwui/TextureCache.cpp
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2018-08-02 17:02:45 +0900
committerJiyong Park <jiyong@google.com>2018-08-02 18:07:54 +0900
commit1581c348fc5d6cbf1673b3dbc5960637f891d488 (patch)
tree31e9444210520c28f42b9445fbc53daf68e5a0be /libs/hwui/TextureCache.cpp
parent7a01a307753309f198eacbb8a36e15428b38bbe7 (diff)
parentdecdaee091799aced8169d45632c923e2605214e (diff)
Merge QPR1.180718.001
Conflicts: core/java/android/provider/Settings.java core/jni/android_view_InputEventReceiver.cpp core/res/res/values/config.xml core/res/res/values/symbols.xml media/jni/Android.bp packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml packages/SystemUI/res/values/config.xml packages/SystemUI/src/com/android/keyguard/KeyguardConstants.java packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java services/core/java/com/android/server/ConnectivityService.java services/core/java/com/android/server/NetworkTimeUpdateService.java services/core/java/com/android/server/StorageManagerService.java services/core/java/com/android/server/Watchdog.java services/core/java/com/android/server/am/ActiveServices.java services/core/java/com/android/server/am/ActivityManagerService.java services/core/java/com/android/server/am/ActivityStack.java services/core/java/com/android/server/am/AppTaskImpl.java services/core/java/com/android/server/audio/AudioService.java services/core/java/com/android/server/wm/DisplayContent.java services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java telephony/java/android/telephony/CarrierConfigManager.java telephony/java/android/telephony/ims/ImsReasonInfo.java telephony/java/android/telephony/ims/feature/MmTelFeature.java telephony/java/com/android/internal/telephony/ISmsBaseImpl.java Change-Id: I3f98340699f9e31be03eaf23fdea70803c4cef42
Diffstat (limited to 'libs/hwui/TextureCache.cpp')
-rw-r--r--libs/hwui/TextureCache.cpp227
1 files changed, 0 insertions, 227 deletions
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
deleted file mode 100644
index 9d365fb29ebe..000000000000
--- a/libs/hwui/TextureCache.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <GLES2/gl2.h>
-
-#include <utils/Mutex.h>
-
-#include "Caches.h"
-#include "DeviceInfo.h"
-#include "Properties.h"
-#include "Texture.h"
-#include "TextureCache.h"
-#include "hwui/Bitmap.h"
-#include "utils/TraceUtils.h"
-
-namespace android {
-namespace uirenderer {
-
-///////////////////////////////////////////////////////////////////////////////
-// Constructors/destructor
-///////////////////////////////////////////////////////////////////////////////
-
-TextureCache::TextureCache()
- : mCache(LruCache<uint32_t, Texture*>::kUnlimitedCapacity)
- , mSize(0)
- , mMaxSize(DeviceInfo::multiplyByResolution(4 * 6)) // 6 screen-sized RGBA_8888 bitmaps
- , mFlushRate(.4f) {
- mCache.setOnEntryRemovedListener(this);
- mMaxTextureSize = DeviceInfo::get()->maxTextureSize();
- mDebugEnabled = Properties::debugLevel & kDebugCaches;
-}
-
-TextureCache::~TextureCache() {
- this->clear();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Size management
-///////////////////////////////////////////////////////////////////////////////
-
-uint32_t TextureCache::getSize() {
- return mSize;
-}
-
-uint32_t TextureCache::getMaxSize() {
- return mMaxSize;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Callbacks
-///////////////////////////////////////////////////////////////////////////////
-
-void TextureCache::operator()(uint32_t&, Texture*& texture) {
- // This will be called already locked
- if (texture) {
- mSize -= texture->bitmapSize;
- TEXTURE_LOGD("TextureCache::callback: name, removed size, mSize = %d, %d, %d", texture->id,
- texture->bitmapSize, mSize);
- if (mDebugEnabled) {
- ALOGD("Texture deleted, size = %d", texture->bitmapSize);
- }
- texture->deleteTexture();
- delete texture;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Caching
-///////////////////////////////////////////////////////////////////////////////
-
-void TextureCache::resetMarkInUse(void* ownerToken) {
- LruCache<uint32_t, Texture*>::Iterator iter(mCache);
- while (iter.next()) {
- if (iter.value()->isInUse == ownerToken) {
- iter.value()->isInUse = nullptr;
- }
- }
-}
-
-bool TextureCache::canMakeTextureFromBitmap(Bitmap* bitmap) {
- if (bitmap->width() > mMaxTextureSize || bitmap->height() > mMaxTextureSize) {
- ALOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)", bitmap->width(),
- bitmap->height(), mMaxTextureSize, mMaxTextureSize);
- return false;
- }
- return true;
-}
-
-Texture* TextureCache::createTexture(Bitmap* bitmap) {
- Texture* texture = new Texture(Caches::getInstance());
- texture->bitmapSize = bitmap->rowBytes() * bitmap->height();
- texture->generation = bitmap->getGenerationID();
- texture->upload(*bitmap);
- return texture;
-}
-
-// Returns a prepared Texture* that either is already in the cache or can fit
-// in the cache (and is thus added to the cache)
-Texture* TextureCache::getCachedTexture(Bitmap* bitmap) {
- if (bitmap->isHardware()) {
- auto textureIterator = mHardwareTextures.find(bitmap->getStableID());
- if (textureIterator == mHardwareTextures.end()) {
- Texture* texture = createTexture(bitmap);
- mHardwareTextures.insert(
- std::make_pair(bitmap->getStableID(), std::unique_ptr<Texture>(texture)));
- if (mDebugEnabled) {
- ALOGD("Texture created for hw bitmap size = %d", texture->bitmapSize);
- }
- return texture;
- }
- return textureIterator->second.get();
- }
-
- Texture* texture = mCache.get(bitmap->getStableID());
-
- if (!texture) {
- if (!canMakeTextureFromBitmap(bitmap)) {
- return nullptr;
- }
-
- const uint32_t size = bitmap->rowBytes() * bitmap->height();
- bool canCache = size < mMaxSize;
- // Don't even try to cache a bitmap that's bigger than the cache
- while (canCache && mSize + size > mMaxSize) {
- Texture* oldest = mCache.peekOldestValue();
- if (oldest && !oldest->isInUse) {
- mCache.removeOldest();
- } else {
- canCache = false;
- }
- }
-
- if (canCache) {
- texture = createTexture(bitmap);
- mSize += size;
- TEXTURE_LOGD("TextureCache::get: create texture(%p): name, size, mSize = %d, %d, %d",
- bitmap, texture->id, size, mSize);
- if (mDebugEnabled) {
- ALOGD("Texture created, size = %d", size);
- }
- mCache.put(bitmap->getStableID(), texture);
- }
- } else if (!texture->isInUse && bitmap->getGenerationID() != texture->generation) {
- // Texture was in the cache but is dirty, re-upload
- // TODO: Re-adjust the cache size if the bitmap's dimensions have changed
- texture->upload(*bitmap);
- texture->generation = bitmap->getGenerationID();
- }
-
- return texture;
-}
-
-bool TextureCache::prefetchAndMarkInUse(void* ownerToken, Bitmap* bitmap) {
- Texture* texture = getCachedTexture(bitmap);
- if (texture) {
- texture->isInUse = ownerToken;
- }
- return texture;
-}
-
-bool TextureCache::prefetch(Bitmap* bitmap) {
- return getCachedTexture(bitmap);
-}
-
-Texture* TextureCache::get(Bitmap* bitmap) {
- Texture* texture = getCachedTexture(bitmap);
-
- if (!texture) {
- if (!canMakeTextureFromBitmap(bitmap)) {
- return nullptr;
- }
- texture = createTexture(bitmap);
- texture->cleanup = true;
- }
-
- return texture;
-}
-
-bool TextureCache::destroyTexture(uint32_t pixelRefStableID) {
- auto hardwareIter = mHardwareTextures.find(pixelRefStableID);
- if (hardwareIter != mHardwareTextures.end()) {
- hardwareIter->second->deleteTexture();
- mHardwareTextures.erase(hardwareIter);
- return true;
- }
- return mCache.remove(pixelRefStableID);
-}
-
-void TextureCache::clear() {
- mCache.clear();
- for (auto& iter : mHardwareTextures) {
- iter.second->deleteTexture();
- }
- mHardwareTextures.clear();
- TEXTURE_LOGD("TextureCache:clear(), mSize = %d", mSize);
-}
-
-void TextureCache::flush() {
- if (mFlushRate >= 1.0f || mCache.size() == 0) return;
- if (mFlushRate <= 0.0f) {
- clear();
- return;
- }
-
- uint32_t targetSize = uint32_t(mSize * mFlushRate);
- TEXTURE_LOGD("TextureCache::flush: target size: %d", targetSize);
-
- while (mSize > targetSize) {
- mCache.removeOldest();
- }
-}
-
-}; // namespace uirenderer
-}; // namespace android