/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Test.h" #include "SkRecord.h" #include "SkRecordCulling.h" #include "SkRecorder.h" #include "SkRecords.h" struct PushCullScanner { template void operator()(const T&) {} SkTDArray fPopOffsets; }; template <> void PushCullScanner::operator()(const SkRecords::PushCull& record) { *fPopOffsets.append() = record.popOffset; } DEF_TEST(RecordCulling, r) { SkRecord record; SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, 1920, 1080); recorder.drawRect(SkRect::MakeWH(1000, 10000), SkPaint()); recorder.pushCull(SkRect::MakeWH(100, 100)); recorder.drawRect(SkRect::MakeWH(10, 10), SkPaint()); recorder.drawRect(SkRect::MakeWH(30, 30), SkPaint()); recorder.pushCull(SkRect::MakeWH(5, 5)); recorder.drawRect(SkRect::MakeWH(1, 1), SkPaint()); recorder.popCull(); recorder.popCull(); SkRecordAnnotateCullingPairs(&record); PushCullScanner scan; record.visit(scan); REPORTER_ASSERT(r, 2 == scan.fPopOffsets.count()); REPORTER_ASSERT(r, 6 == scan.fPopOffsets[0]); REPORTER_ASSERT(r, 2 == scan.fPopOffsets[1]); }