LCOV - code coverage report
Current view: top level - test/cctest - test-feedback-vector.h (source / functions) Hit Total Coverage
Test: app.info Lines: 18 18 100.0 %
Date: 2019-04-17 Functions: 2 2 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             : #ifndef V8_TEST_FEEDBACK_VECTOR_H_
       6             : #define V8_TEST_FEEDBACK_VECTOR_H_
       7             : 
       8             : #include "src/feedback-vector.h"
       9             : #include "src/objects.h"
      10             : #include "src/objects/shared-function-info.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : // Helper class that allows to write tests in a slot size independent manner.
      16             : // Use helper.slot(X) to get X'th slot identifier.
      17          89 : class FeedbackVectorHelper {
      18             :  public:
      19          89 :   explicit FeedbackVectorHelper(Handle<FeedbackVector> vector)
      20          89 :       : vector_(vector) {
      21             :     int slot_count = vector->length();
      22          89 :     slots_.reserve(slot_count);
      23             :     FeedbackMetadataIterator iter(vector->metadata());
      24         897 :     while (iter.HasNext()) {
      25         404 :       FeedbackSlot slot = iter.Next();
      26         404 :       slots_.push_back(slot);
      27             :     }
      28          89 :   }
      29             : 
      30             :   Handle<FeedbackVector> vector() { return vector_; }
      31             : 
      32             :   // Returns slot identifier by numerical index.
      33         585 :   FeedbackSlot slot(int index) const { return slots_[index]; }
      34             : 
      35             :   // Returns the number of slots in the feedback vector.
      36          60 :   int slot_count() const { return static_cast<int>(slots_.size()); }
      37             : 
      38             :  private:
      39             :   Handle<FeedbackVector> vector_;
      40             :   std::vector<FeedbackSlot> slots_;
      41             : };
      42             : 
      43             : template <typename Spec>
      44          25 : Handle<FeedbackVector> NewFeedbackVector(Isolate* isolate, Spec* spec) {
      45          25 :   Handle<FeedbackMetadata> metadata = FeedbackMetadata::New(isolate, spec);
      46             :   Handle<SharedFunctionInfo> shared =
      47          25 :       isolate->factory()->NewSharedFunctionInfoForBuiltin(
      48          25 :           isolate->factory()->empty_string(), Builtins::kIllegal);
      49             :   // Set the raw feedback metadata to circumvent checks that we are not
      50             :   // overwriting existing metadata.
      51          50 :   shared->set_raw_outer_scope_info_or_feedback_metadata(*metadata);
      52             :   Handle<ClosureFeedbackCellArray> closure_feedback_cell_array =
      53          25 :       ClosureFeedbackCellArray::New(isolate, shared);
      54          25 :   return FeedbackVector::New(isolate, shared, closure_feedback_cell_array);
      55             : }
      56             : 
      57             : template <typename Spec>
      58             : Handle<FeedbackMetadata> NewFeedbackMetadata(Isolate* isolate, Spec* spec) {
      59       17790 :   return FeedbackMetadata::New(isolate, spec);
      60             : }
      61             : 
      62             : }  // namespace internal
      63             : }  // namespace v8
      64             : 
      65             : #endif

Generated by: LCOV version 1.10