12e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 22e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// Redistribution and use in source and binary forms, with or without 32e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// modification, are permitted provided that the following conditions are 42e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// met: 52e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// 62e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Redistributions of source code must retain the above copyright 72e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// notice, this list of conditions and the following disclaimer. 82e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Redistributions in binary form must reproduce the above 92e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// copyright notice, this list of conditions and the following 102e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// disclaimer in the documentation and/or other materials provided 112e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// with the distribution. 122e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Neither the name of Google Inc. nor the names of its 132e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// contributors may be used to endorse or promote products derived 142e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// from this software without specific prior written permission. 152e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// 162e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org#ifndef V8_HEAP_SNAPSHOT_GENERATOR_INL_H_ 292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org#define V8_HEAP_SNAPSHOT_GENERATOR_INL_H_ 302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 312e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org#include "heap-snapshot-generator.h" 322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgnamespace v8 { 342e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgnamespace internal { 352e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 362e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 372e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgHeapEntry* HeapGraphEdge::from() const { 382e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return &snapshot()->entries()[from_index_]; 392e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 402e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 412e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 422e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgHeapSnapshot* HeapGraphEdge::snapshot() const { 432e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return to_entry_->snapshot(); 442e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 452e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 462e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 472e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgint HeapEntry::index() const { 482e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return static_cast<int>(this - &snapshot_->entries().first()); 492e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 502e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 512e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 522e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgint HeapEntry::set_children_index(int index) { 532e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org children_index_ = index; 542e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org int next_index = index + children_count_; 552e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org children_count_ = 0; 562e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return next_index; 572e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 582e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 592e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 602e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgHeapGraphEdge** HeapEntry::children_arr() { 612e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org ASSERT(children_index_ >= 0); 622e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return &snapshot_->children()[children_index_]; 632e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 642e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 652e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 662e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgSnapshotObjectId HeapObjectsMap::GetNthGcSubrootId(int delta) { 672e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return kGcRootsFirstSubrootId + delta * kObjectIdStep; 682e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 692e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 702e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 712e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgHeapObject* V8HeapExplorer::GetNthGcSubrootObject(int delta) { 722e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return reinterpret_cast<HeapObject*>( 732e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org reinterpret_cast<char*>(kFirstGcSubrootObject) + 742e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org delta * HeapObjectsMap::kObjectIdStep); 752e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 762e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 772e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 782e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgint V8HeapExplorer::GetGcSubrootOrder(HeapObject* subroot) { 792e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return static_cast<int>( 802e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org (reinterpret_cast<char*>(subroot) - 812e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org reinterpret_cast<char*>(kFirstGcSubrootObject)) / 822e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org HeapObjectsMap::kObjectIdStep); 832e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 842e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 852e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} } // namespace v8::internal 862e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 872e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org#endif // V8_HEAP_SNAPSHOT_GENERATOR_INL_H_ 88