Loading libs/hwui/Caches.cpp +14 −27 Original line number Diff line number Diff line Loading @@ -54,7 +54,6 @@ Caches::Caches(RenderState& renderState) , mInitialized(false) { INIT_LOGD("Creating OpenGL renderer caches"); init(); initFont(); initConstraints(); initStaticProperties(); initExtensions(); Loading @@ -78,10 +77,6 @@ bool Caches::init() { return true; } void Caches::initFont() { fontRenderer = GammaFontRenderer::createRenderer(); } void Caches::initExtensions() { if (mExtensions.hasDebugMarker()) { eventMark = glInsertEventMarkerEXT; Loading @@ -100,15 +95,9 @@ void Caches::initConstraints() { } void Caches::initStaticProperties() { gpuPixelBuffersEnabled = false; // OpenGL ES 3.0+ specific features if (mExtensions.hasPixelBufferObjects()) { char property[PROPERTY_VALUE_MAX]; if (property_get(PROPERTY_ENABLE_GPU_PIXEL_BUFFERS, property, "true") > 0) { gpuPixelBuffersEnabled = !strcmp(property, "true"); } } gpuPixelBuffersEnabled = mExtensions.hasPixelBufferObjects() && property_get_bool(PROPERTY_ENABLE_GPU_PIXEL_BUFFERS, true); } void Caches::terminate() { Loading Loading @@ -203,14 +192,14 @@ void Caches::dumpMemoryUsage(String8 &log) { dropShadowCache.getMaxSize()); log.appendFormat(" PatchCache %8d / %8d\n", patchCache.getSize(), patchCache.getMaxSize()); for (uint32_t i = 0; i < fontRenderer->getFontRendererCount(); i++) { const uint32_t sizeA8 = fontRenderer->getFontRendererSize(i, GL_ALPHA); const uint32_t sizeRGBA = fontRenderer->getFontRendererSize(i, GL_RGBA); log.appendFormat(" FontRenderer %d A8 %8d / %8d\n", i, sizeA8, sizeA8); log.appendFormat(" FontRenderer %d RGBA %8d / %8d\n", i, sizeRGBA, sizeRGBA); log.appendFormat(" FontRenderer %d total %8d / %8d\n", i, sizeA8 + sizeRGBA, const uint32_t sizeA8 = fontRenderer.getFontRendererSize(GL_ALPHA); const uint32_t sizeRGBA = fontRenderer.getFontRendererSize(GL_RGBA); log.appendFormat(" FontRenderer A8 %8d / %8d\n", sizeA8, sizeA8); log.appendFormat(" FontRenderer RGBA %8d / %8d\n", sizeRGBA, sizeRGBA); log.appendFormat(" FontRenderer total %8d / %8d\n", sizeA8 + sizeRGBA, sizeA8 + sizeRGBA); } log.appendFormat("Other:\n"); log.appendFormat(" FboCache %8d / %8d\n", fboCache.getSize(), fboCache.getMaxSize()); Loading @@ -222,10 +211,8 @@ void Caches::dumpMemoryUsage(String8 &log) { total += tessellationCache.getSize(); total += dropShadowCache.getSize(); total += patchCache.getSize(); for (uint32_t i = 0; i < fontRenderer->getFontRendererCount(); i++) { total += fontRenderer->getFontRendererSize(i, GL_ALPHA); total += fontRenderer->getFontRendererSize(i, GL_RGBA); } total += fontRenderer.getFontRendererSize(GL_ALPHA); total += fontRenderer.getFontRendererSize(GL_RGBA); log.appendFormat("Total memory usage:\n"); log.appendFormat(" %d bytes, %.2f MB\n", total, total / 1024.0f / 1024.0f); Loading @@ -250,12 +237,12 @@ void Caches::flush(FlushMode mode) { patchCache.clear(); dropShadowCache.clear(); gradientCache.clear(); fontRenderer->clear(); fontRenderer.clear(); fboCache.clear(); dither.clear(); // fall through case FlushMode::Moderate: fontRenderer->flush(); fontRenderer.flush(); textureCache.flush(); pathCache.clear(); tessellationCache.clear(); Loading libs/hwui/Caches.h +2 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "Dither.h" #include "Extensions.h" #include "FboCache.h" #include "GammaFontRenderer.h" #include "GradientCache.h" #include "LayerCache.h" #include "PatchCache.h" Loading Loading @@ -53,8 +54,6 @@ namespace android { namespace uirenderer { class GammaFontRenderer; /////////////////////////////////////////////////////////////////////////////// // Caches /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -156,7 +155,7 @@ public: TextDropShadowCache dropShadowCache; FboCache fboCache; GammaFontRenderer* fontRenderer; GammaFontRenderer fontRenderer; TaskManager tasks; Loading @@ -178,8 +177,6 @@ public: TextureState& textureState() { return *mTextureState; } private: void initFont(); void initExtensions(); void initConstraints(); void initStaticProperties(); Loading libs/hwui/DeferredDisplayList.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -631,7 +631,7 @@ static void replayBatchList(const std::vector<Batch*>& batchList, void DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) { ATRACE_NAME("flush drawing commands"); Caches::getInstance().fontRenderer->endPrecaching(); Caches::getInstance().fontRenderer.endPrecaching(); if (isEmpty()) return; // nothing to flush renderer.restoreToCount(1); Loading libs/hwui/DisplayListOp.h +2 −2 Original line number Diff line number Diff line Loading @@ -1246,7 +1246,7 @@ public: virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, const DeferredDisplayState& state) override { FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(mPaint); FontRenderer& fontRenderer = renderer.getCaches().fontRenderer.getFontRenderer(); fontRenderer.precache(mPaint, mText, mCount, SkMatrix::I()); deferInfo.batchId = mPaint->getColor() == SK_ColorBLACK ? Loading Loading @@ -1311,7 +1311,7 @@ public: virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, const DeferredDisplayState& state) override { FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(mPaint); FontRenderer& fontRenderer = renderer.getCaches().fontRenderer.getFontRenderer(); SkMatrix transform; renderer.findBestFontTransform(state.mMatrix, &transform); if (mPrecacheTransform != transform) { Loading libs/hwui/FontRenderer.cpp +10 −22 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ void TextDrawFunctor::draw(CacheTexture& texture, bool linearFiltering) { static bool sLogFontRendererCreate = true; FontRenderer::FontRenderer() : mGammaTable(nullptr) FontRenderer::FontRenderer(const uint8_t* gammaTable) : mGammaTable(gammaTable) , mCurrentFont(nullptr) , mActiveFonts(LruCache<Font::FontDescription, Font*>::kUnlimitedCapacity) , mCurrentCacheTexture(nullptr) Loading @@ -92,27 +92,15 @@ FontRenderer::FontRenderer() INIT_LOGD("Creating FontRenderer"); } mSmallCacheWidth = DEFAULT_TEXT_SMALL_CACHE_WIDTH; mSmallCacheHeight = DEFAULT_TEXT_SMALL_CACHE_HEIGHT; mLargeCacheWidth = DEFAULT_TEXT_LARGE_CACHE_WIDTH; mLargeCacheHeight = DEFAULT_TEXT_LARGE_CACHE_HEIGHT; mSmallCacheWidth = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_WIDTH, DEFAULT_TEXT_SMALL_CACHE_WIDTH); mSmallCacheHeight = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_HEIGHT, DEFAULT_TEXT_SMALL_CACHE_HEIGHT); char property[PROPERTY_VALUE_MAX]; if (property_get(PROPERTY_TEXT_SMALL_CACHE_WIDTH, property, nullptr) > 0) { mSmallCacheWidth = atoi(property); } if (property_get(PROPERTY_TEXT_SMALL_CACHE_HEIGHT, property, nullptr) > 0) { mSmallCacheHeight = atoi(property); } if (property_get(PROPERTY_TEXT_LARGE_CACHE_WIDTH, property, nullptr) > 0) { mLargeCacheWidth = atoi(property); } if (property_get(PROPERTY_TEXT_LARGE_CACHE_HEIGHT, property, nullptr) > 0) { mLargeCacheHeight = atoi(property); } mLargeCacheWidth = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_WIDTH, DEFAULT_TEXT_LARGE_CACHE_WIDTH); mLargeCacheHeight = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_HEIGHT, DEFAULT_TEXT_LARGE_CACHE_HEIGHT); uint32_t maxTextureSize = (uint32_t) Caches::getInstance().maxTextureSize; Loading Loading
libs/hwui/Caches.cpp +14 −27 Original line number Diff line number Diff line Loading @@ -54,7 +54,6 @@ Caches::Caches(RenderState& renderState) , mInitialized(false) { INIT_LOGD("Creating OpenGL renderer caches"); init(); initFont(); initConstraints(); initStaticProperties(); initExtensions(); Loading @@ -78,10 +77,6 @@ bool Caches::init() { return true; } void Caches::initFont() { fontRenderer = GammaFontRenderer::createRenderer(); } void Caches::initExtensions() { if (mExtensions.hasDebugMarker()) { eventMark = glInsertEventMarkerEXT; Loading @@ -100,15 +95,9 @@ void Caches::initConstraints() { } void Caches::initStaticProperties() { gpuPixelBuffersEnabled = false; // OpenGL ES 3.0+ specific features if (mExtensions.hasPixelBufferObjects()) { char property[PROPERTY_VALUE_MAX]; if (property_get(PROPERTY_ENABLE_GPU_PIXEL_BUFFERS, property, "true") > 0) { gpuPixelBuffersEnabled = !strcmp(property, "true"); } } gpuPixelBuffersEnabled = mExtensions.hasPixelBufferObjects() && property_get_bool(PROPERTY_ENABLE_GPU_PIXEL_BUFFERS, true); } void Caches::terminate() { Loading Loading @@ -203,14 +192,14 @@ void Caches::dumpMemoryUsage(String8 &log) { dropShadowCache.getMaxSize()); log.appendFormat(" PatchCache %8d / %8d\n", patchCache.getSize(), patchCache.getMaxSize()); for (uint32_t i = 0; i < fontRenderer->getFontRendererCount(); i++) { const uint32_t sizeA8 = fontRenderer->getFontRendererSize(i, GL_ALPHA); const uint32_t sizeRGBA = fontRenderer->getFontRendererSize(i, GL_RGBA); log.appendFormat(" FontRenderer %d A8 %8d / %8d\n", i, sizeA8, sizeA8); log.appendFormat(" FontRenderer %d RGBA %8d / %8d\n", i, sizeRGBA, sizeRGBA); log.appendFormat(" FontRenderer %d total %8d / %8d\n", i, sizeA8 + sizeRGBA, const uint32_t sizeA8 = fontRenderer.getFontRendererSize(GL_ALPHA); const uint32_t sizeRGBA = fontRenderer.getFontRendererSize(GL_RGBA); log.appendFormat(" FontRenderer A8 %8d / %8d\n", sizeA8, sizeA8); log.appendFormat(" FontRenderer RGBA %8d / %8d\n", sizeRGBA, sizeRGBA); log.appendFormat(" FontRenderer total %8d / %8d\n", sizeA8 + sizeRGBA, sizeA8 + sizeRGBA); } log.appendFormat("Other:\n"); log.appendFormat(" FboCache %8d / %8d\n", fboCache.getSize(), fboCache.getMaxSize()); Loading @@ -222,10 +211,8 @@ void Caches::dumpMemoryUsage(String8 &log) { total += tessellationCache.getSize(); total += dropShadowCache.getSize(); total += patchCache.getSize(); for (uint32_t i = 0; i < fontRenderer->getFontRendererCount(); i++) { total += fontRenderer->getFontRendererSize(i, GL_ALPHA); total += fontRenderer->getFontRendererSize(i, GL_RGBA); } total += fontRenderer.getFontRendererSize(GL_ALPHA); total += fontRenderer.getFontRendererSize(GL_RGBA); log.appendFormat("Total memory usage:\n"); log.appendFormat(" %d bytes, %.2f MB\n", total, total / 1024.0f / 1024.0f); Loading @@ -250,12 +237,12 @@ void Caches::flush(FlushMode mode) { patchCache.clear(); dropShadowCache.clear(); gradientCache.clear(); fontRenderer->clear(); fontRenderer.clear(); fboCache.clear(); dither.clear(); // fall through case FlushMode::Moderate: fontRenderer->flush(); fontRenderer.flush(); textureCache.flush(); pathCache.clear(); tessellationCache.clear(); Loading
libs/hwui/Caches.h +2 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "Dither.h" #include "Extensions.h" #include "FboCache.h" #include "GammaFontRenderer.h" #include "GradientCache.h" #include "LayerCache.h" #include "PatchCache.h" Loading Loading @@ -53,8 +54,6 @@ namespace android { namespace uirenderer { class GammaFontRenderer; /////////////////////////////////////////////////////////////////////////////// // Caches /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -156,7 +155,7 @@ public: TextDropShadowCache dropShadowCache; FboCache fboCache; GammaFontRenderer* fontRenderer; GammaFontRenderer fontRenderer; TaskManager tasks; Loading @@ -178,8 +177,6 @@ public: TextureState& textureState() { return *mTextureState; } private: void initFont(); void initExtensions(); void initConstraints(); void initStaticProperties(); Loading
libs/hwui/DeferredDisplayList.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -631,7 +631,7 @@ static void replayBatchList(const std::vector<Batch*>& batchList, void DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) { ATRACE_NAME("flush drawing commands"); Caches::getInstance().fontRenderer->endPrecaching(); Caches::getInstance().fontRenderer.endPrecaching(); if (isEmpty()) return; // nothing to flush renderer.restoreToCount(1); Loading
libs/hwui/DisplayListOp.h +2 −2 Original line number Diff line number Diff line Loading @@ -1246,7 +1246,7 @@ public: virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, const DeferredDisplayState& state) override { FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(mPaint); FontRenderer& fontRenderer = renderer.getCaches().fontRenderer.getFontRenderer(); fontRenderer.precache(mPaint, mText, mCount, SkMatrix::I()); deferInfo.batchId = mPaint->getColor() == SK_ColorBLACK ? Loading Loading @@ -1311,7 +1311,7 @@ public: virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, const DeferredDisplayState& state) override { FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(mPaint); FontRenderer& fontRenderer = renderer.getCaches().fontRenderer.getFontRenderer(); SkMatrix transform; renderer.findBestFontTransform(state.mMatrix, &transform); if (mPrecacheTransform != transform) { Loading
libs/hwui/FontRenderer.cpp +10 −22 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ void TextDrawFunctor::draw(CacheTexture& texture, bool linearFiltering) { static bool sLogFontRendererCreate = true; FontRenderer::FontRenderer() : mGammaTable(nullptr) FontRenderer::FontRenderer(const uint8_t* gammaTable) : mGammaTable(gammaTable) , mCurrentFont(nullptr) , mActiveFonts(LruCache<Font::FontDescription, Font*>::kUnlimitedCapacity) , mCurrentCacheTexture(nullptr) Loading @@ -92,27 +92,15 @@ FontRenderer::FontRenderer() INIT_LOGD("Creating FontRenderer"); } mSmallCacheWidth = DEFAULT_TEXT_SMALL_CACHE_WIDTH; mSmallCacheHeight = DEFAULT_TEXT_SMALL_CACHE_HEIGHT; mLargeCacheWidth = DEFAULT_TEXT_LARGE_CACHE_WIDTH; mLargeCacheHeight = DEFAULT_TEXT_LARGE_CACHE_HEIGHT; mSmallCacheWidth = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_WIDTH, DEFAULT_TEXT_SMALL_CACHE_WIDTH); mSmallCacheHeight = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_HEIGHT, DEFAULT_TEXT_SMALL_CACHE_HEIGHT); char property[PROPERTY_VALUE_MAX]; if (property_get(PROPERTY_TEXT_SMALL_CACHE_WIDTH, property, nullptr) > 0) { mSmallCacheWidth = atoi(property); } if (property_get(PROPERTY_TEXT_SMALL_CACHE_HEIGHT, property, nullptr) > 0) { mSmallCacheHeight = atoi(property); } if (property_get(PROPERTY_TEXT_LARGE_CACHE_WIDTH, property, nullptr) > 0) { mLargeCacheWidth = atoi(property); } if (property_get(PROPERTY_TEXT_LARGE_CACHE_HEIGHT, property, nullptr) > 0) { mLargeCacheHeight = atoi(property); } mLargeCacheWidth = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_WIDTH, DEFAULT_TEXT_LARGE_CACHE_WIDTH); mLargeCacheHeight = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_HEIGHT, DEFAULT_TEXT_LARGE_CACHE_HEIGHT); uint32_t maxTextureSize = (uint32_t) Caches::getInstance().maxTextureSize; Loading