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 2082 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2093 int size)) { | 2093 int size)) { |
2094 // Copy the content of source to target. | 2094 // Copy the content of source to target. |
2095 heap->CopyBlock(target->address(), source->address(), size); | 2095 heap->CopyBlock(target->address(), source->address(), size); |
2096 | 2096 |
2097 // Set the forwarding address. | 2097 // Set the forwarding address. |
2098 source->set_map_word(MapWord::FromForwardingAddress(target)); | 2098 source->set_map_word(MapWord::FromForwardingAddress(target)); |
2099 | 2099 |
2100 if (logging_and_profiling_mode == LOGGING_AND_PROFILING_ENABLED) { | 2100 if (logging_and_profiling_mode == LOGGING_AND_PROFILING_ENABLED) { |
2101 // Update NewSpace stats if necessary. | 2101 // Update NewSpace stats if necessary. |
2102 RecordCopiedObject(heap, target); | 2102 RecordCopiedObject(heap, target); |
2103 HEAP_PROFILE(heap, ObjectMoveEvent(source->address(), target->address())); | 2103 HEAP_PROFILE(heap, |
| 2104 ObjectMoveEvent(source->address(), target->address(), size)); |
2104 Isolate* isolate = heap->isolate(); | 2105 Isolate* isolate = heap->isolate(); |
2105 if (isolate->logger()->is_logging_code_events() || | 2106 if (isolate->logger()->is_logging_code_events() || |
2106 isolate->cpu_profiler()->is_profiling()) { | 2107 isolate->cpu_profiler()->is_profiling()) { |
2107 if (target->IsSharedFunctionInfo()) { | 2108 if (target->IsSharedFunctionInfo()) { |
2108 PROFILE(isolate, SharedFunctionInfoMoveEvent( | 2109 PROFILE(isolate, SharedFunctionInfoMoveEvent( |
2109 source->address(), target->address())); | 2110 source->address(), target->address())); |
2110 } | 2111 } |
2111 } | 2112 } |
2112 } | 2113 } |
2113 | 2114 |
(...skipping 2953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5067 source->address(), | 5068 source->address(), |
5068 object_size); | 5069 object_size); |
5069 } | 5070 } |
5070 | 5071 |
5071 if (adjusted_object_size > object_size) { | 5072 if (adjusted_object_size > object_size) { |
5072 AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>( | 5073 AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>( |
5073 reinterpret_cast<Address>(clone) + object_size); | 5074 reinterpret_cast<Address>(clone) + object_size); |
5074 alloc_memento->set_map_no_write_barrier(allocation_memento_map()); | 5075 alloc_memento->set_map_no_write_barrier(allocation_memento_map()); |
5075 ASSERT(site->map() == allocation_site_map()); | 5076 ASSERT(site->map() == allocation_site_map()); |
5076 alloc_memento->set_allocation_site(site, SKIP_WRITE_BARRIER); | 5077 alloc_memento->set_allocation_site(site, SKIP_WRITE_BARRIER); |
| 5078 |
| 5079 HeapProfiler* profiler = isolate()->heap_profiler(); |
| 5080 if (profiler->is_tracking_allocations()) { |
| 5081 profiler->UpdateObjectSizeEvent(HeapObject::cast(clone)->address(), |
| 5082 object_size); |
| 5083 profiler->NewObjectEvent(alloc_memento->address(), |
| 5084 adjusted_object_size - object_size); |
| 5085 } |
5077 } | 5086 } |
5078 | 5087 |
5079 SLOW_ASSERT( | 5088 SLOW_ASSERT( |
5080 JSObject::cast(clone)->GetElementsKind() == source->GetElementsKind()); | 5089 JSObject::cast(clone)->GetElementsKind() == source->GetElementsKind()); |
5081 FixedArrayBase* elements = FixedArrayBase::cast(source->elements()); | 5090 FixedArrayBase* elements = FixedArrayBase::cast(source->elements()); |
5082 FixedArray* properties = FixedArray::cast(source->properties()); | 5091 FixedArray* properties = FixedArray::cast(source->properties()); |
5083 // Update elements if necessary. | 5092 // Update elements if necessary. |
5084 if (elements->length() > 0) { | 5093 if (elements->length() > 0) { |
5085 Object* elem; | 5094 Object* elem; |
5086 { MaybeObject* maybe_elem; | 5095 { MaybeObject* maybe_elem; |
(...skipping 2998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8085 if (FLAG_concurrent_recompilation) { | 8094 if (FLAG_concurrent_recompilation) { |
8086 heap_->relocation_mutex_->Lock(); | 8095 heap_->relocation_mutex_->Lock(); |
8087 #ifdef DEBUG | 8096 #ifdef DEBUG |
8088 heap_->relocation_mutex_locked_by_optimizer_thread_ = | 8097 heap_->relocation_mutex_locked_by_optimizer_thread_ = |
8089 heap_->isolate()->optimizing_compiler_thread()->IsOptimizerThread(); | 8098 heap_->isolate()->optimizing_compiler_thread()->IsOptimizerThread(); |
8090 #endif // DEBUG | 8099 #endif // DEBUG |
8091 } | 8100 } |
8092 } | 8101 } |
8093 | 8102 |
8094 } } // namespace v8::internal | 8103 } } // namespace v8::internal |
OLD | NEW |