1 | /* |
2 | * Copyright 2015 Google Inc. |
3 | * |
4 | * Use of this source code is governed by a BSD-style license that can be |
5 | * found in the LICENSE file. |
6 | */ |
7 | |
8 | #include "include/core/SkImage.h" |
9 | #include "src/core/SkRecord.h" |
10 | #include <algorithm> |
11 | |
12 | SkRecord::~SkRecord() { |
13 | Destroyer destroyer; |
14 | for (int i = 0; i < this->count(); i++) { |
15 | this->mutate(i, destroyer); |
16 | } |
17 | } |
18 | |
19 | void SkRecord::grow() { |
20 | SkASSERT(fCount == fReserved); |
21 | fReserved = fReserved ? fReserved * 2 : 4; |
22 | fRecords.realloc(fReserved); |
23 | } |
24 | |
25 | size_t SkRecord::bytesUsed() const { |
26 | size_t bytes = fApproxBytesAllocated + sizeof(SkRecord); |
27 | return bytes; |
28 | } |
29 | |
30 | void SkRecord::defrag() { |
31 | // Remove all the NoOps, preserving the order of other ops, e.g. |
32 | // Save, ClipRect, NoOp, DrawRect, NoOp, NoOp, Restore |
33 | // -> Save, ClipRect, DrawRect, Restore |
34 | Record* noops = std::remove_if(fRecords.get(), fRecords.get() + fCount, |
35 | [](Record op) { return op.type() == SkRecords::NoOp_Type; }); |
36 | fCount = noops - fRecords.get(); |
37 | } |
38 | |