Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1123)

Unified Diff: src/core/SkRecordDraw.cpp

Issue 1424553002: SkRecord refactor: fill bounds array instead of BBH directly (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: comment Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkRecordDraw.h ('k') | tests/RecordDrawTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkRecordDraw.cpp
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
index 12920da36117d55c36ad9c7160123374fc1c37e6..ab0cb71407d5290e1764605ad0fec87dca6f3320 100644
--- a/src/core/SkRecordDraw.cpp
+++ b/src/core/SkRecordDraw.cpp
@@ -150,20 +150,15 @@ template <> void Draw::draw(const DrawDrawable& r) {
// in for all the control ops we stashed away.
class FillBounds : SkNoncopyable {
public:
- FillBounds(const SkRect& cullRect, const SkRecord& record)
+ FillBounds(const SkRect& cullRect, const SkRecord& record, SkRect bounds[])
: fNumRecords(record.count())
, fCullRect(cullRect)
- , fBounds(record.count())
- {
- // Calculate bounds for all ops. This won't go quite in order, so we'll need
- // to store the bounds separately then feed them in to the BBH later in order.
+ , fBounds(bounds) {
fCTM = &SkMatrix::I();
fCurrentClipBounds = fCullRect;
}
- void setCurrentOp(int currentOp) { fCurrentOp = currentOp; }
-
- void cleanUp(SkBBoxHierarchy* bbh) {
+ void cleanUp() {
// If we have any lingering unpaired Saves, simulate restores to make
// sure all ops in those Save blocks have their bounds calculated.
while (!fSaveStack.isEmpty()) {
@@ -174,13 +169,11 @@ public:
while (!fControlIndices.isEmpty()) {
this->popControl(fCullRect);
}
-
- // Finally feed all stored bounds into the BBH. They'll be returned in this order.
- if (bbh) {
- bbh->insert(fBounds.get(), fNumRecords);
- }
}
+ void setCurrentOp(int currentOp) { fCurrentOp = currentOp; }
+
+
template <typename T> void operator()(const T& op) {
this->updateCTM(op);
this->updateClipBounds(op);
@@ -580,7 +573,7 @@ private:
const SkRect fCullRect;
// Conservative identity-space bounds for each op in the SkRecord.
- SkAutoTMalloc<Bounds> fBounds;
+ Bounds* fBounds;
// We walk fCurrentOp through the SkRecord, as we go using updateCTM()
// and updateClipBounds() to maintain the exact CTM (fCTM) and conservative
@@ -597,27 +590,27 @@ private:
// SkRecord visitor to gather saveLayer/restore information.
class CollectLayers : SkNoncopyable {
public:
- CollectLayers(const SkRect& cullRect, const SkRecord& record,
+ CollectLayers(const SkRect& cullRect, const SkRecord& record, SkRect bounds[],
const SkBigPicture::SnapshotArray* pictList, SkLayerInfo* accelData)
: fSaveLayersInStack(0)
, fAccelData(accelData)
, fPictList(pictList)
- , fFillBounds(cullRect, record)
+ , fFillBounds(cullRect, record, bounds)
{}
- void setCurrentOp(int currentOp) { fFillBounds.setCurrentOp(currentOp); }
-
- void cleanUp(SkBBoxHierarchy* bbh) {
+ void cleanUp() {
// fFillBounds must perform its cleanUp first so that all the bounding
// boxes associated with unbalanced restores are updated (prior to
// fetching their bound in popSaveLayerInfo).
- fFillBounds.cleanUp(bbh);
-
+ fFillBounds.cleanUp();
while (!fSaveLayerStack.isEmpty()) {
this->popSaveLayerInfo();
}
}
+ void setCurrentOp(int currentOp) { fFillBounds.setCurrentOp(currentOp); }
+
+
template <typename T> void operator()(const T& op) {
fFillBounds(op);
this->trackSaveLayers(op);
@@ -792,27 +785,22 @@ private:
} // namespace SkRecords
-void SkRecordFillBounds(const SkRect& cullRect, const SkRecord& record, SkBBoxHierarchy* bbh) {
- SkRecords::FillBounds visitor(cullRect, record);
-
+void SkRecordFillBounds(const SkRect& cullRect, const SkRecord& record, SkRect bounds[]) {
+ SkRecords::FillBounds visitor(cullRect, record, bounds);
for (int curOp = 0; curOp < record.count(); curOp++) {
visitor.setCurrentOp(curOp);
record.visit<void>(curOp, visitor);
}
-
- visitor.cleanUp(bbh);
+ visitor.cleanUp();
}
-void SkRecordComputeLayers(const SkRect& cullRect, const SkRecord& record,
- const SkBigPicture::SnapshotArray* pictList, SkBBoxHierarchy* bbh,
- SkLayerInfo* data) {
- SkRecords::CollectLayers visitor(cullRect, record, pictList, data);
-
+void SkRecordComputeLayers(const SkRect& cullRect, const SkRecord& record, SkRect bounds[],
+ const SkBigPicture::SnapshotArray* pictList, SkLayerInfo* data) {
+ SkRecords::CollectLayers visitor(cullRect, record, bounds, pictList, data);
for (int curOp = 0; curOp < record.count(); curOp++) {
visitor.setCurrentOp(curOp);
record.visit<void>(curOp, visitor);
}
-
- visitor.cleanUp(bbh);
+ visitor.cleanUp();
}
« no previous file with comments | « src/core/SkRecordDraw.h ('k') | tests/RecordDrawTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698