| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrBatchFontCache.h" | 8 #include "GrBatchFontCache.h" |
| 9 #include "GrContext.h" | 9 #include "GrContext.h" |
| 10 #include "GrGpu.h" | 10 #include "GrGpu.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 (void*)this); | 33 (void*)this); |
| 34 if (!fAtlases[index]) { | 34 if (!fAtlases[index]) { |
| 35 return false; | 35 return false; |
| 36 } | 36 } |
| 37 } | 37 } |
| 38 return true; | 38 return true; |
| 39 } | 39 } |
| 40 | 40 |
| 41 GrBatchFontCache::GrBatchFontCache(GrContext* context) | 41 GrBatchFontCache::GrBatchFontCache(GrContext* context) |
| 42 : fContext(context) | 42 : fContext(context) |
| 43 , fPreserveStrike(NULL) { | 43 , fPreserveStrike(nullptr) { |
| 44 for (int i = 0; i < kMaskFormatCount; ++i) { | 44 for (int i = 0; i < kMaskFormatCount; ++i) { |
| 45 fAtlases[i] = NULL; | 45 fAtlases[i] = nullptr; |
| 46 } | 46 } |
| 47 | 47 |
| 48 // setup default atlas configs | 48 // setup default atlas configs |
| 49 fAtlasConfigs[kA8_GrMaskFormat].fWidth = 2048; | 49 fAtlasConfigs[kA8_GrMaskFormat].fWidth = 2048; |
| 50 fAtlasConfigs[kA8_GrMaskFormat].fHeight = 2048; | 50 fAtlasConfigs[kA8_GrMaskFormat].fHeight = 2048; |
| 51 fAtlasConfigs[kA8_GrMaskFormat].fPlotWidth = 512; | 51 fAtlasConfigs[kA8_GrMaskFormat].fPlotWidth = 512; |
| 52 fAtlasConfigs[kA8_GrMaskFormat].fPlotHeight = 256; | 52 fAtlasConfigs[kA8_GrMaskFormat].fPlotHeight = 256; |
| 53 | 53 |
| 54 fAtlasConfigs[kA565_GrMaskFormat].fWidth = 1024; | 54 fAtlasConfigs[kA565_GrMaskFormat].fWidth = 1024; |
| 55 fAtlasConfigs[kA565_GrMaskFormat].fHeight = 2048; | 55 fAtlasConfigs[kA565_GrMaskFormat].fHeight = 2048; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 77 void GrBatchFontCache::freeAll() { | 77 void GrBatchFontCache::freeAll() { |
| 78 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey>::Iter iter(&fCache); | 78 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey>::Iter iter(&fCache); |
| 79 while (!iter.done()) { | 79 while (!iter.done()) { |
| 80 (*iter).fIsAbandoned = true; | 80 (*iter).fIsAbandoned = true; |
| 81 (*iter).unref(); | 81 (*iter).unref(); |
| 82 ++iter; | 82 ++iter; |
| 83 } | 83 } |
| 84 fCache.rewind(); | 84 fCache.rewind(); |
| 85 for (int i = 0; i < kMaskFormatCount; ++i) { | 85 for (int i = 0; i < kMaskFormatCount; ++i) { |
| 86 delete fAtlases[i]; | 86 delete fAtlases[i]; |
| 87 fAtlases[i] = NULL; | 87 fAtlases[i] = nullptr; |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 | 90 |
| 91 void GrBatchFontCache::HandleEviction(GrBatchAtlas::AtlasID id, void* ptr) { | 91 void GrBatchFontCache::HandleEviction(GrBatchAtlas::AtlasID id, void* ptr) { |
| 92 GrBatchFontCache* fontCache = reinterpret_cast<GrBatchFontCache*>(ptr); | 92 GrBatchFontCache* fontCache = reinterpret_cast<GrBatchFontCache*>(ptr); |
| 93 | 93 |
| 94 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey>::Iter iter(&fontCache->fCac
he); | 94 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey>::Iter iter(&fontCache->fCac
he); |
| 95 for (; !iter.done(); ++iter) { | 95 for (; !iter.done(); ++iter) { |
| 96 GrBatchTextStrike* strike = &*iter; | 96 GrBatchTextStrike* strike = &*iter; |
| 97 strike->removeID(id); | 97 strike->removeID(id); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 124 } | 124 } |
| 125 ++gDumpCount; | 125 ++gDumpCount; |
| 126 } | 126 } |
| 127 | 127 |
| 128 void GrBatchFontCache::setAtlasSizes_ForTesting(const GrBatchAtlasConfig configs
[3]) { | 128 void GrBatchFontCache::setAtlasSizes_ForTesting(const GrBatchAtlasConfig configs
[3]) { |
| 129 // delete any old atlases, this should be safe to do as long as we are not i
n the middle of a | 129 // delete any old atlases, this should be safe to do as long as we are not i
n the middle of a |
| 130 // flush | 130 // flush |
| 131 for (int i = 0; i < kMaskFormatCount; i++) { | 131 for (int i = 0; i < kMaskFormatCount; i++) { |
| 132 if (fAtlases[i]) { | 132 if (fAtlases[i]) { |
| 133 delete fAtlases[i]; | 133 delete fAtlases[i]; |
| 134 fAtlases[i] = NULL; | 134 fAtlases[i] = nullptr; |
| 135 } | 135 } |
| 136 } | 136 } |
| 137 memcpy(fAtlasConfigs, configs, sizeof(fAtlasConfigs)); | 137 memcpy(fAtlasConfigs, configs, sizeof(fAtlasConfigs)); |
| 138 } | 138 } |
| 139 | 139 |
| 140 /////////////////////////////////////////////////////////////////////////////// | 140 /////////////////////////////////////////////////////////////////////////////// |
| 141 | 141 |
| 142 /* | 142 /* |
| 143 The text strike is specific to a given font/style/matrix setup, which is | 143 The text strike is specific to a given font/style/matrix setup, which is |
| 144 represented by the GrHostFontScaler object we are given in getGlyph(). | 144 represented by the GrHostFontScaler object we are given in getGlyph(). |
| (...skipping 17 matching lines...) Expand all Loading... |
| 162 (*iter).free(); | 162 (*iter).free(); |
| 163 ++iter; | 163 ++iter; |
| 164 } | 164 } |
| 165 } | 165 } |
| 166 | 166 |
| 167 GrGlyph* GrBatchTextStrike::generateGlyph(const SkGlyph& skGlyph, GrGlyph::Packe
dID packed, | 167 GrGlyph* GrBatchTextStrike::generateGlyph(const SkGlyph& skGlyph, GrGlyph::Packe
dID packed, |
| 168 GrFontScaler* scaler) { | 168 GrFontScaler* scaler) { |
| 169 SkIRect bounds; | 169 SkIRect bounds; |
| 170 if (GrGlyph::kDistance_MaskStyle == GrGlyph::UnpackMaskStyle(packed)) { | 170 if (GrGlyph::kDistance_MaskStyle == GrGlyph::UnpackMaskStyle(packed)) { |
| 171 if (!scaler->getPackedGlyphDFBounds(skGlyph, &bounds)) { | 171 if (!scaler->getPackedGlyphDFBounds(skGlyph, &bounds)) { |
| 172 return NULL; | 172 return nullptr; |
| 173 } | 173 } |
| 174 } else { | 174 } else { |
| 175 if (!scaler->getPackedGlyphBounds(skGlyph, &bounds)) { | 175 if (!scaler->getPackedGlyphBounds(skGlyph, &bounds)) { |
| 176 return NULL; | 176 return nullptr; |
| 177 } | 177 } |
| 178 } | 178 } |
| 179 GrMaskFormat format = scaler->getPackedGlyphMaskFormat(skGlyph); | 179 GrMaskFormat format = scaler->getPackedGlyphMaskFormat(skGlyph); |
| 180 | 180 |
| 181 GrGlyph* glyph = (GrGlyph*)fPool.alloc(sizeof(GrGlyph), SK_MALLOC_THROW); | 181 GrGlyph* glyph = (GrGlyph*)fPool.alloc(sizeof(GrGlyph), SK_MALLOC_THROW); |
| 182 glyph->init(packed, bounds, format); | 182 glyph->init(packed, bounds, format); |
| 183 fCache.add(glyph); | 183 fCache.add(glyph); |
| 184 return glyph; | 184 return glyph; |
| 185 } | 185 } |
| 186 | 186 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 | 225 |
| 226 bool success = fBatchFontCache->addToAtlas(this, &glyph->fID, target, expect
edMaskFormat, | 226 bool success = fBatchFontCache->addToAtlas(this, &glyph->fID, target, expect
edMaskFormat, |
| 227 glyph->width(), glyph->height(), | 227 glyph->width(), glyph->height(), |
| 228 storage.get(), &glyph->fAtlasLoca
tion); | 228 storage.get(), &glyph->fAtlasLoca
tion); |
| 229 if (success) { | 229 if (success) { |
| 230 SkASSERT(GrBatchAtlas::kInvalidAtlasID != glyph->fID); | 230 SkASSERT(GrBatchAtlas::kInvalidAtlasID != glyph->fID); |
| 231 fAtlasedGlyphs++; | 231 fAtlasedGlyphs++; |
| 232 } | 232 } |
| 233 return success; | 233 return success; |
| 234 } | 234 } |
| OLD | NEW |