Index: src/record/SkRecordOpts.cpp |
diff --git a/src/record/SkRecordOpts.cpp b/src/record/SkRecordOpts.cpp |
index 3cf135fb7eeedffbc7510a70b54e1c17491f7a5a..4b35b33a3c20683ff1601879bf0504718c328a06 100644 |
--- a/src/record/SkRecordOpts.cpp |
+++ b/src/record/SkRecordOpts.cpp |
@@ -18,10 +18,6 @@ void SkRecordOptimize(SkRecord* record) { |
SkRecordBoundDrawPosTextH(record); |
} |
-// Streamline replacing one command with another. |
-#define REPLACE(record, index, T, ...) \ |
- SkNEW_PLACEMENT_ARGS(record->replace<SkRecords::T>(index), SkRecords::T, (__VA_ARGS__)) |
- |
namespace { |
// Convenience base class to share some common implementation code. |
@@ -81,10 +77,8 @@ void SaveRestoreNooper::operator()(SkRecords::Restore* r) { |
if (fSave != kInactive) { |
// Remove everything between the save and restore, inclusive on both sides. |
fChanged = true; |
- SkRecord::Destroyer destroyer; |
for (unsigned i = fSave; i <= this->index(); i++) { |
- fRecord->mutate(i, destroyer); |
- REPLACE(fRecord, i, NoOp); |
+ fRecord->replace<SkRecords::NoOp>(i); |
} |
fSave = kInactive; |
} |
@@ -124,8 +118,9 @@ void CullAnnotator::operator()(SkRecords::PopCull* pop) { |
SkASSERT(this->index() > push.index); |
unsigned skip = this->index() - push.index; |
- // PairedPushCull adopts push.command. |
- REPLACE(fRecord, push.index, PairedPushCull, push.command, skip); |
+ SkRecords::Adopted<SkRecords::PushCull> adopted(push.command); |
+ SkNEW_PLACEMENT_ARGS(fRecord->replace<SkRecords::PairedPushCull>(push.index, adopted), |
+ SkRecords::PairedPushCull, (&adopted, skip)); |
} |
// Replaces DrawPosText with DrawPosTextH when all Y coordinates are equal. |
@@ -164,10 +159,11 @@ void StrengthReducer::operator()(SkRecords::DrawPosText* r) { |
scalars[i/2] = scalars[i]; |
} |
- SkRecord::Destroyer destroyer; |
- fRecord->mutate(this->index(), destroyer); |
- REPLACE(fRecord, this->index(), |
- DrawPosTextH, (char*)r->text, r->byteLength, scalars, firstY, r->paint); |
+ // Extend lifetime of r to the end of the method so we can copy its parts. |
+ SkRecords::Adopted<SkRecords::DrawPosText> adopted(r); |
+ SkNEW_PLACEMENT_ARGS(fRecord->replace<SkRecords::DrawPosTextH>(this->index(), adopted), |
+ SkRecords::DrawPosTextH, |
+ (r->text, r->byteLength, scalars, firstY, r->paint)); |
} |
@@ -204,8 +200,10 @@ void TextBounder::operator()(SkRecords::DrawPosTextH* r) { |
bounds.set(0, r->y - buffer, SK_Scalar1, r->y + buffer); |
SkRect adjusted = r->paint.computeFastBounds(bounds, &bounds); |
- // BoundedDrawPosTextH adopts r. |
- REPLACE(fRecord, this->index(), BoundedDrawPosTextH, r, adjusted.fTop, adjusted.fBottom); |
+ SkRecords::Adopted<SkRecords::DrawPosTextH> adopted(r); |
+ SkNEW_PLACEMENT_ARGS(fRecord->replace<SkRecords::BoundedDrawPosTextH>(this->index(), adopted), |
+ SkRecords::BoundedDrawPosTextH, |
+ (&adopted, adjusted.fTop, adjusted.fBottom)); |
} |
template <typename Pass> |
@@ -242,5 +240,3 @@ void SkRecordBoundDrawPosTextH(SkRecord* record) { |
TextBounder bounder(record); |
run_pass(bounder, record); |
} |
- |
-#undef REPLACE |