OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "SkData.h" | 8 #include "SkData.h" |
9 #include "SkFlattenableBuffers.h" | 9 #include "SkFlattenableBuffers.h" |
10 | 10 |
| 11 #if SK_MMAP_SUPPORT |
| 12 #include <unistd.h> |
| 13 #include <sys/mman.h> |
| 14 #include <fcntl.h> |
| 15 #include <errno.h> |
| 16 #endif |
| 17 |
11 SK_DEFINE_INST_COUNT(SkData) | 18 SK_DEFINE_INST_COUNT(SkData) |
12 | 19 |
13 SkData::SkData(const void* ptr, size_t size, ReleaseProc proc, void* context) { | 20 SkData::SkData(const void* ptr, size_t size, ReleaseProc proc, void* context) { |
14 fPtr = ptr; | 21 fPtr = ptr; |
15 fSize = size; | 22 fSize = size; |
16 fReleaseProc = proc; | 23 fReleaseProc = proc; |
17 fReleaseProcContext = context; | 24 fReleaseProcContext = context; |
18 } | 25 } |
19 | 26 |
20 SkData::~SkData() { | 27 SkData::~SkData() { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 size_t size; | 120 size_t size; |
114 if (NULL == cstr) { | 121 if (NULL == cstr) { |
115 cstr = ""; | 122 cstr = ""; |
116 size = 1; | 123 size = 1; |
117 } else { | 124 } else { |
118 size = strlen(cstr) + 1; | 125 size = strlen(cstr) + 1; |
119 } | 126 } |
120 return NewWithCopy(cstr, size); | 127 return NewWithCopy(cstr, size); |
121 } | 128 } |
122 | 129 |
| 130 #if SK_MMAP_SUPPORT |
| 131 static void sk_munmap_releaseproc(const void* addr, size_t length, void*) { |
| 132 munmap(const_cast<void*>(addr), length); |
| 133 } |
| 134 |
| 135 SkData* SkData::NewFromMMap(const void* addr, size_t length) { |
| 136 return SkNEW_ARGS(SkData, (addr, length, sk_munmap_releaseproc, NULL)); |
| 137 } |
| 138 #else |
| 139 SkData* SkData::NewFromMMap(const void* addr, size_t length) { |
| 140 return NULL; |
| 141 } |
| 142 #endif |
| 143 |
123 /////////////////////////////////////////////////////////////////////////////// | 144 /////////////////////////////////////////////////////////////////////////////// |
124 | 145 |
125 void SkData::flatten(SkFlattenableWriteBuffer& buffer) const { | 146 void SkData::flatten(SkFlattenableWriteBuffer& buffer) const { |
126 buffer.writeByteArray(fPtr, fSize); | 147 buffer.writeByteArray(fPtr, fSize); |
127 } | 148 } |
128 | 149 |
129 SkData::SkData(SkFlattenableReadBuffer& buffer) { | 150 SkData::SkData(SkFlattenableReadBuffer& buffer) { |
130 fSize = buffer.getArrayCount(); | 151 fSize = buffer.getArrayCount(); |
131 fReleaseProcContext = NULL; | 152 fReleaseProcContext = NULL; |
132 | 153 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 } | 314 } |
294 | 315 |
295 SkDataSet* SkDataSet::NewEmpty() { | 316 SkDataSet* SkDataSet::NewEmpty() { |
296 static SkDataSet* gEmptySet; | 317 static SkDataSet* gEmptySet; |
297 if (NULL == gEmptySet) { | 318 if (NULL == gEmptySet) { |
298 gEmptySet = SkNEW_ARGS(SkDataSet, (NULL, 0)); | 319 gEmptySet = SkNEW_ARGS(SkDataSet, (NULL, 0)); |
299 } | 320 } |
300 gEmptySet->ref(); | 321 gEmptySet->ref(); |
301 return gEmptySet; | 322 return gEmptySet; |
302 } | 323 } |
| 324 |
OLD | NEW |