PDF: Canon now owns a reference to all interned objects
Add SkPDFCanon::reset function to unref all objects.
No longer possible to remove object from canon
Motivation: this doesn't change these object's lifetime, (they will
still be fully unrefed when SkDocument::close() is called, but we no
longer have to remove them from the array when their destructor is
called.
Review URL: https://codereview.chromium.org/966863002
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index d7a5044..0b66191 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -506,12 +506,10 @@
////////////////////////////////////////////////////////////////////////////////
-SkPDFFunctionShader::SkPDFFunctionShader(SkPDFCanon* canon,
- SkPDFShader::State* state)
- : SkPDFDict("Pattern"), fCanon(canon), fShaderState(state) {}
+SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state)
+ : SkPDFDict("Pattern"), fShaderState(state) {}
SkPDFFunctionShader::~SkPDFFunctionShader() {
- fCanon->removeFunctionShader(this);
fResources.unrefAll();
}
@@ -521,29 +519,25 @@
////////////////////////////////////////////////////////////////////////////////
-SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFCanon* canon,
- SkPDFShader::State* state)
- : fCanon(canon), fShaderState(state) {}
+SkPDFAlphaFunctionShader::SkPDFAlphaFunctionShader(SkPDFShader::State* state)
+ : fShaderState(state) {}
bool SkPDFAlphaFunctionShader::equals(const SkPDFShader::State& state) const {
return state == *fShaderState;
}
-SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() {
- fCanon->removeAlphaShader(this);
-}
+SkPDFAlphaFunctionShader::~SkPDFAlphaFunctionShader() {}
////////////////////////////////////////////////////////////////////////////////
-SkPDFImageShader::SkPDFImageShader(SkPDFCanon* canon, SkPDFShader::State* state)
- : fCanon(canon), fShaderState(state) {}
+SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state)
+ : fShaderState(state) {}
bool SkPDFImageShader::equals(const SkPDFShader::State& state) const {
return state == *fShaderState;
}
SkPDFImageShader::~SkPDFImageShader() {
- fCanon->removeImageShader(this);
fResources.unrefAll();
}
@@ -691,7 +685,7 @@
create_smask_graphic_state(canon, dpi, state));
SkPDFAlphaFunctionShader* alphaFunctionShader =
- SkNEW_ARGS(SkPDFAlphaFunctionShader, (canon, autoState->detach()));
+ SkNEW_ARGS(SkPDFAlphaFunctionShader, (autoState->detach()));
alphaFunctionShader->fColorShader.reset(colorShader);
@@ -897,7 +891,7 @@
SkPDFUtils::MatrixToArray(finalMatrix));
SkPDFFunctionShader* pdfFunctionShader =
- SkNEW_ARGS(SkPDFFunctionShader, (canon, autoState->detach()));
+ SkNEW_ARGS(SkPDFFunctionShader, (autoState->detach()));
pdfFunctionShader->fResources.push(function);
// Pass ownership to resource list.
@@ -1113,7 +1107,7 @@
SkAutoTDelete<SkStreamAsset> content(patternDevice->content());
SkPDFImageShader* imageShader =
- SkNEW_ARGS(SkPDFImageShader, (canon, autoState->detach()));
+ SkNEW_ARGS(SkPDFImageShader, (autoState->detach()));
imageShader->setData(content.get());
populate_tiling_pattern_dict(imageShader, patternBBox,