summaryrefslogtreecommitdiffstats
path: root/libs/minikin/Layout.cpp
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@google.com>2014-08-22 18:36:40 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-08-22 18:36:40 +0000
commit10d07727cf81c86352493e2241e17a0008c04bb5 (patch)
tree3361de4c23dd85f442c32b37ef039044c7dc80a8 /libs/minikin/Layout.cpp
parentc01aa1e323e078a3103219f3646b369c73126f2b (diff)
parent56c7fb8c0633f1b02115bb4370854016f8c84fb4 (diff)
downloadandroid_frameworks_minikin-10d07727cf81c86352493e2241e17a0008c04bb5.tar.gz
android_frameworks_minikin-10d07727cf81c86352493e2241e17a0008c04bb5.tar.bz2
android_frameworks_minikin-10d07727cf81c86352493e2241e17a0008c04bb5.zip
am 56c7fb8c: Allocate font vector on stack
* commit '56c7fb8c0633f1b02115bb4370854016f8c84fb4': Allocate font vector on stack
Diffstat (limited to 'libs/minikin/Layout.cpp')
-rw-r--r--libs/minikin/Layout.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp
index 897d85f..cfca18e 100644
--- a/libs/minikin/Layout.cpp
+++ b/libs/minikin/Layout.cpp
@@ -754,11 +754,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++) {
@@ -777,6 +782,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 {