Line data Source code
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/objects.h"
12 :
13 : namespace v8 {
14 : namespace internal {
15 :
16 : // Forward declaration.
17 : class Isolate;
18 :
19 : struct CoverageFunction {
20 : CoverageFunction(int s, int e, uint32_t c, Handle<String> n)
21 2505 : : start(s), end(e), count(c), name(n) {}
22 : int start;
23 : int end;
24 : uint32_t count;
25 : Handle<String> name;
26 : };
27 :
28 256 : struct CoverageScript {
29 : // Initialize top-level function in case it has been garbage-collected.
30 359 : explicit CoverageScript(Handle<Script> s) : script(s) {}
31 : Handle<Script> script;
32 : // Functions are sorted by start position, from outer to inner function.
33 : std::vector<CoverageFunction> functions;
34 : };
35 :
36 158 : class Coverage : public std::vector<CoverageScript> {
37 : public:
38 : // Collecting precise coverage only works if the modes kPreciseCount or
39 : // kPreciseBinary is selected. The invocation count is reset on collection.
40 : // In case of kPreciseCount, an updated count since last collection is
41 : // returned. In case of kPreciseBinary, a count of 1 is returned if a
42 : // function has been executed for the first time since last collection.
43 : static Coverage* CollectPrecise(Isolate* isolate);
44 : // Collecting best effort coverage always works, but may be imprecise
45 : // depending on selected mode. The invocation count is not reset.
46 : static Coverage* CollectBestEffort(Isolate* isolate);
47 :
48 : // Select code coverage mode.
49 : static void SelectMode(Isolate* isolate, debug::Coverage::Mode mode);
50 :
51 : private:
52 : static Coverage* Collect(Isolate* isolate,
53 : v8::debug::Coverage::Mode collectionMode);
54 :
55 : Coverage() {}
56 : };
57 :
58 : } // namespace internal
59 : } // namespace v8
60 :
61 : #endif // V8_DEBUG_DEBUG_COVERAGE_H_
|