[PDF] Improve efficiency of glyph id collection during font subsetting.
Patch from Arthur Hsu, original CL: http://codereview.appspot.com/4828044/
Review URL: http://codereview.appspot.com/4798057
git-svn-id: http://skia.googlecode.com/svn/trunk@1978 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index fce1202..5c2c00e 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -448,13 +448,9 @@
#if defined (SK_SFNTLY_SUBSETTER)
// Generate glyph id array.
- SkTDArray<unsigned int> glyphIDs;
+ SkTDArray<uint32_t> glyphIDs;
glyphIDs.push(0); // Always include glyph 0.
- for (int i = 0; i <= SK_MaxU16; ++i) {
- if (subset->has(i)) {
- glyphIDs.push(i);
- }
- }
+ subset->exportTo(&glyphIDs);
// Read font into buffer.
SkPDFStream* subsetFontStream = NULL;
@@ -462,6 +458,10 @@
originalFont.setCount(fontSize);
if (fontData->read(originalFont.begin(), fontSize) == (size_t)fontSize) {
unsigned char* subsetFont = NULL;
+ // sfntly requires unsigned int* to be passed in, as far as we know,
+ // unsigned int is equivalent to uint32_t on all platforms.
+ SK_COMPILE_ASSERT(sizeof(unsigned int) == sizeof(uint32_t),
+ unsigned_int_not_32_bits);
int subsetFontSize = SfntlyWrapper::SubsetFont(fontName,
originalFont.begin(),
fontSize,
@@ -509,6 +509,10 @@
fBitSet.orBits(usage.fBitSet);
}
+void SkPDFGlyphSet::exportTo(SkTDArray<unsigned int>* glyphIDs) const {
+ fBitSet.exportTo(glyphIDs);
+}
+
///////////////////////////////////////////////////////////////////////////////
// class SkPDFGlyphSetMap
///////////////////////////////////////////////////////////////////////////////