diff options
author | Behdad Esfahbod <behdad@google.com> | 2014-08-21 19:14:14 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@google.com> | 2014-08-21 19:25:06 -0400 |
commit | 56c7fb8c0633f1b02115bb4370854016f8c84fb4 (patch) | |
tree | 3a03819cce4134d69ccbde7018f91c17ed59ddef | |
parent | 6da7796cbe8a17efd61a3302369e69bb222fdb4f (diff) | |
download | android_frameworks_minikin-56c7fb8c0633f1b02115bb4370854016f8c84fb4.tar.gz android_frameworks_minikin-56c7fb8c0633f1b02115bb4370854016f8c84fb4.tar.bz2 android_frameworks_minikin-56c7fb8c0633f1b02115bb4370854016f8c84fb4.zip |
Allocate font vector on stack
This reduces another allocation (last one?) we were doing when
fulfilling shaping requests from the cache.
Bug: 17111260
Change-Id: Ieb8ae1ccfcaacedb257e1e9263777f10623aaf98
-rw-r--r-- | libs/minikin/Layout.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp index 46819d6..c3d4c13 100644 --- a/libs/minikin/Layout.cpp +++ b/libs/minikin/Layout.cpp @@ -760,11 +760,16 @@ void Layout::doLayoutRun(const uint16_t* buf, size_t start, size_t count, size_t } void Layout::appendLayout(Layout* src, size_t start) { - // Note: size==1 is by far most common, should have specialized vector for this - std::vector<int> fontMap; + int fontMapStack[16]; + int* fontMap; + if (src->mFaces.size() < sizeof(fontMapStack) / sizeof(fontMapStack[0])) { + fontMap = fontMapStack; + } else { + fontMap = new int[src->mFaces.size()]; + } for (size_t i = 0; i < src->mFaces.size(); i++) { int font_ix = findFace(src->mFaces[i], NULL); - fontMap.push_back(font_ix); + fontMap[i] = font_ix; } int x0 = mAdvance; for (size_t i = 0; i < src->mGlyphs.size(); i++) { @@ -783,6 +788,10 @@ void Layout::appendLayout(Layout* src, size_t start) { srcBounds.offset(x0, 0); mBounds.join(srcBounds); mAdvance += src->mAdvance; + + if (fontMap != fontMapStack) { + delete[] fontMap; + } } void Layout::draw(Bitmap* surface, int x0, int y0, float size) const { |