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

Side by Side Diff: src/pdf/SkPDFTypes.h

Issue 2190883003: SkPDF: PDFStream has-a not is-a PDFDict (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-07-29 (Friday) 12:30:20 EDT Created 4 years, 4 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/SkPDFStream.cpp ('k') | src/pdf/SkPDFTypes.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 2010 The Android Open Source Project 2 * Copyright 2010 The Android Open Source Project
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 8
9 #ifndef SkPDFTypes_DEFINED 9 #ifndef SkPDFTypes_DEFINED
10 #define SkPDFTypes_DEFINED 10 #define SkPDFTypes_DEFINED
11 11
12 #include "SkRefCnt.h" 12 #include "SkRefCnt.h"
13 #include "SkScalar.h" 13 #include "SkScalar.h"
14 #include "SkTHash.h" 14 #include "SkTHash.h"
15 #include "SkTypes.h" 15 #include "SkTypes.h"
16 16
17 class SkData;
17 class SkPDFObjNumMap; 18 class SkPDFObjNumMap;
18 class SkPDFObject; 19 class SkPDFObject;
19 class SkPDFSubstituteMap; 20 class SkPDFSubstituteMap;
20 class SkStreamAsset; 21 class SkStreamAsset;
21 class SkString; 22 class SkString;
22 class SkWStream; 23 class SkWStream;
23 24
24 #ifdef SK_PDF_IMAGE_STATS 25 #ifdef SK_PDF_IMAGE_STATS
25 #include "SkAtomics.h" 26 #include "SkAtomics.h"
26 #endif 27 #endif
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 301
301 /** \class SkPDFSharedStream 302 /** \class SkPDFSharedStream
302 303
303 This class takes an asset and assumes that it is backed by 304 This class takes an asset and assumes that it is backed by
304 long-lived shared data (for example, an open file 305 long-lived shared data (for example, an open file
305 descriptor). That is: no memory savings can be made by holding on 306 descriptor). That is: no memory savings can be made by holding on
306 to a compressed version instead. 307 to a compressed version instead.
307 */ 308 */
308 class SkPDFSharedStream final : public SkPDFObject { 309 class SkPDFSharedStream final : public SkPDFObject {
309 public: 310 public:
310 // Takes ownership of asset. 311 SkPDFSharedStream(std::unique_ptr<SkStreamAsset> data);
311 SkPDFSharedStream(SkStreamAsset* data);
312 ~SkPDFSharedStream(); 312 ~SkPDFSharedStream();
313 SkPDFDict* dict() { return fDict.get(); } 313 SkPDFDict* dict() { return &fDict; }
314 void emitObject(SkWStream*, 314 void emitObject(SkWStream*,
315 const SkPDFObjNumMap&, 315 const SkPDFObjNumMap&,
316 const SkPDFSubstituteMap&) const override; 316 const SkPDFSubstituteMap&) const override;
317 void addResources(SkPDFObjNumMap*, 317 void addResources(SkPDFObjNumMap*,
318 const SkPDFSubstituteMap&) const override; 318 const SkPDFSubstituteMap&) const override;
319 void drop() override; 319 void drop() override;
320 320
321 private: 321 private:
322 std::unique_ptr<SkStreamAsset> fAsset; 322 std::unique_ptr<SkStreamAsset> fAsset;
323 sk_sp<SkPDFDict> fDict; 323 SkPDFDict fDict;
324 SkDEBUGCODE(bool fDumped;)
325 typedef SkPDFObject INHERITED; 324 typedef SkPDFObject INHERITED;
326 }; 325 };
327 326
327 /** \class SkPDFStream
328
329 This class takes an asset and assumes that it is the only owner of
330 the asset's data. It immediately compresses the asset to save
331 memory.
332 */
333
334 class SkPDFStream : public SkPDFObject {
335
336 public:
337 /** Create a PDF stream. A Length entry is automatically added to the
338 * stream dictionary.
339 * @param data The data part of the stream.
340 * @param stream The data part of the stream. */
341 explicit SkPDFStream(sk_sp<SkData> data);
342 explicit SkPDFStream(std::unique_ptr<SkStreamAsset> stream);
343 virtual ~SkPDFStream();
344
345 SkPDFDict* dict() { return &fDict; }
346
347 // The SkPDFObject interface.
348 void emitObject(SkWStream* stream,
349 const SkPDFObjNumMap& objNumMap,
350 const SkPDFSubstituteMap& substitutes) const override;
351 void addResources(SkPDFObjNumMap*, const SkPDFSubstituteMap&) const final;
352 void drop() override;
353
354 protected:
355 /* Create a PDF stream with no data. The setData method must be called to
356 * set the data. */
357 SkPDFStream();
358
359 /** Only call this function once. */
360 void setData(std::unique_ptr<SkStreamAsset> stream);
361
362 private:
363 std::unique_ptr<SkStreamAsset> fCompressedData;
364 SkPDFDict fDict;
365
366 typedef SkPDFDict INHERITED;
367 };
368
328 //////////////////////////////////////////////////////////////////////////////// 369 ////////////////////////////////////////////////////////////////////////////////
329 370
330 /** \class SkPDFObjNumMap 371 /** \class SkPDFObjNumMap
331 372
332 The PDF Object Number Map manages object numbers. It is used to 373 The PDF Object Number Map manages object numbers. It is used to
333 create the PDF cross reference table. 374 create the PDF cross reference table.
334 */ 375 */
335 class SkPDFObjNumMap : SkNoncopyable { 376 class SkPDFObjNumMap : SkNoncopyable {
336 public: 377 public:
337 /** Add the passed object to the catalog. 378 /** Add the passed object to the catalog.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 }; 428 };
388 429
389 #ifdef SK_PDF_IMAGE_STATS 430 #ifdef SK_PDF_IMAGE_STATS
390 extern SkAtomic<int> gDrawImageCalls; 431 extern SkAtomic<int> gDrawImageCalls;
391 extern SkAtomic<int> gJpegImageObjects; 432 extern SkAtomic<int> gJpegImageObjects;
392 extern SkAtomic<int> gRegularImageObjects; 433 extern SkAtomic<int> gRegularImageObjects;
393 extern void SkPDFImageDumpStats(); 434 extern void SkPDFImageDumpStats();
394 #endif // SK_PDF_IMAGE_STATS 435 #endif // SK_PDF_IMAGE_STATS
395 436
396 #endif 437 #endif
OLDNEW
« no previous file with comments | « src/pdf/SkPDFStream.cpp ('k') | src/pdf/SkPDFTypes.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698