OLD | NEW |
---|---|
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 1820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1831 std::map<void*, size_t>& not_yet_discovered_buffers, void* data) { | 1831 std::map<void*, size_t>& not_yet_discovered_buffers, void* data) { |
1832 not_yet_discovered_buffers.erase(data); | 1832 not_yet_discovered_buffers.erase(data); |
1833 } | 1833 } |
1834 | 1834 |
1835 | 1835 |
1836 size_t Heap::FreeDeadArrayBuffersHelper( | 1836 size_t Heap::FreeDeadArrayBuffersHelper( |
1837 Isolate* isolate, std::map<void*, size_t>& live_buffers, | 1837 Isolate* isolate, std::map<void*, size_t>& live_buffers, |
1838 std::map<void*, size_t>& not_yet_discovered_buffers) { | 1838 std::map<void*, size_t>& not_yet_discovered_buffers) { |
1839 size_t freed_memory = 0; | 1839 size_t freed_memory = 0; |
1840 for (auto buffer = not_yet_discovered_buffers.begin(); | 1840 for (auto buffer = not_yet_discovered_buffers.begin(); |
1841 buffer != not_yet_discovered_buffers.end(); ++buffer) { | 1841 buffer != not_yet_discovered_buffers.end(); ++buffer) { |
Hannes Payer (out of office)
2015/06/30 12:08:37
Let's remove the printf debugging :)
| |
1842 fprintf(stderr, "free buffer %p\n", buffer->first); | |
1842 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second); | 1843 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second); |
1843 freed_memory += buffer->second; | 1844 freed_memory += buffer->second; |
1844 live_buffers.erase(buffer->first); | 1845 live_buffers.erase(buffer->first); |
1845 } | 1846 } |
1846 not_yet_discovered_buffers = live_buffers; | 1847 not_yet_discovered_buffers = live_buffers; |
1847 return freed_memory; | 1848 return freed_memory; |
1848 } | 1849 } |
1849 | 1850 |
1850 | 1851 |
1851 void Heap::TearDownArrayBuffersHelper( | 1852 void Heap::TearDownArrayBuffersHelper( |
1852 Isolate* isolate, std::map<void*, size_t>& live_buffers, | 1853 Isolate* isolate, std::map<void*, size_t>& live_buffers, |
1853 std::map<void*, size_t>& not_yet_discovered_buffers) { | 1854 std::map<void*, size_t>& not_yet_discovered_buffers) { |
1854 for (auto buffer = live_buffers.begin(); buffer != live_buffers.end(); | 1855 for (auto buffer = live_buffers.begin(); buffer != live_buffers.end(); |
1855 ++buffer) { | 1856 ++buffer) { |
1856 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second); | 1857 isolate->array_buffer_allocator()->Free(buffer->first, buffer->second); |
1857 } | 1858 } |
1858 live_buffers.clear(); | 1859 live_buffers.clear(); |
1859 not_yet_discovered_buffers.clear(); | 1860 not_yet_discovered_buffers.clear(); |
1860 } | 1861 } |
1861 | 1862 |
1862 | 1863 |
1863 void Heap::RegisterNewArrayBuffer(bool in_new_space, void* data, | 1864 void Heap::RegisterNewArrayBuffer(bool in_new_space, void* data, |
1864 size_t length) { | 1865 size_t length) { |
1865 if (!data) return; | 1866 if (!data) return; |
1867 fprintf(stderr, "new buffer %p (%s space)\n", data, | |
1868 in_new_space ? "new" : "old"); | |
1866 RegisterNewArrayBufferHelper(live_array_buffers_, data, length); | 1869 RegisterNewArrayBufferHelper(live_array_buffers_, data, length); |
1867 if (in_new_space) { | 1870 if (in_new_space) { |
1868 RegisterNewArrayBufferHelper(live_array_buffers_for_scavenge_, data, | 1871 RegisterNewArrayBufferHelper(live_array_buffers_for_scavenge_, data, |
1869 length); | 1872 length); |
1870 } | 1873 } |
1871 reinterpret_cast<v8::Isolate*>(isolate_) | 1874 reinterpret_cast<v8::Isolate*>(isolate_) |
1872 ->AdjustAmountOfExternalAllocatedMemory(length); | 1875 ->AdjustAmountOfExternalAllocatedMemory(length); |
1873 } | 1876 } |
1874 | 1877 |
1875 | 1878 |
1876 void Heap::UnregisterArrayBuffer(bool in_new_space, void* data) { | 1879 void Heap::UnregisterArrayBuffer(bool in_new_space, void* data) { |
1877 if (!data) return; | 1880 if (!data) return; |
1881 fprintf(stderr, "unreg buffer %p (%s space)\n", data, | |
1882 in_new_space ? "new" : "old"); | |
1878 UnregisterArrayBufferHelper(live_array_buffers_, | 1883 UnregisterArrayBufferHelper(live_array_buffers_, |
1879 not_yet_discovered_array_buffers_, data); | 1884 not_yet_discovered_array_buffers_, data); |
1880 if (in_new_space) { | 1885 if (in_new_space) { |
1881 UnregisterArrayBufferHelper(live_array_buffers_for_scavenge_, | 1886 UnregisterArrayBufferHelper(live_array_buffers_for_scavenge_, |
1882 not_yet_discovered_array_buffers_for_scavenge_, | 1887 not_yet_discovered_array_buffers_for_scavenge_, |
1883 data); | 1888 data); |
1884 } | 1889 } |
1885 } | 1890 } |
1886 | 1891 |
1887 | 1892 |
1888 void Heap::RegisterLiveArrayBuffer(bool from_scavenge, void* data) { | 1893 void Heap::RegisterLiveArrayBuffer(bool from_scavenge, void* data) { |
1889 // ArrayBuffer might be in the middle of being constructed. | 1894 // ArrayBuffer might be in the middle of being constructed. |
1890 if (data == undefined_value()) return; | 1895 if (data == undefined_value()) return; |
1896 fprintf(stderr, "found buffer %p (%s space)\n", data, | |
1897 from_scavenge ? "new" : "old"); | |
1891 RegisterLiveArrayBufferHelper( | 1898 RegisterLiveArrayBufferHelper( |
1892 from_scavenge ? not_yet_discovered_array_buffers_for_scavenge_ | 1899 from_scavenge ? not_yet_discovered_array_buffers_for_scavenge_ |
1893 : not_yet_discovered_array_buffers_, | 1900 : not_yet_discovered_array_buffers_, |
1894 data); | 1901 data); |
1895 } | 1902 } |
1896 | 1903 |
1897 | 1904 |
1898 void Heap::FreeDeadArrayBuffers(bool from_scavenge) { | 1905 void Heap::FreeDeadArrayBuffers(bool from_scavenge) { |
1906 fprintf(stderr, "reaping buffers in %s space:\n", | |
1907 from_scavenge ? "new" : "old"); | |
1899 if (from_scavenge) { | 1908 if (from_scavenge) { |
1900 for (auto& buffer : not_yet_discovered_array_buffers_for_scavenge_) { | 1909 for (auto& buffer : not_yet_discovered_array_buffers_for_scavenge_) { |
1901 not_yet_discovered_array_buffers_.erase(buffer.first); | 1910 not_yet_discovered_array_buffers_.erase(buffer.first); |
1902 live_array_buffers_.erase(buffer.first); | 1911 live_array_buffers_.erase(buffer.first); |
1903 } | 1912 } |
1904 } else { | 1913 } else { |
1905 for (auto& buffer : not_yet_discovered_array_buffers_) { | 1914 for (auto& buffer : not_yet_discovered_array_buffers_) { |
1906 // Scavenge can't happend during evacuation, so we only need to update | 1915 // Scavenge can't happend during evacuation, so we only need to update |
1907 // live_array_buffers_for_scavenge_. | 1916 // live_array_buffers_for_scavenge_. |
1908 // not_yet_discovered_array_buffers_for_scanvenge_ will be reset before | 1917 // not_yet_discovered_array_buffers_for_scanvenge_ will be reset before |
(...skipping 14 matching lines...) Expand all Loading... | |
1923 } | 1932 } |
1924 | 1933 |
1925 | 1934 |
1926 void Heap::TearDownArrayBuffers() { | 1935 void Heap::TearDownArrayBuffers() { |
1927 TearDownArrayBuffersHelper(isolate_, live_array_buffers_, | 1936 TearDownArrayBuffersHelper(isolate_, live_array_buffers_, |
1928 not_yet_discovered_array_buffers_); | 1937 not_yet_discovered_array_buffers_); |
1929 } | 1938 } |
1930 | 1939 |
1931 | 1940 |
1932 void Heap::PrepareArrayBufferDiscoveryInNewSpace() { | 1941 void Heap::PrepareArrayBufferDiscoveryInNewSpace() { |
1942 fprintf(stderr, "prepare scavenge\n"); | |
1933 not_yet_discovered_array_buffers_for_scavenge_ = | 1943 not_yet_discovered_array_buffers_for_scavenge_ = |
1934 live_array_buffers_for_scavenge_; | 1944 live_array_buffers_for_scavenge_; |
1935 } | 1945 } |
1936 | 1946 |
1937 | 1947 |
1938 void Heap::PromoteArrayBuffer(Object* obj) { | 1948 void Heap::PromoteArrayBuffer(Object* obj) { |
1939 JSArrayBuffer* buffer = JSArrayBuffer::cast(obj); | 1949 JSArrayBuffer* buffer = JSArrayBuffer::cast(obj); |
1940 if (buffer->is_external()) return; | 1950 if (buffer->is_external()) return; |
1941 void* data = buffer->backing_store(); | 1951 void* data = buffer->backing_store(); |
1942 if (!data) return; | 1952 if (!data) return; |
1943 // ArrayBuffer might be in the middle of being constructed. | 1953 // ArrayBuffer might be in the middle of being constructed. |
1944 if (data == undefined_value()) return; | 1954 if (data == undefined_value()) return; |
1955 fprintf(stderr, "promoting buffer %p\n", data); | |
1945 DCHECK(live_array_buffers_for_scavenge_.count(data) > 0); | 1956 DCHECK(live_array_buffers_for_scavenge_.count(data) > 0); |
1946 DCHECK(live_array_buffers_.count(data) > 0); | 1957 DCHECK(live_array_buffers_.count(data) > 0); |
1947 live_array_buffers_for_scavenge_.erase(data); | 1958 live_array_buffers_for_scavenge_.erase(data); |
1948 not_yet_discovered_array_buffers_for_scavenge_.erase(data); | 1959 not_yet_discovered_array_buffers_for_scavenge_.erase(data); |
1949 } | 1960 } |
1950 | 1961 |
1951 | 1962 |
1952 void Heap::ProcessAllocationSites(WeakObjectRetainer* retainer) { | 1963 void Heap::ProcessAllocationSites(WeakObjectRetainer* retainer) { |
1953 Object* allocation_site_obj = | 1964 Object* allocation_site_obj = |
1954 VisitWeakList<AllocationSite>(this, allocation_sites_list(), retainer); | 1965 VisitWeakList<AllocationSite>(this, allocation_sites_list(), retainer); |
(...skipping 4893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6848 *object_type = "CODE_TYPE"; \ | 6859 *object_type = "CODE_TYPE"; \ |
6849 *object_sub_type = "CODE_AGE/" #name; \ | 6860 *object_sub_type = "CODE_AGE/" #name; \ |
6850 return true; | 6861 return true; |
6851 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) | 6862 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) |
6852 #undef COMPARE_AND_RETURN_NAME | 6863 #undef COMPARE_AND_RETURN_NAME |
6853 } | 6864 } |
6854 return false; | 6865 return false; |
6855 } | 6866 } |
6856 } // namespace internal | 6867 } // namespace internal |
6857 } // namespace v8 | 6868 } // namespace v8 |
OLD | NEW |