From c3c6194ba2b90fde57d8d0bc1d6302656f0dae27 Mon Sep 17 00:00:00 2001 From: mtklein Date: Thu, 19 Nov 2015 07:23:49 -0800 Subject: Add SkRecord::defrag(). Called by SkRecordOptimize(), this moves all the NoOps to the end and slices them off. This implementation with std::remove_if() is linear and doesn't malloc. No diffs: https://gold.skia.org/search2?issue=1461663003&unt=true&query=source_type%3Dgm&master=false BUG=skia: Review URL: https://codereview.chromium.org/1461663003 --- tests/RecordTest.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'tests/RecordTest.cpp') diff --git a/tests/RecordTest.cpp b/tests/RecordTest.cpp index 9e02c882db..e613b425fd 100644 --- a/tests/RecordTest.cpp +++ b/tests/RecordTest.cpp @@ -5,13 +5,14 @@ * found in the LICENSE file. */ -#include "Test.h" - +#include "RecordTestUtils.h" #include "SkBitmap.h" #include "SkImageInfo.h" -#include "SkShader.h" #include "SkRecord.h" #include "SkRecords.h" +#include "SkShader.h" +#include "Test.h" + // Sums the area of any DrawRect command it sees. class AreaSummer { @@ -76,6 +77,25 @@ DEF_TEST(Record, r) { REPORTER_ASSERT(r, summer.area() == 500); } +DEF_TEST(Record_defrag, r) { + SkRecord record; + APPEND(record, SkRecords::Save); + APPEND(record, SkRecords::ClipRect); + APPEND(record, SkRecords::NoOp); + APPEND(record, SkRecords::DrawRect); + APPEND(record, SkRecords::NoOp); + APPEND(record, SkRecords::NoOp); + APPEND(record, SkRecords::Restore); + REPORTER_ASSERT(r, record.count() == 7); + + record.defrag(); + REPORTER_ASSERT(r, record.count() == 4); + assert_type(r, record, 0); + assert_type(r, record, 1); + assert_type(r, record, 2); + assert_type(r, record, 3); +} + #undef APPEND template -- cgit v1.2.3