resubmit https://code.google.com/p/skia/source/detail?r=7883 (in the meantime we added capability to collect minidump and callstack if buildbot fails with heap coruption in windows. a few minor conflicts have been resolved)
Review URL: https://codereview.chromium.org/12840004
git-svn-id: http://skia.googlecode.com/svn/trunk/include@8233 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/pdf/SkPDFDevice.h b/pdf/SkPDFDevice.h
index 90379f9..f8261b5 100644
--- a/pdf/SkPDFDevice.h
+++ b/pdf/SkPDFDevice.h
@@ -30,6 +30,7 @@
class SkPDFObject;
class SkPDFShader;
class SkPDFStream;
+template <typename T> class SK_API SkTSet;
// Private classes.
struct ContentEntry;
@@ -132,12 +133,19 @@
SK_API SkPDFDict* getResourceDict();
/** Get the list of resources (PDF objects) used on this page.
- * @param resourceList A list to append the resources to.
+ * This method will add to newResourceObjects any objects that this method
+ * depends on, but not already in knownResourceObjects. This might operate
+ * recursively so if this object depends on another object and that object
+ * depends on two more, all three objects will be added.
+ *
+ * @param knownResourceObjects The set of resources to be ignored.
+ * @param newResourceObjects The set to append dependant resources to.
* @param recursive If recursive is true, get the resources of the
* device's resources recursively. (Useful for adding
* objects to the catalog.)
*/
- SK_API void getResources(SkTDArray<SkPDFObject*>* resourceList,
+ SK_API void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
+ SkTSet<SkPDFObject*>* newResourceObjects,
bool recursive) const;
/** Get the fonts used on this device.
diff --git a/pdf/SkPDFDocument.h b/pdf/SkPDFDocument.h
index cb786c7..8f4ee48 100644
--- a/pdf/SkPDFDocument.h
+++ b/pdf/SkPDFDocument.h
@@ -21,6 +21,7 @@
class SkPDFPage;
class SkPDFObject;
class SkWStream;
+template <typename T> class SK_API SkTSet;
/** \class SkPDFDocument
@@ -79,7 +80,8 @@
SkTDArray<SkPDFPage*> fPages;
SkTDArray<SkPDFDict*> fPageTree;
SkPDFDict* fDocCatalog;
- SkTDArray<SkPDFObject*> fPageResources;
+ SkTSet<SkPDFObject*>* fFirstPageResources;
+ SkTSet<SkPDFObject*>* fOtherPageResources;
SkTDArray<SkPDFObject*> fSubstitutes;
int fSecondPageFirstResourceIndex;