| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef REMOTING_HOST_WIN_ETW_TRACE_CONTROLLER_H_ |
| #define REMOTING_HOST_WIN_ETW_TRACE_CONTROLLER_H_ |
| |
| #include "base/sequence_checker.h" |
| #include "base/win/event_trace_controller.h" |
| |
| namespace remoting { |
| |
| // Used to control an ETW trace session for events logged by the remote access |
| // host. Note: Only one instance of this class should be active at a time, |
| // otherwise the session started by the existing controller will be stopped. |
| class EtwTraceController { |
| public: |
| EtwTraceController(); |
| EtwTraceController(const EtwTraceController&) = delete; |
| EtwTraceController& operator=(const EtwTraceController&) = delete; |
| ~EtwTraceController(); |
| |
| // Starts a trace session for events associated with the host provider GUID. |
| // Returns true if this instance has started a trace session, otherwise false. |
| // Note: This will attempt to stop other trace sessions (e.g. from sawbuck). |
| bool Start(); |
| |
| // Stops the active tracing session, if one has been started by this instance. |
| void Stop(); |
| |
| // The active trace session name or nullptr if there isn't an active session. |
| const wchar_t* GetActiveSessionName() const; |
| |
| private: |
| // Only one instance should exist at a time to prevent conflicts. |
| static EtwTraceController* instance_; |
| |
| // Handles the Windows API calls needed for tracing. |
| base::win::EtwTraceController controller_; |
| |
| // Used to ensure public method and destruction calls do not overlap. |
| SEQUENCE_CHECKER(sequence_checker_); |
| }; |
| |
| } // namespace remoting |
| |
| #endif // REMOTING_HOST_WIN_ETW_TRACE_CONTROLLER_H_ |