Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: src/pdf/SkPDFFont.cpp

Issue 560653004: SkData can allocate room for its contents in the same block (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update dox, change fPtr to non const Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/images/SkDecodingImageGenerator.cpp ('k') | src/pdf/SkPDFGraphicState.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 <ctype.h> 8 #include <ctype.h>
9 9
10 #include "SkData.h" 10 #include "SkData.h"
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // this handles releasing the data we may have gotten from dynamicStream. 197 // this handles releasing the data we may have gotten from dynamicStream.
198 // if data is null, it is a no-op 198 // if data is null, it is a no-op
199 SkAutoDataUnref aud(data); 199 SkAutoDataUnref aud(data);
200 200
201 if (parsePFB(src, srcLen, headerLen, dataLen, trailerLen)) { 201 if (parsePFB(src, srcLen, headerLen, dataLen, trailerLen)) {
202 static const int kPFBSectionHeaderLength = 6; 202 static const int kPFBSectionHeaderLength = 6;
203 const size_t length = *headerLen + *dataLen + *trailerLen; 203 const size_t length = *headerLen + *dataLen + *trailerLen;
204 SkASSERT(length > 0); 204 SkASSERT(length > 0);
205 SkASSERT(length + (2 * kPFBSectionHeaderLength) <= srcLen); 205 SkASSERT(length + (2 * kPFBSectionHeaderLength) <= srcLen);
206 206
207 SkAutoTMalloc<uint8_t> buffer(length); 207 SkData* data = SkData::NewUninitialized(length);
208 208
209 const uint8_t* const srcHeader = src + kPFBSectionHeaderLength; 209 const uint8_t* const srcHeader = src + kPFBSectionHeaderLength;
210 // There is a six-byte section header before header and data 210 // There is a six-byte section header before header and data
211 // (but not trailer) that we're not going to copy. 211 // (but not trailer) that we're not going to copy.
212 const uint8_t* const srcData 212 const uint8_t* const srcData = srcHeader + *headerLen + kPFBSectionHeade rLength;
213 = srcHeader + *headerLen + kPFBSectionHeaderLength;
214 const uint8_t* const srcTrailer = srcData + *headerLen; 213 const uint8_t* const srcTrailer = srcData + *headerLen;
215 214
216 uint8_t* const resultHeader = buffer.get(); 215 uint8_t* const resultHeader = (uint8_t*)data->writable_data();
217 uint8_t* const resultData = resultHeader + *headerLen; 216 uint8_t* const resultData = resultHeader + *headerLen;
218 uint8_t* const resultTrailer = resultData + *dataLen; 217 uint8_t* const resultTrailer = resultData + *dataLen;
219 218
220 SkASSERT(resultTrailer + *trailerLen == resultHeader + length); 219 SkASSERT(resultTrailer + *trailerLen == resultHeader + length);
221 220
222 memcpy(resultHeader, srcHeader, *headerLen); 221 memcpy(resultHeader, srcHeader, *headerLen);
223 memcpy(resultData, srcData, *dataLen); 222 memcpy(resultData, srcData, *dataLen);
224 memcpy(resultTrailer, srcTrailer, *trailerLen); 223 memcpy(resultTrailer, srcTrailer, *trailerLen);
225 224
226 return SkData::NewFromMalloc(buffer.detach(), length); 225 return data;
227 } 226 }
228 227
229 // A PFA has to be converted for PDF. 228 // A PFA has to be converted for PDF.
230 size_t hexDataLen; 229 size_t hexDataLen;
231 if (parsePFA((const char*)src, srcLen, headerLen, &hexDataLen, dataLen, 230 if (parsePFA((const char*)src, srcLen, headerLen, &hexDataLen, dataLen,
232 trailerLen)) { 231 trailerLen)) {
233 const size_t length = *headerLen + *dataLen + *trailerLen; 232 const size_t length = *headerLen + *dataLen + *trailerLen;
234 SkASSERT(length > 0); 233 SkASSERT(length > 0);
235 SkAutoTMalloc<uint8_t> buffer(length); 234 SkAutoTMalloc<uint8_t> buffer(length);
236 235
(...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 1489
1491 insert("FontBBox", makeFontBBox(bbox, 1000))->unref(); 1490 insert("FontBBox", makeFontBBox(bbox, 1000))->unref();
1492 insertInt("FirstChar", 1); 1491 insertInt("FirstChar", 1);
1493 insertInt("LastChar", lastGlyphID() - firstGlyphID() + 1); 1492 insertInt("LastChar", lastGlyphID() - firstGlyphID() + 1);
1494 insert("Widths", widthArray.get()); 1493 insert("Widths", widthArray.get());
1495 insertName("CIDToGIDMap", "Identity"); 1494 insertName("CIDToGIDMap", "Identity");
1496 1495
1497 populateToUnicodeTable(NULL); 1496 populateToUnicodeTable(NULL);
1498 return true; 1497 return true;
1499 } 1498 }
OLDNEW
« no previous file with comments | « src/images/SkDecodingImageGenerator.cpp ('k') | src/pdf/SkPDFGraphicState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698