/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Core/DebuggerEvents.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- DebuggerEvents.h ----------------------------------------*- C++ -*-===// |
2 | | // |
3 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | | // See https://llvm.org/LICENSE.txt for license information. |
5 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | |
9 | | #include "lldb/Core/ModuleSpec.h" |
10 | | #include "lldb/Utility/Event.h" |
11 | | #include "lldb/Utility/StructuredData.h" |
12 | | |
13 | | #include <string> |
14 | | |
15 | | #ifndef LLDB_CORE_DEBUGGER_EVENTS_H |
16 | | #define LLDB_CORE_DEBUGGER_EVENTS_H |
17 | | |
18 | | namespace lldb_private { |
19 | | class Stream; |
20 | | |
21 | | class ProgressEventData : public EventData { |
22 | | public: |
23 | | ProgressEventData(uint64_t progress_id, std::string title, std::string update, |
24 | | uint64_t completed, uint64_t total, bool debugger_specific) |
25 | 18.9k | : m_title(std::move(title)), m_details(std::move(update)), |
26 | 18.9k | m_id(progress_id), m_completed(completed), m_total(total), |
27 | 18.9k | m_debugger_specific(debugger_specific) {} |
28 | | |
29 | | static llvm::StringRef GetFlavorString(); |
30 | | |
31 | | llvm::StringRef GetFlavor() const override; |
32 | | |
33 | | void Dump(Stream *s) const override; |
34 | | |
35 | | static const ProgressEventData *GetEventDataFromEvent(const Event *event_ptr); |
36 | | |
37 | | static StructuredData::DictionarySP |
38 | | GetAsStructuredData(const Event *event_ptr); |
39 | | |
40 | 18.2k | uint64_t GetID() const { return m_id; } |
41 | 1.10k | bool IsFinite() const { return m_total != UINT64_MAX; } |
42 | 12.0k | uint64_t GetCompleted() const { return m_completed; } |
43 | 12.0k | uint64_t GetTotal() const { return m_total; } |
44 | 1.11k | std::string GetMessage() const { |
45 | 1.11k | std::string message = m_title; |
46 | 1.11k | if (!m_details.empty()) { |
47 | 0 | message.append(": "); |
48 | 0 | message.append(m_details); |
49 | 0 | } |
50 | 1.11k | return message; |
51 | 1.11k | } |
52 | 2 | const std::string &GetTitle() const { return m_title; } |
53 | 2 | const std::string &GetDetails() const { return m_details; } |
54 | 6 | bool IsDebuggerSpecific() const { return m_debugger_specific; } |
55 | | |
56 | | private: |
57 | | /// The title of this progress event. The value is expected to remain stable |
58 | | /// for a given progress ID. |
59 | | std::string m_title; |
60 | | |
61 | | /// Details associated with this progress event update. The value is expected |
62 | | /// to change between progress events. |
63 | | std::string m_details; |
64 | | |
65 | | /// Unique ID used to associate progress events. |
66 | | const uint64_t m_id; |
67 | | |
68 | | uint64_t m_completed; |
69 | | const uint64_t m_total; |
70 | | const bool m_debugger_specific; |
71 | | ProgressEventData(const ProgressEventData &) = delete; |
72 | | const ProgressEventData &operator=(const ProgressEventData &) = delete; |
73 | | }; |
74 | | |
75 | | class DiagnosticEventData : public EventData { |
76 | | public: |
77 | | enum class Type { |
78 | | Info, |
79 | | Warning, |
80 | | Error, |
81 | | }; |
82 | | DiagnosticEventData(Type type, std::string message, bool debugger_specific) |
83 | 107 | : m_message(std::move(message)), m_type(type), |
84 | 107 | m_debugger_specific(debugger_specific) {} |
85 | 107 | ~DiagnosticEventData() override = default; |
86 | | |
87 | 106 | const std::string &GetMessage() const { return m_message; } |
88 | 2 | bool IsDebuggerSpecific() const { return m_debugger_specific; } |
89 | 0 | Type GetType() const { return m_type; } |
90 | | |
91 | | llvm::StringRef GetPrefix() const; |
92 | | |
93 | | void Dump(Stream *s) const override; |
94 | | |
95 | | static llvm::StringRef GetFlavorString(); |
96 | | llvm::StringRef GetFlavor() const override; |
97 | | |
98 | | static const DiagnosticEventData * |
99 | | GetEventDataFromEvent(const Event *event_ptr); |
100 | | |
101 | | static StructuredData::DictionarySP |
102 | | GetAsStructuredData(const Event *event_ptr); |
103 | | |
104 | | protected: |
105 | | std::string m_message; |
106 | | Type m_type; |
107 | | const bool m_debugger_specific; |
108 | | |
109 | | DiagnosticEventData(const DiagnosticEventData &) = delete; |
110 | | const DiagnosticEventData &operator=(const DiagnosticEventData &) = delete; |
111 | | }; |
112 | | |
113 | | class SymbolChangeEventData : public EventData { |
114 | | public: |
115 | | SymbolChangeEventData(lldb::DebuggerWP debugger_wp, ModuleSpec module_spec) |
116 | 0 | : m_debugger_wp(debugger_wp), m_module_spec(std::move(module_spec)) {} |
117 | | |
118 | | static llvm::StringRef GetFlavorString(); |
119 | | llvm::StringRef GetFlavor() const override; |
120 | | |
121 | | static const SymbolChangeEventData * |
122 | | GetEventDataFromEvent(const Event *event_ptr); |
123 | | |
124 | | void DoOnRemoval(Event *event_ptr) override; |
125 | | |
126 | | private: |
127 | | lldb::DebuggerWP m_debugger_wp; |
128 | | ModuleSpec m_module_spec; |
129 | | |
130 | | SymbolChangeEventData(const SymbolChangeEventData &) = delete; |
131 | | const SymbolChangeEventData & |
132 | | operator=(const SymbolChangeEventData &) = delete; |
133 | | }; |
134 | | |
135 | | } // namespace lldb_private |
136 | | |
137 | | #endif // LLDB_CORE_DEBUGGER_EVENTS_H |