OLD | NEW |
1 // Copyright 2009-2010 the V8 project authors. All rights reserved. | 1 // Copyright 2009-2010 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/heap-profiler.h" | 5 #include "src/heap-profiler.h" |
6 | 6 |
7 #include "src/allocation-tracker.h" | 7 #include "src/allocation-tracker.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/heap-snapshot-generator-inl.h" | 9 #include "src/heap-snapshot-generator-inl.h" |
10 | 10 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 | 128 |
129 | 129 |
130 SnapshotObjectId HeapProfiler::GetSnapshotObjectId(Handle<Object> obj) { | 130 SnapshotObjectId HeapProfiler::GetSnapshotObjectId(Handle<Object> obj) { |
131 if (!obj->IsHeapObject()) | 131 if (!obj->IsHeapObject()) |
132 return v8::HeapProfiler::kUnknownObjectId; | 132 return v8::HeapProfiler::kUnknownObjectId; |
133 return ids_->FindEntry(HeapObject::cast(*obj)->address()); | 133 return ids_->FindEntry(HeapObject::cast(*obj)->address()); |
134 } | 134 } |
135 | 135 |
136 | 136 |
137 void HeapProfiler::ObjectMoveEvent(Address from, Address to, int size) { | 137 void HeapProfiler::ObjectMoveEvent(Address from, Address to, int size) { |
| 138 base::LockGuard<base::Mutex> guard(&profiler_mutex_); |
138 bool known_object = ids_->MoveObject(from, to, size); | 139 bool known_object = ids_->MoveObject(from, to, size); |
139 if (!known_object && !allocation_tracker_.is_empty()) { | 140 if (!known_object && !allocation_tracker_.is_empty()) { |
140 allocation_tracker_->address_to_trace()->MoveObject(from, to, size); | 141 allocation_tracker_->address_to_trace()->MoveObject(from, to, size); |
141 } | 142 } |
142 } | 143 } |
143 | 144 |
144 | 145 |
145 void HeapProfiler::AllocationEvent(Address addr, int size) { | 146 void HeapProfiler::AllocationEvent(Address addr, int size) { |
146 DisallowHeapAllocation no_allocation; | 147 DisallowHeapAllocation no_allocation; |
147 if (!allocation_tracker_.is_empty()) { | 148 if (!allocation_tracker_.is_empty()) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 ids_.Reset(new HeapObjectsMap(heap())); | 184 ids_.Reset(new HeapObjectsMap(heap())); |
184 if (!is_tracking_allocations()) is_tracking_object_moves_ = false; | 185 if (!is_tracking_allocations()) is_tracking_object_moves_ = false; |
185 } | 186 } |
186 | 187 |
187 | 188 |
188 Heap* HeapProfiler::heap() const { return ids_->heap(); } | 189 Heap* HeapProfiler::heap() const { return ids_->heap(); } |
189 | 190 |
190 | 191 |
191 } // namespace internal | 192 } // namespace internal |
192 } // namespace v8 | 193 } // namespace v8 |
OLD | NEW |