V8 Project
v8::internal::HeapObjectsMap Class Reference

#include <heap-snapshot-generator.h>

+ Collaboration diagram for v8::internal::HeapObjectsMap:

Classes

struct  EntryInfo
 
struct  TimeInterval
 

Public Member Functions

 HeapObjectsMap (Heap *heap)
 
Heapheap () const
 
SnapshotObjectId FindEntry (Address addr)
 
SnapshotObjectId FindOrAddEntry (Address addr, unsigned int size, bool accessed=true)
 
bool MoveObject (Address from, Address to, int size)
 
void UpdateObjectSize (Address addr, int size)
 
SnapshotObjectId last_assigned_id () const
 
void StopHeapObjectsTracking ()
 
SnapshotObjectId PushHeapObjectsStats (OutputStream *stream)
 
size_t GetUsedMemorySize () const
 
SnapshotObjectId GenerateId (v8::RetainedObjectInfo *info)
 
int FindUntrackedObjects ()
 
void UpdateHeapObjectsMap ()
 
void RemoveDeadEntries ()
 

Static Public Attributes

static const int kObjectIdStep = 2
 
static const SnapshotObjectId kInternalRootObjectId = 1
 
static const SnapshotObjectId kGcRootsObjectId
 
static const SnapshotObjectId kGcRootsFirstSubrootId
 
static const SnapshotObjectId kFirstAvailableObjectId
 

Private Member Functions

 DISALLOW_COPY_AND_ASSIGN (HeapObjectsMap)
 

Private Attributes

SnapshotObjectId next_id_
 
HashMap entries_map_
 
List< EntryInfoentries_
 
List< TimeIntervaltime_intervals_
 
Heapheap_
 

Detailed Description

Definition at line 204 of file heap-snapshot-generator.h.

Constructor & Destructor Documentation

◆ HeapObjectsMap()

v8::internal::HeapObjectsMap::HeapObjectsMap ( Heap heap)
explicit

Definition at line 369 of file heap-snapshot-generator.cc.

372  heap_(heap) {
373  // This dummy element solves a problem with entries_map_.
374  // When we do lookup in HashMap we see no difference between two cases:
375  // it has an entry with NULL as the value or it has created
376  // a new entry on the fly with NULL as the default value.
377  // With such dummy element we have a guaranty that all entries_map_ entries
378  // will have the value field grater than 0.
379  // This fact is using in MoveObject method.
380  entries_.Add(EntryInfo(0, NULL, 0));
381 }
static const SnapshotObjectId kFirstAvailableObjectId
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
static bool AddressesMatch(void *key1, void *key2)

References entries_, and NULL.

Member Function Documentation

◆ DISALLOW_COPY_AND_ASSIGN()

v8::internal::HeapObjectsMap::DISALLOW_COPY_AND_ASSIGN ( HeapObjectsMap  )
private

◆ FindEntry()

SnapshotObjectId v8::internal::HeapObjectsMap::FindEntry ( Address  addr)

Definition at line 437 of file heap-snapshot-generator.cc.

437  {
438  HashMap::Entry* entry = entries_map_.Lookup(addr, ComputePointerHash(addr),
439  false);
440  if (entry == NULL) return 0;
441  int entry_index = static_cast<int>(reinterpret_cast<intptr_t>(entry->value));
442  EntryInfo& entry_info = entries_.at(entry_index);
443  DCHECK(static_cast<uint32_t>(entries_.length()) > entries_map_.occupancy());
444  return entry_info.id;
445 }
uint32_t occupancy() const
Definition: hashmap.h:61
Entry * Lookup(void *key, uint32_t hash, bool insert, AllocationPolicy allocator=AllocationPolicy())
Definition: hashmap.h:114
#define DCHECK(condition)
Definition: logging.h:205
uint32_t ComputePointerHash(void *ptr)
Definition: utils.h:274

References v8::internal::ComputePointerHash(), DCHECK, entries_, entries_map_, v8::internal::HeapObjectsMap::EntryInfo::id, v8::internal::TemplateHashMapImpl< AllocationPolicy >::Lookup(), NULL, and v8::internal::TemplateHashMapImpl< AllocationPolicy >::occupancy().

+ Here is the call graph for this function:

◆ FindOrAddEntry()

SnapshotObjectId v8::internal::HeapObjectsMap::FindOrAddEntry ( Address  addr,
unsigned int  size,
bool  accessed = true 
)

Definition at line 448 of file heap-snapshot-generator.cc.

450  {
451  DCHECK(static_cast<uint32_t>(entries_.length()) > entries_map_.occupancy());
452  HashMap::Entry* entry = entries_map_.Lookup(addr, ComputePointerHash(addr),
453  true);
454  if (entry->value != NULL) {
455  int entry_index =
456  static_cast<int>(reinterpret_cast<intptr_t>(entry->value));
457  EntryInfo& entry_info = entries_.at(entry_index);
458  entry_info.accessed = accessed;
459  if (FLAG_heap_profiler_trace_objects) {
460  PrintF("Update object size : %p with old size %d and new size %d\n",
461  addr,
462  entry_info.size,
463  size);
464  }
465  entry_info.size = size;
466  return entry_info.id;
467  }
468  entry->value = reinterpret_cast<void*>(entries_.length());
471  entries_.Add(EntryInfo(id, addr, size, accessed));
472  DCHECK(static_cast<uint32_t>(entries_.length()) > entries_map_.occupancy());
473  return id;
474 }
enable harmony numeric enable harmony object literal extensions Optimize object size
void PrintF(const char *format,...)
Definition: utils.cc:80
uint32_t SnapshotObjectId
Definition: v8-profiler.h:16

References v8::internal::HeapObjectsMap::EntryInfo::accessed, v8::internal::ComputePointerHash(), DCHECK, entries_, entries_map_, v8::internal::HeapObjectsMap::EntryInfo::id, kObjectIdStep, v8::internal::TemplateHashMapImpl< AllocationPolicy >::Lookup(), next_id_, NULL, v8::internal::TemplateHashMapImpl< AllocationPolicy >::occupancy(), v8::internal::PrintF(), size, and v8::internal::HeapObjectsMap::EntryInfo::size.

Referenced by v8::internal::V8HeapExplorer::AddEntry(), v8::internal::AllocationTracker::AllocationEvent(), UpdateHeapObjectsMap(), and UpdateObjectSize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ FindUntrackedObjects()

int v8::internal::HeapObjectsMap::FindUntrackedObjects ( )

Definition at line 555 of file heap-snapshot-generator.cc.

555  {
556  List<HeapObjectInfo> heap_objects(1000);
557 
558  HeapIterator iterator(heap_);
559  int untracked = 0;
560  for (HeapObject* obj = iterator.next();
561  obj != NULL;
562  obj = iterator.next()) {
563  HashMap::Entry* entry = entries_map_.Lookup(
564  obj->address(), ComputePointerHash(obj->address()), false);
565  if (entry == NULL) {
566  ++untracked;
567  if (FLAG_heap_profiler_trace_objects) {
568  heap_objects.Add(HeapObjectInfo(obj, 0));
569  }
570  } else {
571  int entry_index = static_cast<int>(
572  reinterpret_cast<intptr_t>(entry->value));
573  EntryInfo& entry_info = entries_.at(entry_index);
574  if (FLAG_heap_profiler_trace_objects) {
575  heap_objects.Add(HeapObjectInfo(obj,
576  static_cast<int>(entry_info.size)));
577  if (obj->Size() != static_cast<int>(entry_info.size))
578  ++untracked;
579  } else {
580  CHECK_EQ(obj->Size(), static_cast<int>(entry_info.size));
581  }
582  }
583  }
584  if (FLAG_heap_profiler_trace_objects) {
585  PrintF("\nBegin HeapObjectsMap::FindUntrackedObjects. %d entries in map.\n",
587  heap_objects.Sort(comparator);
588  int last_printed_object = -1;
589  bool print_next_object = false;
590  for (int i = 0; i < heap_objects.length(); ++i) {
591  const HeapObjectInfo& object_info = heap_objects[i];
592  if (!object_info.IsValid()) {
593  ++untracked;
594  if (last_printed_object != i - 1) {
595  if (i > 0) {
596  PrintF("%d objects were skipped\n", i - 1 - last_printed_object);
597  heap_objects[i - 1].Print();
598  }
599  }
600  object_info.Print();
601  last_printed_object = i;
602  print_next_object = true;
603  } else if (print_next_object) {
604  object_info.Print();
605  print_next_object = false;
606  last_printed_object = i;
607  }
608  }
609  if (last_printed_object < heap_objects.length() - 1) {
610  PrintF("Last %d objects were skipped\n",
611  heap_objects.length() - 1 - last_printed_object);
612  }
613  PrintF("End HeapObjectsMap::FindUntrackedObjects. %d entries in map.\n\n",
615  }
616  return untracked;
617 }
#define CHECK_EQ(expected, value)
Definition: logging.h:169
static int comparator(const HeapObjectInfo *a, const HeapObjectInfo *b)

References v8::internal::List< T, AllocationPolicy >::Add(), CHECK_EQ, v8::internal::anonymous_namespace{heap-snapshot-generator.cc}::comparator(), v8::internal::ComputePointerHash(), entries_, entries_map_, heap_, v8::internal::TemplateHashMapImpl< AllocationPolicy >::Lookup(), NULL, v8::internal::TemplateHashMapImpl< AllocationPolicy >::occupancy(), v8::internal::PrintF(), v8::internal::HeapObjectsMap::EntryInfo::size, and v8::internal::List< T, AllocationPolicy >::Sort().

+ Here is the call graph for this function:

◆ GenerateId()

SnapshotObjectId v8::internal::HeapObjectsMap::GenerateId ( v8::RetainedObjectInfo info)

Definition at line 696 of file heap-snapshot-generator.cc.

696  {
697  SnapshotObjectId id = static_cast<SnapshotObjectId>(info->GetHash());
698  const char* label = info->GetLabel();
700  static_cast<int>(strlen(label)),
701  heap_->HashSeed());
702  intptr_t element_count = info->GetElementCount();
703  if (element_count != -1)
704  id ^= ComputeIntegerHash(static_cast<uint32_t>(element_count),
706  return id << 1;
707 }
virtual intptr_t GetHash()=0
Returns hash value for the instance.
virtual const char * GetLabel()=0
Returns human-readable label.
virtual intptr_t GetElementCount()
Returns element count in case if a global handle retains a subgraph by holding one of its nodes.
Definition: v8-profiler.h:580
uint32_t HashSeed()
Definition: heap.h:1237
static uint32_t HashSequentialString(const schar *chars, int length, uint32_t seed)
Definition: objects-inl.h:6563
static const uint32_t kZeroHashSeed
Definition: utils.h:245
uint32_t ComputeIntegerHash(uint32_t key, uint32_t seed)
Definition: utils.h:249

References v8::internal::ComputeIntegerHash(), v8::RetainedObjectInfo::GetElementCount(), v8::RetainedObjectInfo::GetHash(), v8::RetainedObjectInfo::GetLabel(), v8::internal::Heap::HashSeed(), v8::internal::StringHasher::HashSequentialString(), heap_, and v8::internal::kZeroHashSeed.

Referenced by v8::internal::BasicHeapEntriesAllocator::AllocateEntry().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetUsedMemorySize()

size_t v8::internal::HeapObjectsMap::GetUsedMemorySize ( ) const

Definition at line 710 of file heap-snapshot-generator.cc.

710  {
711  return
712  sizeof(*this) +
713  sizeof(HashMap::Entry) * entries_map_.capacity() +
716 }
uint32_t capacity() const
Definition: hashmap.h:66
size_t GetMemoryUsedByList(const List< T, P > &list)
Definition: list.h:184

References v8::internal::TemplateHashMapImpl< AllocationPolicy >::capacity(), entries_, entries_map_, v8::internal::GetMemoryUsedByList(), and time_intervals_.

+ Here is the call graph for this function:

◆ heap()

Heap* v8::internal::HeapObjectsMap::heap ( ) const
inline

Definition at line 208 of file heap-snapshot-generator.h.

208 { return heap_; }

References heap_.

Referenced by v8::internal::AllocationTracker::AllocationEvent().

+ Here is the caller graph for this function:

◆ last_assigned_id()

SnapshotObjectId v8::internal::HeapObjectsMap::last_assigned_id ( ) const
inline

Definition at line 216 of file heap-snapshot-generator.h.

216  {
217  return next_id_ - kObjectIdStep;
218  }

References kObjectIdStep, and next_id_.

Referenced by PushHeapObjectsStats(), and v8::internal::HeapSnapshot::RememberLastJSObjectId().

+ Here is the caller graph for this function:

◆ MoveObject()

bool v8::internal::HeapObjectsMap::MoveObject ( Address  from,
Address  to,
int  size 
)

Definition at line 384 of file heap-snapshot-generator.cc.

384  {
385  DCHECK(to != NULL);
386  DCHECK(from != NULL);
387  if (from == to) return false;
388  void* from_value = entries_map_.Remove(from, ComputePointerHash(from));
389  if (from_value == NULL) {
390  // It may occur that some untracked object moves to an address X and there
391  // is a tracked object at that address. In this case we should remove the
392  // entry as we know that the object has died.
393  void* to_value = entries_map_.Remove(to, ComputePointerHash(to));
394  if (to_value != NULL) {
395  int to_entry_info_index =
396  static_cast<int>(reinterpret_cast<intptr_t>(to_value));
397  entries_.at(to_entry_info_index).addr = NULL;
398  }
399  } else {
400  HashMap::Entry* to_entry = entries_map_.Lookup(to, ComputePointerHash(to),
401  true);
402  if (to_entry->value != NULL) {
403  // We found the existing entry with to address for an old object.
404  // Without this operation we will have two EntryInfo's with the same
405  // value in addr field. It is bad because later at RemoveDeadEntries
406  // one of this entry will be removed with the corresponding entries_map_
407  // entry.
408  int to_entry_info_index =
409  static_cast<int>(reinterpret_cast<intptr_t>(to_entry->value));
410  entries_.at(to_entry_info_index).addr = NULL;
411  }
412  int from_entry_info_index =
413  static_cast<int>(reinterpret_cast<intptr_t>(from_value));
414  entries_.at(from_entry_info_index).addr = to;
415  // Size of an object can change during its life, so to keep information
416  // about the object in entries_ consistent, we have to adjust size when the
417  // object is migrated.
418  if (FLAG_heap_profiler_trace_objects) {
419  PrintF("Move object from %p to %p old size %6d new size %6d\n",
420  from,
421  to,
422  entries_.at(from_entry_info_index).size,
423  object_size);
424  }
425  entries_.at(from_entry_info_index).size = object_size;
426  to_entry->value = from_value;
427  }
428  return from_value != NULL;
429 }
void * Remove(void *key, uint32_t hash)
Definition: hashmap.h:145
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be expose gc extension under the specified name show built in functions in stack traces use random jit cookie to mask large constants minimum length for automatic enable preparsing CPU profiler sampling interval in microseconds trace out of bounds accesses to external arrays default size of stack region v8 is allowed to maximum length of function source code printed in a stack trace min size of a semi the new space consists of two semi spaces print one trace line following each garbage collection do not print trace line after scavenger collection print cumulative GC statistics in only print modified registers Trace simulator debug messages Implied by trace sim abort randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot A filename with extra code to be included in the A file to write the raw snapshot bytes to(mksnapshot only)") DEFINE_STRING(raw_context_file

References v8::internal::ComputePointerHash(), DCHECK, entries_, entries_map_, v8::internal::TemplateHashMapImpl< AllocationPolicy >::Lookup(), NULL, v8::internal::PrintF(), v8::internal::TemplateHashMapImpl< AllocationPolicy >::Remove(), and to().

+ Here is the call graph for this function:

◆ PushHeapObjectsStats()

SnapshotObjectId v8::internal::HeapObjectsMap::PushHeapObjectsStats ( OutputStream stream)

Definition at line 620 of file heap-snapshot-generator.cc.

620  {
622  time_intervals_.Add(TimeInterval(next_id_));
623  int prefered_chunk_size = stream->GetChunkSize();
624  List<v8::HeapStatsUpdate> stats_buffer;
625  DCHECK(!entries_.is_empty());
626  EntryInfo* entry_info = &entries_.first();
627  EntryInfo* end_entry_info = &entries_.last() + 1;
628  for (int time_interval_index = 0;
629  time_interval_index < time_intervals_.length();
630  ++time_interval_index) {
631  TimeInterval& time_interval = time_intervals_[time_interval_index];
632  SnapshotObjectId time_interval_id = time_interval.id;
633  uint32_t entries_size = 0;
634  EntryInfo* start_entry_info = entry_info;
635  while (entry_info < end_entry_info && entry_info->id < time_interval_id) {
636  entries_size += entry_info->size;
637  ++entry_info;
638  }
639  uint32_t entries_count =
640  static_cast<uint32_t>(entry_info - start_entry_info);
641  if (time_interval.count != entries_count ||
642  time_interval.size != entries_size) {
643  stats_buffer.Add(v8::HeapStatsUpdate(
644  time_interval_index,
645  time_interval.count = entries_count,
646  time_interval.size = entries_size));
647  if (stats_buffer.length() >= prefered_chunk_size) {
648  OutputStream::WriteResult result = stream->WriteHeapStatsChunk(
649  &stats_buffer.first(), stats_buffer.length());
650  if (result == OutputStream::kAbort) return last_assigned_id();
651  stats_buffer.Clear();
652  }
653  }
654  }
655  DCHECK(entry_info == end_entry_info);
656  if (!stats_buffer.is_empty()) {
657  OutputStream::WriteResult result = stream->WriteHeapStatsChunk(
658  &stats_buffer.first(), stats_buffer.length());
659  if (result == OutputStream::kAbort) return last_assigned_id();
660  }
661  stream->EndOfStream();
662  return last_assigned_id();
663 }
SnapshotObjectId last_assigned_id() const
A struct for exporting HeapStats data from V8, using "push" model.
Definition: v8-profiler.h:599

References v8::internal::List< T, AllocationPolicy >::Add(), v8::internal::HeapObjectsMap::TimeInterval::count, DCHECK, v8::OutputStream::EndOfStream(), entries_, v8::internal::List< T, AllocationPolicy >::first(), v8::OutputStream::GetChunkSize(), v8::internal::HeapObjectsMap::TimeInterval::id, v8::OutputStream::kAbort, last_assigned_id(), next_id_, v8::internal::HeapObjectsMap::EntryInfo::size, v8::internal::HeapObjectsMap::TimeInterval::size, time_intervals_, UpdateHeapObjectsMap(), and v8::OutputStream::WriteHeapStatsChunk().

+ Here is the call graph for this function:

◆ RemoveDeadEntries()

void v8::internal::HeapObjectsMap::RemoveDeadEntries ( )

Definition at line 666 of file heap-snapshot-generator.cc.

666  {
667  DCHECK(entries_.length() > 0 &&
668  entries_.at(0).id == 0 &&
669  entries_.at(0).addr == NULL);
670  int first_free_entry = 1;
671  for (int i = 1; i < entries_.length(); ++i) {
672  EntryInfo& entry_info = entries_.at(i);
673  if (entry_info.accessed) {
674  if (first_free_entry != i) {
675  entries_.at(first_free_entry) = entry_info;
676  }
677  entries_.at(first_free_entry).accessed = false;
678  HashMap::Entry* entry = entries_map_.Lookup(
679  entry_info.addr, ComputePointerHash(entry_info.addr), false);
680  DCHECK(entry);
681  entry->value = reinterpret_cast<void*>(first_free_entry);
682  ++first_free_entry;
683  } else {
684  if (entry_info.addr) {
685  entries_map_.Remove(entry_info.addr,
686  ComputePointerHash(entry_info.addr));
687  }
688  }
689  }
690  entries_.Rewind(first_free_entry);
691  DCHECK(static_cast<uint32_t>(entries_.length()) - 1 ==
693 }

References v8::internal::HeapObjectsMap::EntryInfo::accessed, v8::internal::HeapObjectsMap::EntryInfo::addr, v8::internal::ComputePointerHash(), DCHECK, entries_, entries_map_, v8::internal::TemplateHashMapImpl< AllocationPolicy >::Lookup(), NULL, v8::internal::TemplateHashMapImpl< AllocationPolicy >::occupancy(), and v8::internal::TemplateHashMapImpl< AllocationPolicy >::Remove().

Referenced by UpdateHeapObjectsMap().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ StopHeapObjectsTracking()

void v8::internal::HeapObjectsMap::StopHeapObjectsTracking ( )

Definition at line 477 of file heap-snapshot-generator.cc.

477  {
478  time_intervals_.Clear();
479 }

References time_intervals_.

◆ UpdateHeapObjectsMap()

void v8::internal::HeapObjectsMap::UpdateHeapObjectsMap ( )

Definition at line 482 of file heap-snapshot-generator.cc.

482  {
483  if (FLAG_heap_profiler_trace_objects) {
484  PrintF("Begin HeapObjectsMap::UpdateHeapObjectsMap. map has %d entries.\n",
486  }
488  "HeapObjectsMap::UpdateHeapObjectsMap");
489  HeapIterator iterator(heap_);
490  for (HeapObject* obj = iterator.next();
491  obj != NULL;
492  obj = iterator.next()) {
493  FindOrAddEntry(obj->address(), obj->Size());
494  if (FLAG_heap_profiler_trace_objects) {
495  PrintF("Update object : %p %6d. Next address is %p\n",
496  obj->address(),
497  obj->Size(),
498  obj->address() + obj->Size());
499  }
500  }
502  if (FLAG_heap_profiler_trace_objects) {
503  PrintF("End HeapObjectsMap::UpdateHeapObjectsMap. map has %d entries.\n",
505  }
506 }
SnapshotObjectId FindOrAddEntry(Address addr, unsigned int size, bool accessed=true)
static const int kMakeHeapIterableMask
Definition: heap.h:721
void CollectAllGarbage(int flags, const char *gc_reason=NULL, const GCCallbackFlags gc_callback_flags=kNoGCCallbackFlags)
Definition: heap.cc:724

References v8::internal::Heap::CollectAllGarbage(), entries_map_, FindOrAddEntry(), heap_, v8::internal::Heap::kMakeHeapIterableMask, NULL, v8::internal::TemplateHashMapImpl< AllocationPolicy >::occupancy(), v8::internal::PrintF(), and RemoveDeadEntries().

Referenced by PushHeapObjectsStats().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ UpdateObjectSize()

void v8::internal::HeapObjectsMap::UpdateObjectSize ( Address  addr,
int  size 
)

Definition at line 432 of file heap-snapshot-generator.cc.

432  {
433  FindOrAddEntry(addr, size, false);
434 }

References FindOrAddEntry(), and size.

+ Here is the call graph for this function:

Member Data Documentation

◆ entries_

◆ entries_map_

HashMap v8::internal::HeapObjectsMap::entries_map_
private

◆ heap_

Heap* v8::internal::HeapObjectsMap::heap_
private

◆ kFirstAvailableObjectId

◆ kGcRootsFirstSubrootId

const SnapshotObjectId v8::internal::HeapObjectsMap::kGcRootsFirstSubrootId
static

◆ kGcRootsObjectId

const SnapshotObjectId v8::internal::HeapObjectsMap::kGcRootsObjectId
static

◆ kInternalRootObjectId

const SnapshotObjectId v8::internal::HeapObjectsMap::kInternalRootObjectId = 1
static

Definition at line 227 of file heap-snapshot-generator.h.

Referenced by v8::internal::HeapSnapshot::AddRootEntry().

◆ kObjectIdStep

const int v8::internal::HeapObjectsMap::kObjectIdStep = 2
static

◆ next_id_

SnapshotObjectId v8::internal::HeapObjectsMap::next_id_
private

◆ time_intervals_

List<TimeInterval> v8::internal::HeapObjectsMap::time_intervals_
private

The documentation for this class was generated from the following files: