Chromium Code Reviews| Index: src/json-parser.h |
| diff --git a/src/json-parser.h b/src/json-parser.h |
| index 40116fa59ab9594c578d5467ac5330cf3509dd37..d088d038b6e6d2f09cf67ca5cdbdd40b5a2d3b13 100644 |
| --- a/src/json-parser.h |
| +++ b/src/json-parser.h |
| @@ -161,6 +161,7 @@ class JsonParser BASE_EMBEDDED { |
| int source_length_; |
| Handle<SeqAsciiString> seq_source_; |
| + PretenureFlag tenure_; |
|
Michael Starzinger
2012/10/22 16:44:28
Let's call that "pretenure_" to be in line with th
Toon Verwaest
2012/10/23 08:05:57
Done.
|
| Isolate* isolate_; |
| Factory* factory_; |
| Handle<JSFunction> object_constructor_; |
| @@ -180,6 +181,8 @@ Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source, |
| FlattenString(source); |
| source_ = source; |
| source_length_ = source_->length(); |
| + static const int kJsonAllocatePretenured = 100 * 1024; |
|
Michael Starzinger
2012/10/22 16:44:28
Can we move this constant out into the JsonParser
Toon Verwaest
2012/10/23 08:05:57
Done.
|
| + tenure_ = (source_length_ >= kJsonAllocatePretenured) ? TENURED : NOT_TENURED; |
| // Optimized fast case where we only have ASCII characters. |
| if (seq_ascii) { |
| @@ -281,7 +284,7 @@ template <bool seq_ascii> |
| Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() { |
| Handle<Object> prototype; |
| Handle<JSObject> json_object = |
| - factory()->NewJSObject(object_constructor()); |
| + factory()->NewJSObject(object_constructor(), tenure_); |
| ASSERT_EQ(c0_, '{'); |
| AdvanceSkipWhitespace(); |
| @@ -365,11 +368,12 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonArray() { |
| AdvanceSkipWhitespace(); |
| // Allocate a fixed array with all the elements. |
| Handle<FixedArray> fast_elements = |
| - factory()->NewFixedArray(elements.length()); |
| + factory()->NewFixedArray(elements.length(), tenure_); |
| for (int i = 0, n = elements.length(); i < n; i++) { |
| fast_elements->set(i, *elements[i]); |
| } |
| - return factory()->NewJSArrayWithElements(fast_elements); |
| + return factory()->NewJSArrayWithElements( |
| + fast_elements, FAST_ELEMENTS, tenure_); |
| } |
| @@ -436,7 +440,7 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonNumber() { |
| buffer.Dispose(); |
| } |
| SkipWhitespace(); |
| - return factory()->NewNumber(number); |
| + return factory()->NewNumber(number, tenure_); |
| } |
| @@ -454,16 +458,22 @@ inline void SeqStringSet(Handle<SeqAsciiString> seq_str, int i, uc32 c) { |
| } |
| template <typename StringType> |
| -inline Handle<StringType> NewRawString(Factory* factory, int length); |
| +inline Handle<StringType> NewRawString(Factory* factory, |
| + int length, |
| + PretenureFlag tenure); |
|
Michael Starzinger
2012/10/22 16:44:28
Call the third argument "pretenure".
Toon Verwaest
2012/10/23 08:05:57
Done.
|
| template <> |
| -inline Handle<SeqTwoByteString> NewRawString(Factory* factory, int length) { |
| - return factory->NewRawTwoByteString(length, NOT_TENURED); |
| +inline Handle<SeqTwoByteString> NewRawString(Factory* factory, |
| + int length, |
| + PretenureFlag tenure) { |
|
Michael Starzinger
2012/10/22 16:44:28
Likewise.
Toon Verwaest
2012/10/23 08:05:57
Done.
|
| + return factory->NewRawTwoByteString(length, tenure); |
| } |
| template <> |
| -inline Handle<SeqAsciiString> NewRawString(Factory* factory, int length) { |
| - return factory->NewRawAsciiString(length, NOT_TENURED); |
| +inline Handle<SeqAsciiString> NewRawString(Factory* factory, |
| + int length, |
| + PretenureFlag tenure) { |
|
Michael Starzinger
2012/10/22 16:44:28
Likewise.
Toon Verwaest
2012/10/23 08:05:57
Done.
|
| + return factory->NewRawAsciiString(length, tenure); |
| } |
| @@ -477,7 +487,8 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( |
| int count = end - start; |
| int max_length = count + source_length_ - position_; |
| int length = Min(max_length, Max(kInitialSpecialStringLength, 2 * count)); |
| - Handle<StringType> seq_str = NewRawString<StringType>(factory(), length); |
| + Handle<StringType> seq_str = |
| + NewRawString<StringType>(factory(), length, tenure_); |
| // Copy prefix into seq_str. |
| SinkChar* dest = seq_str->GetChars(); |
| String::WriteToFlat(*prefix, dest, start, end); |
| @@ -656,10 +667,10 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() { |
| Handle<String> result; |
| if (seq_ascii && is_symbol) { |
| result = factory()->LookupAsciiSymbol(seq_source_, |
| - beg_pos, |
| - length); |
| + beg_pos, |
|
Michael Starzinger
2012/10/22 16:44:28
Indentation seems off.
Toon Verwaest
2012/10/23 08:05:57
Seems fine here.
On 2012/10/22 16:44:28, Michael
|
| + length); |
| } else { |
| - result = factory()->NewRawAsciiString(length); |
| + result = factory()->NewRawAsciiString(length, tenure_); |
| char* dest = SeqAsciiString::cast(*result)->GetChars(); |
| String::WriteToFlat(*source_, dest, beg_pos, position_); |
| } |