diff options
author | Brian Salomon <bsalomon@google.com> | 2017-08-11 09:40:37 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-08-11 14:13:26 +0000 |
commit | aff329b8e9b239bca1d93b13a914fbef45ccf7fe (patch) | |
tree | 06ba42a557c6695f145bcf4956c981fc87af55ff /src/gpu/GrProcessorSet.cpp | |
parent | e2cbd0451832ec71d1b498e0f64d02b7d096b2b7 (diff) |
Make GrFragmentProcessor be non-refcounted and use std::unique_ptr.
Change-Id: I985e54a071338e99292a5aa2f42c92bc115b4008
Reviewed-on: https://skia-review.googlesource.com/32760
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/gpu/GrProcessorSet.cpp')
-rw-r--r-- | src/gpu/GrProcessorSet.cpp | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp index 20d6745cad..cb4a25f799 100644 --- a/src/gpu/GrProcessorSet.cpp +++ b/src/gpu/GrProcessorSet.cpp @@ -29,11 +29,11 @@ GrProcessorSet::GrProcessorSet(GrPaint&& paint) : fXP(paint.getXPFactory()) { int i = 0; for (auto& fp : paint.fColorFragmentProcessors) { SkASSERT(fp.get()); - fFragmentProcessors[i++] = fp.release(); + fFragmentProcessors[i++] = std::move(fp); } for (auto& fp : paint.fCoverageFragmentProcessors) { SkASSERT(fp.get()); - fFragmentProcessors[i++] = fp.release(); + fFragmentProcessors[i++] = std::move(fp); } } else { SkDebugf("Insane number of color fragment processors in paint. Dropping all processors."); @@ -47,14 +47,14 @@ GrProcessorSet::GrProcessorSet(SkBlendMode mode) , fFragmentProcessorOffset(0) , fFlags(0) {} -GrProcessorSet::GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP) +GrProcessorSet::GrProcessorSet(std::unique_ptr<GrFragmentProcessor> colorFP) : fFragmentProcessors(1) , fXP((const GrXPFactory*)nullptr) , fColorFragmentProcessorCnt(1) , fFragmentProcessorOffset(0) , fFlags(0) { SkASSERT(colorFP); - fFragmentProcessors[0] = colorFP.release(); + fFragmentProcessors[0] = std::move(colorFP); } GrProcessorSet::GrProcessorSet(GrProcessorSet&& that) @@ -64,20 +64,14 @@ GrProcessorSet::GrProcessorSet(GrProcessorSet&& that) , fFlags(that.fFlags) { fFragmentProcessors.reset(that.fFragmentProcessors.count() - that.fFragmentProcessorOffset); for (int i = 0; i < fFragmentProcessors.count(); ++i) { - fFragmentProcessors[i] = that.fFragmentProcessors[i + that.fFragmentProcessorOffset]; + fFragmentProcessors[i] = + std::move(that.fFragmentProcessors[i + that.fFragmentProcessorOffset]); } that.fColorFragmentProcessorCnt = 0; that.fFragmentProcessors.reset(0); } GrProcessorSet::~GrProcessorSet() { - for (int i = fFragmentProcessorOffset; i < fFragmentProcessors.count(); ++i) { - if (this->isFinalized()) { - fFragmentProcessors[i]->completedExecution(); - } else { - fFragmentProcessors[i]->unref(); - } - } if (this->isFinalized() && this->xferProcessor()) { this->xferProcessor()->unref(); } @@ -173,8 +167,10 @@ GrProcessorSet::Analysis GrProcessorSet::finalize(const GrProcessorAnalysisColor analysis.fCompatibleWithCoverageAsAlpha = GrProcessorAnalysisCoverage::kLCD != coverageInput; const GrFragmentProcessor* clipFP = clip ? clip->clipCoverageFragmentProcessor() : nullptr; - const GrFragmentProcessor* const* fps = fFragmentProcessors.get() + fFragmentProcessorOffset; - GrColorFragmentProcessorAnalysis colorAnalysis(colorInput, fps, fColorFragmentProcessorCnt); + const std::unique_ptr<const GrFragmentProcessor>* fps = + fFragmentProcessors.get() + fFragmentProcessorOffset; + GrColorFragmentProcessorAnalysis colorAnalysis( + colorInput, unique_ptr_address_as_pointer_address(fps), fColorFragmentProcessorCnt); analysis.fCompatibleWithCoverageAsAlpha &= colorAnalysis.allProcessorsCompatibleWithCoverageAsAlpha(); fps += fColorFragmentProcessorCnt; @@ -236,12 +232,10 @@ GrProcessorSet::Analysis GrProcessorSet::finalize(const GrProcessorAnalysisColor analysis.fUsesLocalCoords = coverageUsesLocalCoords | colorAnalysis.usesLocalCoords(); } for (int i = 0; i < colorFPsToEliminate; ++i) { - fFragmentProcessors[i]->unref(); - fFragmentProcessors[i] = nullptr; + fFragmentProcessors[i].reset(nullptr); } for (int i = colorFPsToEliminate; i < fFragmentProcessors.count(); ++i) { - fFragmentProcessors[i]->addPendingExecution(); - fFragmentProcessors[i]->unref(); + fFragmentProcessors[i]->markPendingExecution(); } fFragmentProcessorOffset = colorFPsToEliminate; fColorFragmentProcessorCnt -= colorFPsToEliminate; |