V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
debug-coverage.h
1 // Copyright 2017 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_DEBUG_DEBUG_COVERAGE_H_
6 #define V8_DEBUG_DEBUG_COVERAGE_H_
7 
8 #include <vector>
9 
10 #include "src/debug/debug-interface.h"
11 #include "src/handles.h"
12 #include "src/objects.h"
13 
14 namespace v8 {
15 namespace internal {
16 
17 // Forward declaration.
18 class Isolate;
19 
20 struct CoverageBlock {
21  CoverageBlock(int s, int e, uint32_t c) : start(s), end(e), count(c) {}
22  CoverageBlock() : CoverageBlock(kNoSourcePosition, kNoSourcePosition, 0) {}
23  int start;
24  int end;
25  uint32_t count;
26 };
27 
29  CoverageFunction(int s, int e, uint32_t c, Handle<String> n)
30  : start(s), end(e), count(c), name(n), has_block_coverage(false) {}
31  int start;
32  int end;
33  uint32_t count;
34  Handle<String> name;
35  // Blocks are sorted by start position, from outer to inner blocks.
36  std::vector<CoverageBlock> blocks;
37  bool has_block_coverage;
38 };
39 
41  // Initialize top-level function in case it has been garbage-collected.
42  explicit CoverageScript(Handle<Script> s) : script(s) {}
43  Handle<Script> script;
44  // Functions are sorted by start position, from outer to inner function.
45  std::vector<CoverageFunction> functions;
46 };
47 
48 class Coverage : public std::vector<CoverageScript> {
49  public:
50  // Collecting precise coverage only works if the modes kPreciseCount or
51  // kPreciseBinary is selected. The invocation count is reset on collection.
52  // In case of kPreciseCount, an updated count since last collection is
53  // returned. In case of kPreciseBinary, a count of 1 is returned if a
54  // function has been executed for the first time since last collection.
55  static std::unique_ptr<Coverage> CollectPrecise(Isolate* isolate);
56  // Collecting best effort coverage always works, but may be imprecise
57  // depending on selected mode. The invocation count is not reset.
58  static std::unique_ptr<Coverage> CollectBestEffort(Isolate* isolate);
59 
60  // Select code coverage mode.
61  static void SelectMode(Isolate* isolate, debug::Coverage::Mode mode);
62 
63  private:
64  static std::unique_ptr<Coverage> Collect(
65  Isolate* isolate, v8::debug::Coverage::Mode collectionMode);
66 
67  Coverage() = default;
68 };
69 
70 } // namespace internal
71 } // namespace v8
72 
73 #endif // V8_DEBUG_DEBUG_COVERAGE_H_
Definition: libplatform.h:13