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

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

Issue 846023003: In SkPDFDocument::emitPDF(), stop pre-calculating file offsets. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nit: space between functions Created 5 years, 11 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/pdf/SkPDFCatalog.h ('k') | src/pdf/SkPDFDocument.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 /* 2 /*
3 * Copyright 2010 The Android Open Source Project 3 * Copyright 2010 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkPDFCatalog.h" 10 #include "SkPDFCatalog.h"
(...skipping 20 matching lines...) Expand all
31 SkASSERT(fNextFirstPageObjNum == 0); 31 SkASSERT(fNextFirstPageObjNum == 0);
32 if (onFirstPage) { 32 if (onFirstPage) {
33 fFirstPageCount++; 33 fFirstPageCount++;
34 } 34 }
35 35
36 struct Rec newEntry(obj, onFirstPage); 36 struct Rec newEntry(obj, onFirstPage);
37 fCatalog.append(1, &newEntry); 37 fCatalog.append(1, &newEntry);
38 return obj; 38 return obj;
39 } 39 }
40 40
41 size_t SkPDFCatalog::setFileOffset(SkPDFObject* obj, off_t offset) { 41 void SkPDFCatalog::setFileOffset(SkPDFObject* obj, off_t offset) {
42 int objIndex = assignObjNum(obj) - 1; 42 int objIndex = assignObjNum(obj) - 1;
43 SkASSERT(fCatalog[objIndex].fObjNumAssigned); 43 SkASSERT(fCatalog[objIndex].fObjNumAssigned);
44 SkASSERT(fCatalog[objIndex].fFileOffset == 0); 44 SkASSERT(fCatalog[objIndex].fFileOffset == 0);
45 fCatalog[objIndex].fFileOffset = offset; 45 fCatalog[objIndex].fFileOffset = offset;
46
47 return getSubstituteObject(obj)->getOutputSize(this, true);
48 } 46 }
49 47
50 void SkPDFCatalog::emitObjectNumber(SkWStream* stream, SkPDFObject* obj) { 48 void SkPDFCatalog::emitObjectNumber(SkWStream* stream, SkPDFObject* obj) {
51 stream->writeDecAsText(assignObjNum(obj)); 49 stream->writeDecAsText(assignObjNum(obj));
52 stream->writeText(" 0"); // Generation number is always 0. 50 stream->writeText(" 0"); // Generation number is always 0.
53 } 51 }
54 52
55 size_t SkPDFCatalog::getObjectNumberSize(SkPDFObject* obj) { 53 size_t SkPDFCatalog::getObjectNumberSize(SkPDFObject* obj) {
56 SkDynamicMemoryWStream buffer; 54 SkDynamicMemoryWStream buffer;
57 emitObjectNumber(&buffer, obj); 55 emitObjectNumber(&buffer, obj);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 183
186 SkPDFObject* SkPDFCatalog::getSubstituteObject(SkPDFObject* object) { 184 SkPDFObject* SkPDFCatalog::getSubstituteObject(SkPDFObject* object) {
187 for (int i = 0; i < fSubstituteMap.count(); ++i) { 185 for (int i = 0; i < fSubstituteMap.count(); ++i) {
188 if (object == fSubstituteMap[i].fOriginal) { 186 if (object == fSubstituteMap[i].fOriginal) {
189 return fSubstituteMap[i].fSubstitute; 187 return fSubstituteMap[i].fSubstitute;
190 } 188 }
191 } 189 }
192 return object; 190 return object;
193 } 191 }
194 192
195 off_t SkPDFCatalog::setSubstituteResourcesOffsets(off_t fileOffset,
196 bool firstPage) {
197 SkTSet<SkPDFObject*>* targetSet = getSubstituteList(firstPage);
198 off_t offsetSum = fileOffset;
199 for (int i = 0; i < targetSet->count(); ++i) {
200 offsetSum += SkToOffT(setFileOffset((*targetSet)[i], offsetSum));
201 }
202 return offsetSum - fileOffset;
203 }
204
205 void SkPDFCatalog::emitSubstituteResources(SkWStream *stream, bool firstPage) {
206 SkTSet<SkPDFObject*>* targetSet = getSubstituteList(firstPage);
207 for (int i = 0; i < targetSet->count(); ++i) {
208 (*targetSet)[i]->emit(stream, this, true);
209 }
210 }
211
212 SkTSet<SkPDFObject*>* SkPDFCatalog::getSubstituteList(bool firstPage) { 193 SkTSet<SkPDFObject*>* SkPDFCatalog::getSubstituteList(bool firstPage) {
213 return firstPage ? &fSubstituteResourcesFirstPage : 194 return firstPage ? &fSubstituteResourcesFirstPage :
214 &fSubstituteResourcesRemaining; 195 &fSubstituteResourcesRemaining;
215 } 196 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFCatalog.h ('k') | src/pdf/SkPDFDocument.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698