aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkTInternalLList.h15
-rw-r--r--src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp26
2 files changed, 22 insertions, 19 deletions
diff --git a/src/core/SkTInternalLList.h b/src/core/SkTInternalLList.h
index df06d8a255..2f43f1c1eb 100644
--- a/src/core/SkTInternalLList.h
+++ b/src/core/SkTInternalLList.h
@@ -250,10 +250,25 @@ public:
return fCurr;
}
+ /**
+ * C++11 range-for interface.
+ */
+ bool operator!=(const Iter& that) { return fCurr != that.fCurr; }
+ T* operator*() { return this->get(); }
+ void operator++() { this->next(); }
+
private:
T* fCurr;
};
+ Iter begin() const {
+ Iter iter;
+ iter.init(*this, Iter::kHead_IterStart);
+ return iter;
+ }
+
+ Iter end() const { return Iter(); }
+
#ifdef SK_DEBUG
void validate() const {
SkASSERT(!fHead == !fTail);
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
index 4358d21e24..eadd9a7d7c 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
@@ -178,21 +178,17 @@ void GrCoverageCountingPathRenderer::preFlush(GrOnFlushResourceProvider* onFlush
}
const GrCCRTPendingPaths& rtPendingPaths = iter->second;
- SkTInternalLList<GrCCDrawPathsOp>::Iter drawOpsIter;
- drawOpsIter.init(rtPendingPaths.fDrawOps,
- SkTInternalLList<GrCCDrawPathsOp>::Iter::kHead_IterStart);
- while (GrCCDrawPathsOp* op = drawOpsIter.get()) {
+ for (const GrCCDrawPathsOp* op : rtPendingPaths.fDrawOps) {
for (const GrCCDrawPathsOp::SingleDraw* draw = op->head(); draw; draw = draw->fNext) {
- ++numPathDraws;
flushingPathStats.statPath(draw->fPath);
+ ++numPathDraws;
}
- drawOpsIter.next();
}
- numClipPaths += rtPendingPaths.fClipPaths.size();
for (const auto& clipsIter : rtPendingPaths.fClipPaths) {
flushingPathStats.statPath(clipsIter.second.deviceSpacePath());
}
+ numClipPaths += rtPendingPaths.fClipPaths.size();
fFlushingRTPathIters.push_back(std::move(iter));
}
@@ -209,23 +205,15 @@ void GrCoverageCountingPathRenderer::preFlush(GrOnFlushResourceProvider* onFlush
// Layout atlas(es) and parse paths.
SkDEBUGCODE(int numSkippedPaths = 0);
- for (int i = 0; i < numOpListIDs; ++i) {
- auto it = fRTPendingPathsMap.find(opListIDs[i]);
- if (fRTPendingPathsMap.end() == it) {
- continue;
- }
- GrCCRTPendingPaths& rtPendingPaths = it->second;
+ for (const auto& iter : fFlushingRTPathIters) {
+ GrCCRTPendingPaths* rtPendingPaths = &iter->second;
- SkTInternalLList<GrCCDrawPathsOp>::Iter drawOpsIter;
- drawOpsIter.init(rtPendingPaths.fDrawOps,
- SkTInternalLList<GrCCDrawPathsOp>::Iter::kHead_IterStart);
- while (GrCCDrawPathsOp* op = drawOpsIter.get()) {
+ for (GrCCDrawPathsOp* op : rtPendingPaths->fDrawOps) {
op->setupResources(resources.get(), onFlushRP);
- drawOpsIter.next();
SkDEBUGCODE(numSkippedPaths += op->numSkippedInstances_debugOnly());
}
- for (auto& clipsIter : rtPendingPaths.fClipPaths) {
+ for (auto& clipsIter : rtPendingPaths->fClipPaths) {
clipsIter.second.placePathInAtlas(resources.get(), onFlushRP);
}
}