OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1931 Object* allocation_site_obj = | 1931 Object* allocation_site_obj = |
1932 VisitWeakList<AllocationSite>(this, | 1932 VisitWeakList<AllocationSite>(this, |
1933 allocation_sites_list(), | 1933 allocation_sites_list(), |
1934 retainer, record_slots); | 1934 retainer, record_slots); |
1935 set_allocation_sites_list(allocation_site_obj); | 1935 set_allocation_sites_list(allocation_site_obj); |
1936 } | 1936 } |
1937 | 1937 |
1938 | 1938 |
1939 void Heap::VisitExternalResources(v8::ExternalResourceVisitor* visitor) { | 1939 void Heap::VisitExternalResources(v8::ExternalResourceVisitor* visitor) { |
1940 DisallowHeapAllocation no_allocation; | 1940 DisallowHeapAllocation no_allocation; |
1941 | 1941 // All external strings are listed in the external string table. |
1942 // Both the external string table and the string table may contain | |
1943 // external strings, but neither lists them exhaustively, nor is the | |
1944 // intersection set empty. Therefore we iterate over the external string | |
1945 // table first, ignoring internalized strings, and then over the | |
1946 // internalized string table. | |
1947 | 1942 |
1948 class ExternalStringTableVisitorAdapter : public ObjectVisitor { | 1943 class ExternalStringTableVisitorAdapter : public ObjectVisitor { |
1949 public: | 1944 public: |
1950 explicit ExternalStringTableVisitorAdapter( | 1945 explicit ExternalStringTableVisitorAdapter( |
1951 v8::ExternalResourceVisitor* visitor) : visitor_(visitor) {} | 1946 v8::ExternalResourceVisitor* visitor) : visitor_(visitor) {} |
1952 virtual void VisitPointers(Object** start, Object** end) { | 1947 virtual void VisitPointers(Object** start, Object** end) { |
1953 for (Object** p = start; p < end; p++) { | 1948 for (Object** p = start; p < end; p++) { |
1954 // Visit non-internalized external strings, | 1949 ASSERT((*p)->IsExternalString()); |
1955 // since internalized strings are listed in the string table. | 1950 visitor_->VisitExternalString(Utils::ToLocal( |
1956 if (!(*p)->IsInternalizedString()) { | 1951 Handle<String>(String::cast(*p)))); |
1957 ASSERT((*p)->IsExternalString()); | |
1958 visitor_->VisitExternalString(Utils::ToLocal( | |
1959 Handle<String>(String::cast(*p)))); | |
1960 } | |
1961 } | 1952 } |
1962 } | 1953 } |
1963 private: | 1954 private: |
1964 v8::ExternalResourceVisitor* visitor_; | 1955 v8::ExternalResourceVisitor* visitor_; |
1965 } external_string_table_visitor(visitor); | 1956 } external_string_table_visitor(visitor); |
1966 | 1957 |
1967 external_string_table_.Iterate(&external_string_table_visitor); | 1958 external_string_table_.Iterate(&external_string_table_visitor); |
1968 | |
1969 class StringTableVisitorAdapter : public ObjectVisitor { | |
1970 public: | |
1971 explicit StringTableVisitorAdapter( | |
1972 v8::ExternalResourceVisitor* visitor) : visitor_(visitor) {} | |
1973 virtual void VisitPointers(Object** start, Object** end) { | |
1974 for (Object** p = start; p < end; p++) { | |
1975 if ((*p)->IsExternalString()) { | |
1976 ASSERT((*p)->IsInternalizedString()); | |
1977 visitor_->VisitExternalString(Utils::ToLocal( | |
1978 Handle<String>(String::cast(*p)))); | |
1979 } | |
1980 } | |
1981 } | |
1982 private: | |
1983 v8::ExternalResourceVisitor* visitor_; | |
1984 } string_table_visitor(visitor); | |
1985 | |
1986 string_table()->IterateElements(&string_table_visitor); | |
1987 } | 1959 } |
1988 | 1960 |
1989 | 1961 |
1990 class NewSpaceScavenger : public StaticNewSpaceVisitor<NewSpaceScavenger> { | 1962 class NewSpaceScavenger : public StaticNewSpaceVisitor<NewSpaceScavenger> { |
1991 public: | 1963 public: |
1992 static inline void VisitPointer(Heap* heap, Object** p) { | 1964 static inline void VisitPointer(Heap* heap, Object** p) { |
1993 Object* object = *p; | 1965 Object* object = *p; |
1994 if (!heap->InNewSpace(object)) return; | 1966 if (!heap->InNewSpace(object)) return; |
1995 Heap::ScavengeObject(reinterpret_cast<HeapObject**>(p), | 1967 Heap::ScavengeObject(reinterpret_cast<HeapObject**>(p), |
1996 reinterpret_cast<HeapObject*>(object)); | 1968 reinterpret_cast<HeapObject*>(object)); |
(...skipping 5988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7985 static_cast<int>(object_sizes_last_time_[index])); | 7957 static_cast<int>(object_sizes_last_time_[index])); |
7986 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 7958 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
7987 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 7959 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
7988 | 7960 |
7989 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 7961 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
7990 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 7962 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
7991 ClearObjectStats(); | 7963 ClearObjectStats(); |
7992 } | 7964 } |
7993 | 7965 |
7994 } } // namespace v8::internal | 7966 } } // namespace v8::internal |
OLD | NEW |