summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Seigo Nonaka <nona@google.com> 2017-08-14 14:22:56 -0700
committer Seigo Nonaka <nona@google.com> 2017-08-15 10:53:20 -0700
commit7cc3ee7091d9bcbc83879c0f84f9e5174716f285 (patch)
treea0dce402e4a3db070ccf0037b38058c7476ad1bc
parenta2991d045d549fb7570619ae658a23f10bee172e (diff)
Adjust font texture cache based on device density.
The main purpose of this CL is reducing font cache size of low-density device. The memory usage for the small RGBA texture will be Nexus 6P: 7,928,856 bytes (1408x1408) Nexus 5X: 4,734,976 bytes (1088x1088) These used to be 4,194,304 bytes Test: manually checked Bug: 64400885 Change-Id: Ied064a6d59909ad7fbeff74332973206436fbd34
-rw-r--r--libs/hwui/FontRenderer.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index bc4181075319..8b0346867cbc 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -99,13 +99,22 @@ FontRenderer::FontRenderer(const uint8_t* gammaTable)
}
auto deviceInfo = DeviceInfo::get();
+ auto displayInfo = deviceInfo->displayInfo();
int maxTextureSize = deviceInfo->maxTextureSize();
+ // Adjust cache size based on Pixel's desnsity.
+ constexpr float PIXEL_DENSITY = 2.6;
+ const float densityRatio = displayInfo.density / PIXEL_DENSITY;
+
// TODO: Most devices are hardcoded with this configuration, does it need to be dynamic?
- mSmallCacheWidth = std::min(1024, maxTextureSize);
- mSmallCacheHeight = std::min(1024, maxTextureSize);
- mLargeCacheWidth = std::min(2048, maxTextureSize);
- mLargeCacheHeight = std::min(1024, maxTextureSize);
+ mSmallCacheWidth =
+ OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
+ mSmallCacheHeight =
+ OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
+ mLargeCacheWidth =
+ OffscreenBuffer::computeIdealDimension(std::min(2048, maxTextureSize) * densityRatio);
+ mLargeCacheHeight =
+ OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
if (sLogFontRendererCreate) {
INIT_LOGD(" Text cache sizes, in pixels: %i x %i, %i x %i, %i x %i, %i x %i",