From 4c124982b63edf98133396524bd94c76949474a2 Mon Sep 17 00:00:00 2001 From: "alph@chromium.org" Date: Thu, 3 Apr 2014 16:32:59 +0000 Subject: [PATCH] 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 --- src/heap-snapshot-generator.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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); -- 2.7.4