aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFTypes.cpp
diff options
context:
space:
mode:
authorGravatar edisonn@google.com <edisonn@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-02 15:33:08 +0000
committerGravatar edisonn@google.com <edisonn@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-02 15:33:08 +0000
commit6addb1930013ebb2f984045141650fd7afcfa90f (patch)
treedd4c38a7cb519486ecf9cf54c2f7a65ec85dcfca /src/pdf/SkPDFTypes.cpp
parentc52570475f00d5b62b8d82ba50b4b911dc38ce43 (diff)
added capability to collect minidump and callstack if buildbot fails with heap coruption in windows, and a NPE bug was fixed in SkPDFDocument, when document was destroyed without ever beeing used and a field was NULL + a few minor conflicts have been resolved) git-svn-id: http://skia.googlecode.com/svn/trunk@8487 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/pdf/SkPDFTypes.cpp')
-rw-r--r--src/pdf/SkPDFTypes.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp
index d479a22432..ed02d2bd12 100644
--- a/src/pdf/SkPDFTypes.cpp
+++ b/src/pdf/SkPDFTypes.cpp
@@ -41,7 +41,8 @@ size_t SkPDFObject::getOutputSize(SkPDFCatalog* catalog, bool indirect) {
return buffer.getOffset();
}
-void SkPDFObject::getResources(SkTDArray<SkPDFObject*>* resourceList) {}
+void SkPDFObject::getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
+ SkTSet<SkPDFObject*>* newResourceObjects) {}
void SkPDFObject::emitIndirectObject(SkWStream* stream, SkPDFCatalog* catalog) {
catalog->emitObjectNumber(stream, this);
@@ -61,14 +62,21 @@ void SkPDFObject::AddResourceHelper(SkPDFObject* resource,
resource->ref();
}
-void SkPDFObject::GetResourcesHelper(SkTDArray<SkPDFObject*>* resources,
- SkTDArray<SkPDFObject*>* result) {
+void SkPDFObject::GetResourcesHelper(
+ const SkTDArray<SkPDFObject*>* resources,
+ const SkTSet<SkPDFObject*>& knownResourceObjects,
+ SkTSet<SkPDFObject*>* newResourceObjects) {
if (resources->count()) {
- result->setReserve(result->count() + resources->count());
+ newResourceObjects->setReserve(
+ newResourceObjects->count() + resources->count());
for (int i = 0; i < resources->count(); i++) {
- result->push((*resources)[i]);
- (*resources)[i]->ref();
- (*resources)[i]->getResources(result);
+ if (!knownResourceObjects.contains((*resources)[i]) &&
+ !newResourceObjects->contains((*resources)[i])) {
+ newResourceObjects->add((*resources)[i]);
+ (*resources)[i]->ref();
+ (*resources)[i]->getResources(knownResourceObjects,
+ newResourceObjects);
+ }
}
}
}