Loading libs/hwui/FontRenderer.cpp +15 −14 Original line number Diff line number Diff line Loading @@ -378,9 +378,9 @@ void FontRenderer::checkInit() { void FontRenderer::updateDrawParams() { if (mCurrentQuadIndex != mLastQuadIndex) { mDrawOffsets.add((uint16_t*)(mLastQuadIndex * sizeof(uint16_t) * 6)); mDrawCounts.add(mCurrentQuadIndex - mLastQuadIndex); mDrawCacheTextures.add(mCurrentCacheTexture); uint16_t* offset = (uint16_t*)(mLastQuadIndex * sizeof(uint16_t) * 6); uint32_t count = mCurrentQuadIndex - mLastQuadIndex; mDrawBatch.add(TextBatch(offset, count, mCurrentCacheTexture)); mLastQuadIndex = mCurrentQuadIndex; } } Loading Loading @@ -438,26 +438,27 @@ void FontRenderer::issueDrawCommand() { caches.bindTexCoordsVertexPointer(force, buffer + offset); } for (uint32_t i = 0; i < mDrawOffsets.size(); i++) { uint16_t* offset = mDrawOffsets[i]; uint32_t count = mDrawCounts[i]; CacheTexture* texture = mDrawCacheTextures[i]; caches.activeTexture(0); glBindTexture(GL_TEXTURE_2D, texture->getTextureId()); GLuint lastId = 0; for (uint32_t i = 0; i < mDrawBatch.size(); i++) { const TextBatch& batch = mDrawBatch[i]; texture->setLinearFiltering(mLinearFiltering, false); GLuint id = batch.texture->getTextureId(); if (id != lastId) { glBindTexture(GL_TEXTURE_2D, id); batch.texture->setLinearFiltering(mLinearFiltering, false); lastId = id; } glDrawElements(GL_TRIANGLES, count * 6, GL_UNSIGNED_SHORT, offset); glDrawElements(GL_TRIANGLES, batch.count * 6, GL_UNSIGNED_SHORT, batch.offset); } mDrawn = true; mCurrentQuadIndex = 0; mLastQuadIndex = 0; mDrawOffsets.clear(); mDrawCounts.clear(); mDrawCacheTextures.clear(); mDrawBatch.clear(); } void FontRenderer::appendMeshQuadNoClip(float x1, float y1, float u1, float v1, Loading libs/hwui/FontRenderer.h +27 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "font/CacheTexture.h" #include "font/CachedGlyphInfo.h" #include "font/Font.h" #include "utils/SortedList.h" #include "Matrix.h" #include "Properties.h" Loading Loading @@ -180,9 +181,32 @@ private: bool mLinearFiltering; Vector<uint16_t*> mDrawOffsets; Vector<uint32_t> mDrawCounts; Vector<CacheTexture*> mDrawCacheTextures; struct TextBatch { TextBatch(): offset(NULL), count(0), texture(NULL) { } TextBatch(uint16_t* offset, uint32_t count, CacheTexture* texture): offset(offset), count(count), texture(texture) { } static int compare(const TextBatch& lhs, const TextBatch& rhs) { return lhs.texture->getTextureId() - rhs.texture->getTextureId(); } friend inline int strictly_order_type(const TextBatch& lhs, const TextBatch& rhs) { return compare(lhs, rhs) < 0; } friend inline int compare_type(const TextBatch& lhs, const TextBatch& rhs) { return compare(lhs, rhs); } uint16_t* offset; uint32_t count; CacheTexture* texture; }; SortedList<TextBatch> mDrawBatch; // RS constructs sp<RSC::RS> mRs; Loading libs/hwui/Properties.h +1 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ enum DebugLevel { #define PROPERTY_FBO_CACHE_SIZE "ro.hwui.fbo_cache_size" // These properties are defined in percentage (range 0..1) #define PROPERTY_TEXTURE_CACHE_FLUSH_RATE "ro.hwui.texture_cache_flush_rate" #define PROPERTY_TEXTURE_CACHE_FLUSH_RATE "ro.hwui.texture_cache_flushrate" // These properties are defined in pixels #define PROPERTY_TEXT_SMALL_CACHE_WIDTH "ro.hwui.text_small_cache_width" Loading libs/hwui/font/FontUtil.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ /////////////////////////////////////////////////////////////////////////////// #define DEFAULT_TEXT_SMALL_CACHE_WIDTH 1024 #define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 256 #define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 512 #define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048 #define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512 Loading Loading
libs/hwui/FontRenderer.cpp +15 −14 Original line number Diff line number Diff line Loading @@ -378,9 +378,9 @@ void FontRenderer::checkInit() { void FontRenderer::updateDrawParams() { if (mCurrentQuadIndex != mLastQuadIndex) { mDrawOffsets.add((uint16_t*)(mLastQuadIndex * sizeof(uint16_t) * 6)); mDrawCounts.add(mCurrentQuadIndex - mLastQuadIndex); mDrawCacheTextures.add(mCurrentCacheTexture); uint16_t* offset = (uint16_t*)(mLastQuadIndex * sizeof(uint16_t) * 6); uint32_t count = mCurrentQuadIndex - mLastQuadIndex; mDrawBatch.add(TextBatch(offset, count, mCurrentCacheTexture)); mLastQuadIndex = mCurrentQuadIndex; } } Loading Loading @@ -438,26 +438,27 @@ void FontRenderer::issueDrawCommand() { caches.bindTexCoordsVertexPointer(force, buffer + offset); } for (uint32_t i = 0; i < mDrawOffsets.size(); i++) { uint16_t* offset = mDrawOffsets[i]; uint32_t count = mDrawCounts[i]; CacheTexture* texture = mDrawCacheTextures[i]; caches.activeTexture(0); glBindTexture(GL_TEXTURE_2D, texture->getTextureId()); GLuint lastId = 0; for (uint32_t i = 0; i < mDrawBatch.size(); i++) { const TextBatch& batch = mDrawBatch[i]; texture->setLinearFiltering(mLinearFiltering, false); GLuint id = batch.texture->getTextureId(); if (id != lastId) { glBindTexture(GL_TEXTURE_2D, id); batch.texture->setLinearFiltering(mLinearFiltering, false); lastId = id; } glDrawElements(GL_TRIANGLES, count * 6, GL_UNSIGNED_SHORT, offset); glDrawElements(GL_TRIANGLES, batch.count * 6, GL_UNSIGNED_SHORT, batch.offset); } mDrawn = true; mCurrentQuadIndex = 0; mLastQuadIndex = 0; mDrawOffsets.clear(); mDrawCounts.clear(); mDrawCacheTextures.clear(); mDrawBatch.clear(); } void FontRenderer::appendMeshQuadNoClip(float x1, float y1, float u1, float v1, Loading
libs/hwui/FontRenderer.h +27 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "font/CacheTexture.h" #include "font/CachedGlyphInfo.h" #include "font/Font.h" #include "utils/SortedList.h" #include "Matrix.h" #include "Properties.h" Loading Loading @@ -180,9 +181,32 @@ private: bool mLinearFiltering; Vector<uint16_t*> mDrawOffsets; Vector<uint32_t> mDrawCounts; Vector<CacheTexture*> mDrawCacheTextures; struct TextBatch { TextBatch(): offset(NULL), count(0), texture(NULL) { } TextBatch(uint16_t* offset, uint32_t count, CacheTexture* texture): offset(offset), count(count), texture(texture) { } static int compare(const TextBatch& lhs, const TextBatch& rhs) { return lhs.texture->getTextureId() - rhs.texture->getTextureId(); } friend inline int strictly_order_type(const TextBatch& lhs, const TextBatch& rhs) { return compare(lhs, rhs) < 0; } friend inline int compare_type(const TextBatch& lhs, const TextBatch& rhs) { return compare(lhs, rhs); } uint16_t* offset; uint32_t count; CacheTexture* texture; }; SortedList<TextBatch> mDrawBatch; // RS constructs sp<RSC::RS> mRs; Loading
libs/hwui/Properties.h +1 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ enum DebugLevel { #define PROPERTY_FBO_CACHE_SIZE "ro.hwui.fbo_cache_size" // These properties are defined in percentage (range 0..1) #define PROPERTY_TEXTURE_CACHE_FLUSH_RATE "ro.hwui.texture_cache_flush_rate" #define PROPERTY_TEXTURE_CACHE_FLUSH_RATE "ro.hwui.texture_cache_flushrate" // These properties are defined in pixels #define PROPERTY_TEXT_SMALL_CACHE_WIDTH "ro.hwui.text_small_cache_width" Loading
libs/hwui/font/FontUtil.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ /////////////////////////////////////////////////////////////////////////////// #define DEFAULT_TEXT_SMALL_CACHE_WIDTH 1024 #define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 256 #define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 512 #define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048 #define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512 Loading