OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkRecord.h" | 8 #include "SkRecord.h" |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 SkRecord::~SkRecord() { | 11 SkRecord::~SkRecord() { |
12 Destroyer destroyer; | 12 Destroyer destroyer; |
13 for (int i = 0; i < this->count(); i++) { | 13 for (int i = 0; i < this->count(); i++) { |
14 this->mutate<void>(i, destroyer); | 14 this->mutate(i, destroyer); |
15 } | 15 } |
16 } | 16 } |
17 | 17 |
18 void SkRecord::grow() { | 18 void SkRecord::grow() { |
19 SkASSERT(fCount == fReserved); | 19 SkASSERT(fCount == fReserved); |
20 SkASSERT(fReserved > 0); | 20 SkASSERT(fReserved > 0); |
21 fReserved *= 2; | 21 fReserved *= 2; |
22 fRecords.realloc(fReserved); | 22 fRecords.realloc(fReserved); |
23 } | 23 } |
24 | 24 |
25 size_t SkRecord::bytesUsed() const { | 25 size_t SkRecord::bytesUsed() const { |
26 size_t bytes = fAlloc.approxBytesAllocated() + sizeof(SkRecord); | 26 size_t bytes = fAlloc.approxBytesAllocated() + sizeof(SkRecord); |
27 // If fReserved <= kInlineRecords, we've already accounted for fRecords with
sizeof(SkRecord). | 27 // If fReserved <= kInlineRecords, we've already accounted for fRecords with
sizeof(SkRecord). |
28 // When we go over that limit, they're allocated on the heap (and the inline
space is wasted). | 28 // When we go over that limit, they're allocated on the heap (and the inline
space is wasted). |
29 if (fReserved > kInlineRecords) { | 29 if (fReserved > kInlineRecords) { |
30 bytes += fReserved * sizeof(Record); | 30 bytes += fReserved * sizeof(Record); |
31 } | 31 } |
32 return bytes; | 32 return bytes; |
33 } | 33 } |
34 | 34 |
35 void SkRecord::defrag() { | 35 void SkRecord::defrag() { |
36 // Remove all the NoOps, preserving the order of other ops, e.g. | 36 // Remove all the NoOps, preserving the order of other ops, e.g. |
37 // Save, ClipRect, NoOp, DrawRect, NoOp, NoOp, Restore | 37 // Save, ClipRect, NoOp, DrawRect, NoOp, NoOp, Restore |
38 // -> Save, ClipRect, DrawRect, Restore | 38 // -> Save, ClipRect, DrawRect, Restore |
39 Record* noops = std::remove_if(fRecords.get(), fRecords.get() + fCount, | 39 Record* noops = std::remove_if(fRecords.get(), fRecords.get() + fCount, |
40 [](Record op) { return op.type() == SkRecords
::NoOp_Type; }); | 40 [](Record op) { return op.type() == SkRecords
::NoOp_Type; }); |
41 fCount = noops - fRecords.get(); | 41 fCount = noops - fRecords.get(); |
42 } | 42 } |
OLD | NEW |