Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Unified Diff: src/json-parser.h

Issue 11238031: Pretenure JSON graph if the input string is larger than 100*1024 chars. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: More tenure_ Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698