Index: runtime/vm/heap_trace.h |
=================================================================== |
--- runtime/vm/heap_trace.h (revision 21785) |
+++ runtime/vm/heap_trace.h (working copy) |
@@ -1,213 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-#ifndef VM_HEAP_TRACE_H_ |
-#define VM_HEAP_TRACE_H_ |
- |
-#include "include/dart_api.h" |
-#include "vm/globals.h" |
-#include "vm/object_set.h" |
- |
-namespace dart { |
- |
-// Forward declarations. |
-class HeapTraceVisitor; |
-class Isolate; |
-class RawClass; |
-class RawObject; |
-class RawString; |
-class BaseZone; |
- |
-class HeapTrace { |
- public: |
- enum RecordSize { |
- kRootSize = 5, |
- kAllocSize = 9, |
- kSnapshotAllocSize = 9, |
- kCopySize = 9, |
- kStoreSize = 13, |
- kSweepSize = 5, |
- kDeathRangeSize = 9, |
- kPromotionSize = 9, |
- kAllocZoneHandleSize = 9, |
- kDeleteZoneSize = 5, |
- kRegisterClassSize = 5, |
- kAllocScopedHandleSize = 5, |
- kDeleteScopedHandlesSize = 1, |
- kMarkSweepStartSize = 1, |
- kMarkSweepFinishSize = 1, |
- kObjectStoreSize = 5 |
- }; |
- |
- enum RecordType { |
- kRootType = 'R', |
- kAllocType = 'A', |
- kSnapshotAllocType = 'B', |
- kCopyType = 'C', |
- kStoreType = 'U', |
- kSweepType = 'S', |
- kDeathRangeType = 'L', |
- kPromotionType = 'P', |
- kAllocZoneHandleType = 'Z', |
- kDeleteZoneType = 'z', |
- kRegisterClassType = 'K', |
- kAllocScopedHandleType = 'H', |
- kDeleteScopedHandlesType = 'h', |
- kMarkSweepStartType = '{', |
- kMarkSweepFinishType = '}', |
- kObjectStoreType = 'O' |
- }; |
- |
- template <RecordType T, RecordSize N> |
- class Record { |
- public: |
- explicit Record(HeapTrace* trace): cursor_(0), trace_(trace) { |
- ASSERT(N >= 1); |
- buffer_[0] = T; |
- ++cursor_; |
- } |
- ~Record() { |
- (*trace_->write_callback_)(Buffer(), Length(), trace_->output_stream_); |
- } |
- |
- void Write(uword word) { |
- ASSERT(cursor_ + sizeof(word) <= N); |
- memmove(&buffer_[cursor_], &word, sizeof(word)); |
- cursor_ += sizeof(word); |
- } |
- |
- intptr_t Length() const { return cursor_; } |
- |
- const uint8_t* Buffer() const { |
- ASSERT(cursor_ == N); |
- return buffer_; |
- } |
- |
- private: |
- uint8_t buffer_[N]; |
- intptr_t cursor_; |
- HeapTrace* trace_; |
- DISALLOW_COPY_AND_ASSIGN(Record); |
- }; |
- |
- typedef Record<kRootType, kRootSize> RootRecord; |
- typedef Record<kAllocType, kAllocSize> AllocationRecord; |
- typedef Record<kSnapshotAllocType, kSnapshotAllocSize> |
- SnapshotAllocationRecord; |
- typedef Record<kCopyType, kCopySize> CopyRecord; |
- typedef Record<kStoreType, kStoreSize> StoreRecord; |
- typedef Record<kSweepType, kSweepSize> SweepRecord; |
- typedef Record<kDeathRangeType, kDeathRangeSize> DeathRangeRecord; |
- typedef Record<kPromotionType, kPromotionSize> PromotionRecord; |
- typedef Record<kAllocZoneHandleType, kAllocZoneHandleSize> |
- AllocZoneHandleRecord; |
- typedef Record<kDeleteZoneType, kDeleteZoneSize> |
- DeleteZoneRecord; |
- typedef Record<kRegisterClassType, kRegisterClassSize> RegisterClassRecord; |
- typedef Record<kAllocScopedHandleType, kAllocScopedHandleSize> |
- AllocScopedHandleRecord; |
- typedef Record<kDeleteScopedHandlesType, kDeleteScopedHandlesSize> |
- DeleteScopedHandlesRecord; |
- typedef Record<kMarkSweepStartType, kMarkSweepStartSize> MarkSweepStartRecord; |
- typedef Record<kMarkSweepFinishType, kMarkSweepFinishSize> |
- MarkSweepFinishRecord; |
- typedef Record<kObjectStoreType, kObjectStoreSize> ObjectStoreRecord; |
- |
- HeapTrace(); |
- ~HeapTrace(); |
- |
- // Called by the isolate just before EnableGrowthControl. Indicates |
- // the Isolate is initialized and enables tracing. |
- void Init(Isolate* isolate); |
- |
- // Called when an object is allocated in the heap. |
- void TraceAllocation(uword addr, intptr_t size); |
- |
- // Invoked after the snapshot is loaded at Isolate startup time. |
- void TraceSnapshotAlloc(RawObject* obj, intptr_t size); |
- |
- // Rename to something like TraceAllocateZoneHandle (or whatever) |
- void TraceAllocateZoneHandle(uword handle, uword zone_addr); |
- |
- // Invoked when a Zone block is deleted. |
- void TraceDeleteZone(Zone* zone); |
- |
- // Invoked whenever the scoped handles are delelted. |
- void TraceDeleteScopedHandles(); |
- |
- // Invoked when objects are coped from the from space to the to space |
- // by the scavenger. |
- void TraceCopy(uword from_addr, uword to_addr); |
- |
- // Invoked on each pointer in the object store. |
- void TraceObjectStorePointer(uword addr); |
- |
- // Invoked when an object is promoted from the new space to the old space. |
- void TracePromotion(uword old_addr, uword promoted_addr); |
- |
- // Invoked after a scavenge with the addressed range of from-space |
- void TraceDeathRange(uword inclusive_start, uword exclusive_end); |
- |
- // Invoked whenever a class is registered in the class table. |
- void TraceRegisterClass(const Class& cls); |
- |
- // Invoked when an address is swept. |
- void TraceSweep(uword sweept_addr); |
- |
- // Invoked when storing value into origin, and value is an object. |
- void TraceStoreIntoObject(uword origin_object_addr, |
- uword slot_addr, |
- uword value); |
- |
- // Invoked when starting a mark-sweep collection on old space |
- void TraceMarkSweepStart(); |
- |
- // Invoked after finishing a mark sweep collection on old space. |
- void TraceMarkSweepFinish(); |
- |
- // Initialize tracing globablly across the VM. Invidual isolates |
- // will still have to initialized themselves when they are started. |
- static void InitOnce(Dart_FileOpenCallback open_callback, |
- Dart_FileWriteCallback write_callback, |
- Dart_FileCloseCallback close_callback); |
- |
- // Returns true if tracign is enabled for the VM. |
- static bool is_enabled() { return is_enabled_; } |
- |
- private: |
- ObjectSet* CreateEmptyObjectSet() const; |
- void ResizeObjectSet(); |
- |
- void TraceScopedHandle(uword handle); |
- |
- // A helper for PutRoots, called by HeapTraceVisitor. |
- void TraceSingleRoot(uword root); |
- |
- // Invoked while tracing an allocation. |
- void TraceRoots(Isolate* isolate); |
- |
- // Is the isolate we are tracing initialized? |
- bool isolate_initialized_; |
- |
- void* output_stream_; |
- |
- ObjectSet object_set_; |
- |
- static Dart_FileOpenCallback open_callback_; |
- static Dart_FileWriteCallback write_callback_; |
- static Dart_FileCloseCallback close_callback_; |
- |
- static bool is_enabled_; |
- |
- friend class HeapTraceVisitor; |
- friend class HeapTraceScopedHandleVisitor; |
- friend class HeapTraceObjectStoreVisitor; |
- friend class HeapTraceDebugObjectVisitor; |
- |
- DISALLOW_COPY_AND_ASSIGN(HeapTrace); |
-}; |
- |
-} // namespace dart |
- |
-#endif // VM_HEAP_TRACE_H_ |