LCOV - code coverage report
Current view: top level - src - address-map.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 12 12 100.0 %
Date: 2017-04-26 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright 2015 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/address-map.h"
       6             : #include "src/heap/heap.h"
       7             : #include "src/isolate.h"
       8             : #include "src/objects-inl.h"
       9             : 
      10             : namespace v8 {
      11             : namespace internal {
      12             : 
      13     4758992 : RootIndexMap::RootIndexMap(Isolate* isolate) {
      14     4758992 :   map_ = isolate->root_index_map();
      15     9517985 :   if (map_ != NULL) return;
      16       48418 :   map_ = new HeapObjectToIndexHashMap();
      17     9902289 :   for (uint32_t i = 0; i < Heap::kStrongRootListLength; i++) {
      18             :     Heap::RootListIndex root_index = static_cast<Heap::RootListIndex>(i);
      19             :     Object* root = isolate->heap()->root(root_index);
      20     9878078 :     if (!root->IsHeapObject()) continue;
      21             :     // Omit root entries that can be written after initialization. They must
      22             :     // not be referenced through the root list in the snapshot.
      23     9783944 :     if (isolate->heap()->RootCanBeTreatedAsConstant(root_index)) {
      24             :       HeapObject* heap_object = HeapObject::cast(root);
      25     9393733 :       Maybe<uint32_t> maybe_index = map_->Get(heap_object);
      26     9393725 :       if (maybe_index.IsJust()) {
      27             :         // Some are initialized to a previous value in the root list.
      28             :         DCHECK_LT(maybe_index.FromJust(), i);
      29             :       } else {
      30     9393723 :         map_->Set(heap_object, i);
      31             :       }
      32             :     } else {
      33             :       // Immortal immovable root objects are constant and allocated on the first
      34             :       // page of old space. Non-constant roots cannot be immortal immovable. The
      35             :       // root index map contains all immortal immmovable root objects.
      36      390215 :       CHECK(!Heap::RootIsImmortalImmovable(root_index));
      37             :     }
      38             :   }
      39       24211 :   isolate->set_root_index_map(map_);
      40             : }
      41             : 
      42             : }  // namespace internal
      43             : }  // namespace v8

Generated by: LCOV version 1.10