From: alph@chromium.org Date: Thu, 3 Apr 2014 16:32:59 +0000 (+0000) Subject: Do not mark prototype transitions link as weak in heap snapshot. X-Git-Tag: upstream/4.7.83~9829 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c124982b63edf98133396524bd94c76949474a2;p=platform%2Fupstream%2Fv8.git Do not mark prototype transitions link as weak in heap snapshot. R=ulan@chromium.org Review URL: https://codereview.chromium.org/223643004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20490 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/heap-snapshot-generator.cc b/src/heap-snapshot-generator.cc index b23b60f..8410ba3 100644 --- a/src/heap-snapshot-generator.cc +++ b/src/heap-snapshot-generator.cc @@ -1322,8 +1322,23 @@ void V8HeapExplorer::ExtractMapReferences(int entry, Map* map) { TagObject(back_pointer, "(back pointer)"); SetInternalReference(transitions, transitions_entry, "back_pointer", back_pointer); + + if (FLAG_collect_maps && map->CanTransition()) { + if (!transitions->IsSimpleTransition()) { + if (transitions->HasPrototypeTransitions()) { + FixedArray* prototype_transitions = + transitions->GetPrototypeTransitions(); + MarkAsWeakContainer(prototype_transitions); + TagObject(prototype_transitions, "(prototype transitions"); + SetInternalReference(transitions, transitions_entry, + "prototype_transitions", prototype_transitions); + } + // TODO(alph): transitions keys are strong links. + MarkAsWeakContainer(transitions); + } + } + TagObject(transitions, "(transition array)"); - MarkAsWeakContainer(transitions); SetInternalReference(map, entry, "transitions", transitions, Map::kTransitionsOrBackPointerOffset);