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

Side by Side Diff: src/heap/heap.cc

Issue 1206903002: Version 4.4.63.9 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@4.4
Patch Set: Created 5 years, 5 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/heap/heap.h ('k') | src/heap/objects-visiting-inl.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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after
1783 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second); 1783 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second);
1784 } 1784 }
1785 live_buffers.clear(); 1785 live_buffers.clear();
1786 not_yet_discovered_buffers.clear(); 1786 not_yet_discovered_buffers.clear();
1787 } 1787 }
1788 1788
1789 1789
1790 void Heap::RegisterNewArrayBuffer(bool in_new_space, void* data, 1790 void Heap::RegisterNewArrayBuffer(bool in_new_space, void* data,
1791 size_t length) { 1791 size_t length) {
1792 if (!data) return; 1792 if (!data) return;
1793 RegisterNewArrayBufferHelper( 1793 RegisterNewArrayBufferHelper(live_array_buffers_, data, length);
1794 in_new_space ? live_new_array_buffers_ : live_array_buffers_, data, 1794 if (in_new_space) {
1795 length); 1795 RegisterNewArrayBufferHelper(live_array_buffers_for_scavenge_, data,
1796 length);
1797 }
1796 reinterpret_cast<v8::Isolate*>(isolate_) 1798 reinterpret_cast<v8::Isolate*>(isolate_)
1797 ->AdjustAmountOfExternalAllocatedMemory(length); 1799 ->AdjustAmountOfExternalAllocatedMemory(length);
1798 } 1800 }
1799 1801
1800 1802
1801 void Heap::UnregisterArrayBuffer(bool in_new_space, void* data) { 1803 void Heap::UnregisterArrayBuffer(bool in_new_space, void* data) {
1802 if (!data) return; 1804 if (!data) return;
1803 UnregisterArrayBufferHelper( 1805 UnregisterArrayBufferHelper(live_array_buffers_,
1804 in_new_space ? live_new_array_buffers_ : live_array_buffers_, 1806 not_yet_discovered_array_buffers_, data);
1805 in_new_space ? not_yet_discovered_new_array_buffers_ 1807 if (in_new_space) {
1806 : not_yet_discovered_array_buffers_, 1808 UnregisterArrayBufferHelper(live_array_buffers_for_scavenge_,
1809 not_yet_discovered_array_buffers_for_scavenge_,
1810 data);
1811 }
1812 }
1813
1814
1815 void Heap::RegisterLiveArrayBuffer(bool from_scavenge, void* data) {
1816 // ArrayBuffer might be in the middle of being constructed.
1817 if (data == undefined_value()) return;
1818 RegisterLiveArrayBufferHelper(
1819 from_scavenge ? not_yet_discovered_array_buffers_for_scavenge_
1820 : not_yet_discovered_array_buffers_,
1807 data); 1821 data);
1808 } 1822 }
1809 1823
1810 1824
1811 void Heap::RegisterLiveArrayBuffer(bool in_new_space, void* data) { 1825 void Heap::FreeDeadArrayBuffers(bool from_scavenge) {
1812 // ArrayBuffer might be in the middle of being constructed. 1826 if (from_scavenge) {
1813 if (data == undefined_value()) return; 1827 for (auto& buffer : not_yet_discovered_array_buffers_for_scavenge_) {
1814 RegisterLiveArrayBufferHelper(in_new_space 1828 not_yet_discovered_array_buffers_.erase(buffer.first);
1815 ? not_yet_discovered_new_array_buffers_ 1829 live_array_buffers_.erase(buffer.first);
1816 : not_yet_discovered_array_buffers_, 1830 }
1817 data); 1831 } else {
1818 } 1832 for (auto& buffer : not_yet_discovered_array_buffers_) {
1819 1833 // Scavenge can't happend during evacuation, so we only need to update
1820 1834 // live_array_buffers_for_scavenge_.
1821 void Heap::FreeDeadArrayBuffers(bool in_new_space) { 1835 // not_yet_discovered_array_buffers_for_scanvenge_ will be reset before
1836 // the next scavenge run in PrepareArrayBufferDiscoveryInNewSpace.
1837 live_array_buffers_for_scavenge_.erase(buffer.first);
1838 }
1839 }
1822 size_t freed_memory = FreeDeadArrayBuffersHelper( 1840 size_t freed_memory = FreeDeadArrayBuffersHelper(
1823 isolate_, in_new_space ? live_new_array_buffers_ : live_array_buffers_, 1841 isolate_,
1824 in_new_space ? not_yet_discovered_new_array_buffers_ 1842 from_scavenge ? live_array_buffers_for_scavenge_ : live_array_buffers_,
1825 : not_yet_discovered_array_buffers_); 1843 from_scavenge ? not_yet_discovered_array_buffers_for_scavenge_
1844 : not_yet_discovered_array_buffers_);
1826 if (freed_memory) { 1845 if (freed_memory) {
1827 reinterpret_cast<v8::Isolate*>(isolate_) 1846 reinterpret_cast<v8::Isolate*>(isolate_)
1828 ->AdjustAmountOfExternalAllocatedMemory( 1847 ->AdjustAmountOfExternalAllocatedMemory(
1829 -static_cast<int64_t>(freed_memory)); 1848 -static_cast<int64_t>(freed_memory));
1830 } 1849 }
1831 } 1850 }
1832 1851
1833 1852
1834 void Heap::TearDownArrayBuffers() { 1853 void Heap::TearDownArrayBuffers() {
1835 TearDownArrayBuffersHelper(isolate_, live_array_buffers_, 1854 TearDownArrayBuffersHelper(isolate_, live_array_buffers_,
1836 not_yet_discovered_array_buffers_); 1855 not_yet_discovered_array_buffers_);
1837 TearDownArrayBuffersHelper(isolate_, live_new_array_buffers_,
1838 not_yet_discovered_new_array_buffers_);
1839 } 1856 }
1840 1857
1841 1858
1842 void Heap::PrepareArrayBufferDiscoveryInNewSpace() { 1859 void Heap::PrepareArrayBufferDiscoveryInNewSpace() {
1843 not_yet_discovered_new_array_buffers_ = live_new_array_buffers_; 1860 not_yet_discovered_array_buffers_for_scavenge_ =
1861 live_array_buffers_for_scavenge_;
1844 } 1862 }
1845 1863
1846 1864
1847 void Heap::PromoteArrayBuffer(Object* obj) { 1865 void Heap::PromoteArrayBuffer(Object* obj) {
1848 JSArrayBuffer* buffer = JSArrayBuffer::cast(obj); 1866 JSArrayBuffer* buffer = JSArrayBuffer::cast(obj);
1849 if (buffer->is_external()) return; 1867 if (buffer->is_external()) return;
1850 void* data = buffer->backing_store(); 1868 void* data = buffer->backing_store();
1851 if (!data) return; 1869 if (!data) return;
1852 // ArrayBuffer might be in the middle of being constructed. 1870 // ArrayBuffer might be in the middle of being constructed.
1853 if (data == undefined_value()) return; 1871 if (data == undefined_value()) return;
1854 DCHECK(live_new_array_buffers_.count(data) > 0); 1872 DCHECK(live_array_buffers_for_scavenge_.count(data) > 0);
1855 live_array_buffers_[data] = live_new_array_buffers_[data]; 1873 DCHECK(live_array_buffers_.count(data) > 0);
1856 live_new_array_buffers_.erase(data); 1874 live_array_buffers_for_scavenge_.erase(data);
1857 not_yet_discovered_new_array_buffers_.erase(data); 1875 not_yet_discovered_array_buffers_for_scavenge_.erase(data);
1858 } 1876 }
1859 1877
1860 1878
1861 void Heap::ProcessAllocationSites(WeakObjectRetainer* retainer) { 1879 void Heap::ProcessAllocationSites(WeakObjectRetainer* retainer) {
1862 Object* allocation_site_obj = 1880 Object* allocation_site_obj =
1863 VisitWeakList<AllocationSite>(this, allocation_sites_list(), retainer); 1881 VisitWeakList<AllocationSite>(this, allocation_sites_list(), retainer);
1864 set_allocation_sites_list(allocation_site_obj); 1882 set_allocation_sites_list(allocation_site_obj);
1865 } 1883 }
1866 1884
1867 1885
(...skipping 4707 matching lines...) Expand 10 before | Expand all | Expand 10 after
6575 } 6593 }
6576 delete list; 6594 delete list;
6577 } else { 6595 } else {
6578 prev = list; 6596 prev = list;
6579 } 6597 }
6580 list = next; 6598 list = next;
6581 } 6599 }
6582 } 6600 }
6583 } 6601 }
6584 } // namespace v8::internal 6602 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/objects-visiting-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698