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

Side by Side Diff: src/api.cc

Issue 1269343002: Retire StringTracker. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « src/api.h ('k') | src/isolate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 5114 matching lines...) Expand 10 before | Expand all | Expand 10 after
5125 static inline int WriteHelper(const String* string, 5125 static inline int WriteHelper(const String* string,
5126 CharType* buffer, 5126 CharType* buffer,
5127 int start, 5127 int start,
5128 int length, 5128 int length,
5129 int options) { 5129 int options) {
5130 i::Isolate* isolate = Utils::OpenHandle(string)->GetIsolate(); 5130 i::Isolate* isolate = Utils::OpenHandle(string)->GetIsolate();
5131 LOG_API(isolate, "String::Write"); 5131 LOG_API(isolate, "String::Write");
5132 ENTER_V8(isolate); 5132 ENTER_V8(isolate);
5133 DCHECK(start >= 0 && length >= -1); 5133 DCHECK(start >= 0 && length >= -1);
5134 i::Handle<i::String> str = Utils::OpenHandle(string); 5134 i::Handle<i::String> str = Utils::OpenHandle(string);
5135 isolate->string_tracker()->RecordWrite(str);
5136 if (options & String::HINT_MANY_WRITES_EXPECTED) { 5135 if (options & String::HINT_MANY_WRITES_EXPECTED) {
5137 // Flatten the string for efficiency. This applies whether we are 5136 // Flatten the string for efficiency. This applies whether we are
5138 // using StringCharacterStream or Get(i) to access the characters. 5137 // using StringCharacterStream or Get(i) to access the characters.
5139 str = i::String::Flatten(str); 5138 str = i::String::Flatten(str);
5140 } 5139 }
5141 int end = start + length; 5140 int end = start + length;
5142 if ((length == -1) || (length > str->length() - start) ) 5141 if ((length == -1) || (length > str->length() - start) )
5143 end = str->length(); 5142 end = str->length();
5144 if (end < 0) return 0; 5143 if (end < 0) return 0;
5145 i::String::WriteToFlat(*str, buffer, start, end); 5144 i::String::WriteToFlat(*str, buffer, start, end);
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
5831 } 5830 }
5832 5831
5833 5832
5834 bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) { 5833 bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) {
5835 i::Handle<i::String> obj = Utils::OpenHandle(this); 5834 i::Handle<i::String> obj = Utils::OpenHandle(this);
5836 i::Isolate* isolate = obj->GetIsolate(); 5835 i::Isolate* isolate = obj->GetIsolate();
5837 if (i::StringShape(*obj).IsExternal()) { 5836 if (i::StringShape(*obj).IsExternal()) {
5838 return false; // Already an external string. 5837 return false; // Already an external string.
5839 } 5838 }
5840 ENTER_V8(isolate); 5839 ENTER_V8(isolate);
5841 if (isolate->string_tracker()->IsFreshUnusedString(obj)) {
5842 return false;
5843 }
5844 if (isolate->heap()->IsInGCPostProcessing()) { 5840 if (isolate->heap()->IsInGCPostProcessing()) {
5845 return false; 5841 return false;
5846 } 5842 }
5847 CHECK(resource && resource->data()); 5843 CHECK(resource && resource->data());
5848 5844
5849 bool result = obj->MakeExternal(resource); 5845 bool result = obj->MakeExternal(resource);
5850 // Assert that if CanMakeExternal(), then externalizing actually succeeds. 5846 // Assert that if CanMakeExternal(), then externalizing actually succeeds.
5851 DCHECK(!CanMakeExternal() || result); 5847 DCHECK(!CanMakeExternal() || result);
5852 if (result) { 5848 if (result) {
5853 DCHECK(obj->IsExternalString()); 5849 DCHECK(obj->IsExternalString());
5854 isolate->heap()->external_string_table()->AddString(*obj); 5850 isolate->heap()->external_string_table()->AddString(*obj);
5855 } 5851 }
5856 return result; 5852 return result;
5857 } 5853 }
5858 5854
5859 5855
5860 bool v8::String::MakeExternal( 5856 bool v8::String::MakeExternal(
5861 v8::String::ExternalOneByteStringResource* resource) { 5857 v8::String::ExternalOneByteStringResource* resource) {
5862 i::Handle<i::String> obj = Utils::OpenHandle(this); 5858 i::Handle<i::String> obj = Utils::OpenHandle(this);
5863 i::Isolate* isolate = obj->GetIsolate(); 5859 i::Isolate* isolate = obj->GetIsolate();
5864 if (i::StringShape(*obj).IsExternal()) { 5860 if (i::StringShape(*obj).IsExternal()) {
5865 return false; // Already an external string. 5861 return false; // Already an external string.
5866 } 5862 }
5867 ENTER_V8(isolate); 5863 ENTER_V8(isolate);
5868 if (isolate->string_tracker()->IsFreshUnusedString(obj)) {
5869 return false;
5870 }
5871 if (isolate->heap()->IsInGCPostProcessing()) { 5864 if (isolate->heap()->IsInGCPostProcessing()) {
5872 return false; 5865 return false;
5873 } 5866 }
5874 CHECK(resource && resource->data()); 5867 CHECK(resource && resource->data());
5875 5868
5876 bool result = obj->MakeExternal(resource); 5869 bool result = obj->MakeExternal(resource);
5877 // Assert that if CanMakeExternal(), then externalizing actually succeeds. 5870 // Assert that if CanMakeExternal(), then externalizing actually succeeds.
5878 DCHECK(!CanMakeExternal() || result); 5871 DCHECK(!CanMakeExternal() || result);
5879 if (result) { 5872 if (result) {
5880 DCHECK(obj->IsExternalString()); 5873 DCHECK(obj->IsExternalString());
5881 isolate->heap()->external_string_table()->AddString(*obj); 5874 isolate->heap()->external_string_table()->AddString(*obj);
5882 } 5875 }
5883 return result; 5876 return result;
5884 } 5877 }
5885 5878
5886 5879
5887 bool v8::String::CanMakeExternal() { 5880 bool v8::String::CanMakeExternal() {
5888 i::Handle<i::String> obj = Utils::OpenHandle(this); 5881 i::Handle<i::String> obj = Utils::OpenHandle(this);
5889 i::Isolate* isolate = obj->GetIsolate(); 5882 i::Isolate* isolate = obj->GetIsolate();
5890 5883
5891 if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false; 5884 // Old space strings should be externalized.
5885 if (!isolate->heap()->new_space()->Contains(*obj)) return true;
5892 int size = obj->Size(); // Byte size of the original string. 5886 int size = obj->Size(); // Byte size of the original string.
5893 if (size < i::ExternalString::kShortSize) return false; 5887 if (size <= i::ExternalString::kShortSize) return false;
5894 i::StringShape shape(*obj); 5888 i::StringShape shape(*obj);
5895 return !shape.IsExternal(); 5889 return !shape.IsExternal();
5896 } 5890 }
5897 5891
5898 5892
5899 Isolate* v8::Object::GetIsolate() { 5893 Isolate* v8::Object::GetIsolate() {
5900 i::Isolate* i_isolate = Utils::OpenHandle(this)->GetIsolate(); 5894 i::Isolate* i_isolate = Utils::OpenHandle(this)->GetIsolate();
5901 return reinterpret_cast<Isolate*>(i_isolate); 5895 return reinterpret_cast<Isolate*>(i_isolate);
5902 } 5896 }
5903 5897
(...skipping 2499 matching lines...) Expand 10 before | Expand all | Expand 10 after
8403 Address callback_address = 8397 Address callback_address =
8404 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8398 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8405 VMState<EXTERNAL> state(isolate); 8399 VMState<EXTERNAL> state(isolate);
8406 ExternalCallbackScope call_scope(isolate, callback_address); 8400 ExternalCallbackScope call_scope(isolate, callback_address);
8407 callback(info); 8401 callback(info);
8408 } 8402 }
8409 8403
8410 8404
8411 } // namespace internal 8405 } // namespace internal
8412 } // namespace v8 8406 } // namespace v8
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698