| /* |
| * 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 <typename T> void operator()(const T&) {} |
| |
| SkTDArray<unsigned> 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]); |
| } |