LCOV - code coverage report
Current view: top level - src - allocation-site-scopes.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 13 13 100.0 %
Date: 2017-04-26 Functions: 3 3 100.0 %

          Line data    Source code
       1             : // Copyright 2013 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/allocation-site-scopes.h"
       6             : #include "src/factory.h"
       7             : #include "src/isolate.h"
       8             : #include "src/objects-inl.h"
       9             : 
      10             : namespace v8 {
      11             : namespace internal {
      12             : 
      13             : 
      14     1225888 : Handle<AllocationSite> AllocationSiteCreationContext::EnterNewScope() {
      15             :   Handle<AllocationSite> scope_site;
      16     2451777 :   if (top().is_null()) {
      17             :     // We are creating the top level AllocationSite as opposed to a nested
      18             :     // AllocationSite.
      19      920834 :     InitializeTraversal(isolate()->factory()->NewAllocationSite());
      20             :     scope_site = Handle<AllocationSite>(*top(), isolate());
      21             :     if (FLAG_trace_creation_allocation_sites) {
      22             :       PrintF("*** Creating top level AllocationSite %p\n",
      23             :              static_cast<void*>(*scope_site));
      24             :     }
      25             :   } else {
      26             :     DCHECK(!current().is_null());
      27      305054 :     scope_site = isolate()->factory()->NewAllocationSite();
      28             :     if (FLAG_trace_creation_allocation_sites) {
      29             :       PrintF("Creating nested site (top, current, new) (%p, %p, %p)\n",
      30             :              static_cast<void*>(*top()),
      31             :              static_cast<void*>(*current()),
      32             :              static_cast<void*>(*scope_site));
      33             :     }
      34      305054 :     current()->set_nested_site(*scope_site);
      35             :     update_current_site(*scope_site);
      36             :   }
      37             :   DCHECK(!scope_site.is_null());
      38     1225889 :   return scope_site;
      39             : }
      40             : 
      41             : 
      42     1225758 : void AllocationSiteCreationContext::ExitScope(
      43             :     Handle<AllocationSite> scope_site,
      44             :     Handle<JSObject> object) {
      45     1225758 :   if (!object.is_null()) {
      46             :     bool top_level = !scope_site.is_null() &&
      47             :         top().is_identical_to(scope_site);
      48             : 
      49     1225758 :     scope_site->set_transition_info(*object);
      50             :     if (FLAG_trace_creation_allocation_sites) {
      51             :       if (top_level) {
      52             :         PrintF("*** Setting AllocationSite %p transition_info %p\n",
      53             :                static_cast<void*>(*scope_site),
      54             :                static_cast<void*>(*object));
      55             :       } else {
      56             :         PrintF("Setting AllocationSite (%p, %p) transition_info %p\n",
      57             :                static_cast<void*>(*top()),
      58             :                static_cast<void*>(*scope_site),
      59             :                static_cast<void*>(*object));
      60             :       }
      61             :     }
      62             :   }
      63     1225758 : }
      64             : 
      65             : 
      66     8940785 : bool AllocationSiteUsageContext::ShouldCreateMemento(Handle<JSObject> object) {
      67    16063968 :   if (activated_ && AllocationSite::CanTrack(object->map()->instance_type())) {
      68     7123183 :     if (FLAG_allocation_site_pretenuring ||
      69             :         AllocationSite::GetMode(object->GetElementsKind()) ==
      70             :         TRACK_ALLOCATION_SITE) {
      71             :       if (FLAG_trace_creation_allocation_sites) {
      72             :         PrintF("*** Creating Memento for %s %p\n",
      73             :                object->IsJSArray() ? "JSArray" : "JSObject",
      74             :                static_cast<void*>(*object));
      75             :       }
      76             :       return true;
      77             :     }
      78             :   }
      79             :   return false;
      80             : }
      81             : 
      82             : }  // namespace internal
      83             : }  // namespace v8

Generated by: LCOV version 1.10