OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 10 matching lines...) Expand all Loading... |
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
23 * THE POSSIBILITY OF SUCH DAMAGE. | 23 * THE POSSIBILITY OF SUCH DAMAGE. |
24 */ | 24 */ |
25 | 25 |
26 #ifndef V8StringResource_h | 26 #ifndef V8StringResource_h |
27 #define V8StringResource_h | 27 #define V8StringResource_h |
28 | 28 |
29 #include "bindings/core/v8/ExceptionState.h" | 29 #include "bindings/core/v8/ExceptionState.h" |
30 #include "core/CoreExport.h" | 30 #include "core/CoreExport.h" |
| 31 #include "wtf/Allocator.h" |
31 #include "wtf/Threading.h" | 32 #include "wtf/Threading.h" |
32 #include "wtf/text/AtomicString.h" | 33 #include "wtf/text/AtomicString.h" |
33 #include <v8.h> | 34 #include <v8.h> |
34 | 35 |
35 namespace blink { | 36 namespace blink { |
36 | 37 |
37 // WebCoreStringResource is a helper class for v8ExternalString. It is used | 38 // WebCoreStringResource is a helper class for v8ExternalString. It is used |
38 // to manage the life-cycle of the underlying buffer of the external string. | 39 // to manage the life-cycle of the underlying buffer of the external string. |
39 class WebCoreStringResourceBase { | 40 class WebCoreStringResourceBase { |
| 41 WTF_MAKE_FAST_ALLOCATED(WebCoreStringResourceBase); |
| 42 WTF_MAKE_NONCOPYABLE(WebCoreStringResourceBase); |
40 public: | 43 public: |
41 explicit WebCoreStringResourceBase(const String& string) | 44 explicit WebCoreStringResourceBase(const String& string) |
42 : m_plainString(string) | 45 : m_plainString(string) |
43 { | 46 { |
44 #if ENABLE(ASSERT) | 47 #if ENABLE(ASSERT) |
45 m_threadId = WTF::currentThread(); | 48 m_threadId = WTF::currentThread(); |
46 #endif | 49 #endif |
47 ASSERT(!string.isNull()); | 50 ASSERT(!string.isNull()); |
48 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(memoryC
onsumption(string)); | 51 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(memoryC
onsumption(string)); |
49 } | 52 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 static int memoryConsumption(const String& string) | 103 static int memoryConsumption(const String& string) |
101 { | 104 { |
102 return string.length() * (string.is8Bit() ? sizeof(LChar) : sizeof(UChar
)); | 105 return string.length() * (string.is8Bit() ? sizeof(LChar) : sizeof(UChar
)); |
103 } | 106 } |
104 #if ENABLE(ASSERT) | 107 #if ENABLE(ASSERT) |
105 WTF::ThreadIdentifier m_threadId; | 108 WTF::ThreadIdentifier m_threadId; |
106 #endif | 109 #endif |
107 }; | 110 }; |
108 | 111 |
109 class WebCoreStringResource16 final : public WebCoreStringResourceBase, public v
8::String::ExternalStringResource { | 112 class WebCoreStringResource16 final : public WebCoreStringResourceBase, public v
8::String::ExternalStringResource { |
| 113 WTF_MAKE_NONCOPYABLE(WebCoreStringResource16); |
110 public: | 114 public: |
111 explicit WebCoreStringResource16(const String& string) | 115 explicit WebCoreStringResource16(const String& string) |
112 : WebCoreStringResourceBase(string) | 116 : WebCoreStringResourceBase(string) |
113 { | 117 { |
114 ASSERT(!string.is8Bit()); | 118 ASSERT(!string.is8Bit()); |
115 } | 119 } |
116 | 120 |
117 explicit WebCoreStringResource16(const AtomicString& string) | 121 explicit WebCoreStringResource16(const AtomicString& string) |
118 : WebCoreStringResourceBase(string) | 122 : WebCoreStringResourceBase(string) |
119 { | 123 { |
120 ASSERT(!string.is8Bit()); | 124 ASSERT(!string.is8Bit()); |
121 } | 125 } |
122 | 126 |
123 size_t length() const override { return m_plainString.impl()->length(); } | 127 size_t length() const override { return m_plainString.impl()->length(); } |
124 const uint16_t* data() const override | 128 const uint16_t* data() const override |
125 { | 129 { |
126 return reinterpret_cast<const uint16_t*>(m_plainString.impl()->character
s16()); | 130 return reinterpret_cast<const uint16_t*>(m_plainString.impl()->character
s16()); |
127 } | 131 } |
128 }; | 132 }; |
129 | 133 |
130 class WebCoreStringResource8 final : public WebCoreStringResourceBase, public v8
::String::ExternalOneByteStringResource { | 134 class WebCoreStringResource8 final : public WebCoreStringResourceBase, public v8
::String::ExternalOneByteStringResource { |
| 135 WTF_MAKE_NONCOPYABLE(WebCoreStringResource8); |
131 public: | 136 public: |
132 explicit WebCoreStringResource8(const String& string) | 137 explicit WebCoreStringResource8(const String& string) |
133 : WebCoreStringResourceBase(string) | 138 : WebCoreStringResourceBase(string) |
134 { | 139 { |
135 ASSERT(string.is8Bit()); | 140 ASSERT(string.is8Bit()); |
136 } | 141 } |
137 | 142 |
138 explicit WebCoreStringResource8(const AtomicString& string) | 143 explicit WebCoreStringResource8(const AtomicString& string) |
139 : WebCoreStringResourceBase(string) | 144 : WebCoreStringResourceBase(string) |
140 { | 145 { |
(...skipping 20 matching lines...) Expand all Loading... |
161 // or AtomicStrings as appropriate, using multiple typecast operators. | 166 // or AtomicStrings as appropriate, using multiple typecast operators. |
162 enum V8StringResourceMode { | 167 enum V8StringResourceMode { |
163 DefaultMode, | 168 DefaultMode, |
164 TreatNullAsEmptyString, | 169 TreatNullAsEmptyString, |
165 TreatNullAsNullString, | 170 TreatNullAsNullString, |
166 TreatNullAndUndefinedAsNullString | 171 TreatNullAndUndefinedAsNullString |
167 }; | 172 }; |
168 | 173 |
169 template <V8StringResourceMode Mode = DefaultMode> | 174 template <V8StringResourceMode Mode = DefaultMode> |
170 class V8StringResource { | 175 class V8StringResource { |
| 176 STACK_ALLOCATED(); |
171 public: | 177 public: |
172 V8StringResource() | 178 V8StringResource() |
173 : m_mode(Externalize) | 179 : m_mode(Externalize) |
174 { | 180 { |
175 } | 181 } |
176 | 182 |
177 V8StringResource(v8::Local<v8::Value> object) | 183 V8StringResource(v8::Local<v8::Value> object) |
178 : m_v8Object(object) | 184 : m_v8Object(object) |
179 , m_mode(Externalize) | 185 , m_mode(Externalize) |
180 { | 186 { |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 } | 320 } |
315 | 321 |
316 template<> inline String V8StringResource<TreatNullAndUndefinedAsNullString>::fa
llbackString() const | 322 template<> inline String V8StringResource<TreatNullAndUndefinedAsNullString>::fa
llbackString() const |
317 { | 323 { |
318 return String(); | 324 return String(); |
319 } | 325 } |
320 | 326 |
321 } // namespace blink | 327 } // namespace blink |
322 | 328 |
323 #endif // V8StringResource_h | 329 #endif // V8StringResource_h |
OLD | NEW |