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

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

Issue 1215103003: Register array buffer right after writing it into the object (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
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 | « no previous file | src/runtime/runtime-typedarray.cc » ('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 1820 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW
« no previous file with comments | « no previous file | src/runtime/runtime-typedarray.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698