Reviewers: Hannes Payer,
Description:
Register array buffer right after writing it into the object
BUG=chromium:504875
[email protected]
LOG=n
Please review this at https://codereview.chromium.org/1215103003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+16, -5 lines):
M src/heap/heap.cc
M src/runtime/runtime-typedarray.cc
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index
6039bdb4c6ba64d3d47b7bd9f527c1e9e460bae2..7b2fb4748f3e4a741fe0647255c5752ff2876e86
100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -1839,6 +1839,7 @@ size_t Heap::FreeDeadArrayBuffersHelper(
size_t freed_memory = 0;
for (auto buffer = not_yet_discovered_buffers.begin();
buffer != not_yet_discovered_buffers.end(); ++buffer) {
+ fprintf(stderr, "free buffer %p\n", buffer->first);
isolate->array_buffer_allocator()->Free(buffer->first, buffer->second);
freed_memory += buffer->second;
live_buffers.erase(buffer->first);
@@ -1863,6 +1864,8 @@ void Heap::TearDownArrayBuffersHelper(
void Heap::RegisterNewArrayBuffer(bool in_new_space, void* data,
size_t length) {
if (!data) return;
+ fprintf(stderr, "new buffer %p (%s space)\n", data,
+ in_new_space ? "new" : "old");
RegisterNewArrayBufferHelper(live_array_buffers_, data, length);
if (in_new_space) {
RegisterNewArrayBufferHelper(live_array_buffers_for_scavenge_, data,
@@ -1875,6 +1878,8 @@ void Heap::RegisterNewArrayBuffer(bool in_new_space,
void* data,
void Heap::UnregisterArrayBuffer(bool in_new_space, void* data) {
if (!data) return;
+ fprintf(stderr, "unreg buffer %p (%s space)\n", data,
+ in_new_space ? "new" : "old");
UnregisterArrayBufferHelper(live_array_buffers_,
not_yet_discovered_array_buffers_, data);
if (in_new_space) {
@@ -1888,6 +1893,8 @@ void Heap::UnregisterArrayBuffer(bool in_new_space,
void* data) {
void Heap::RegisterLiveArrayBuffer(bool from_scavenge, void* data) {
// ArrayBuffer might be in the middle of being constructed.
if (data == undefined_value()) return;
+ fprintf(stderr, "found buffer %p (%s space)\n", data,
+ from_scavenge ? "new" : "old");
RegisterLiveArrayBufferHelper(
from_scavenge ? not_yet_discovered_array_buffers_for_scavenge_
: not_yet_discovered_array_buffers_,
@@ -1896,6 +1903,8 @@ void Heap::RegisterLiveArrayBuffer(bool
from_scavenge, void* data) {
void Heap::FreeDeadArrayBuffers(bool from_scavenge) {
+ fprintf(stderr, "reaping buffers in %s space:\n",
+ from_scavenge ? "new" : "old");
if (from_scavenge) {
for (auto& buffer : not_yet_discovered_array_buffers_for_scavenge_) {
not_yet_discovered_array_buffers_.erase(buffer.first);
@@ -1930,6 +1939,7 @@ void Heap::TearDownArrayBuffers() {
void Heap::PrepareArrayBufferDiscoveryInNewSpace() {
+ fprintf(stderr, "prepare scavenge\n");
not_yet_discovered_array_buffers_for_scavenge_ =
live_array_buffers_for_scavenge_;
}
@@ -1942,6 +1952,7 @@ void Heap::PromoteArrayBuffer(Object* obj) {
if (!data) return;
// ArrayBuffer might be in the middle of being constructed.
if (data == undefined_value()) return;
+ fprintf(stderr, "promoting buffer %p\n", data);
DCHECK(live_array_buffers_for_scavenge_.count(data) > 0);
DCHECK(live_array_buffers_.count(data) > 0);
live_array_buffers_for_scavenge_.erase(data);
Index: src/runtime/runtime-typedarray.cc
diff --git a/src/runtime/runtime-typedarray.cc
b/src/runtime/runtime-typedarray.cc
index
ae10eeb6665ed7ea3bed0d5495e31e456fa89f82..4d355247037e57e46c0130b01a39f9b1068b4da0
100644
--- a/src/runtime/runtime-typedarray.cc
+++ b/src/runtime/runtime-typedarray.cc
@@ -28,15 +28,15 @@ void Runtime::SetupArrayBuffer(Isolate* isolate,
array_buffer->set_is_neuterable(shared == SharedFlag::kNotShared);
array_buffer->set_is_shared(shared == SharedFlag::kShared);
- Handle<Object> byte_length =
- isolate->factory()->NewNumberFromSize(allocated_length);
- CHECK(byte_length->IsSmi() || byte_length->IsHeapNumber());
- array_buffer->set_byte_length(*byte_length);
-
if (data && !is_external) {
isolate->heap()->RegisterNewArrayBuffer(
isolate->heap()->InNewSpace(*array_buffer), data,
allocated_length);
}
+
+ Handle<Object> byte_length =
+ isolate->factory()->NewNumberFromSize(allocated_length);
+ CHECK(byte_length->IsSmi() || byte_length->IsHeapNumber());
+ array_buffer->set_byte_length(*byte_length);
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.