| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_BASE_SCOPED_ASYNC_TRACE_H_ |
| #define MEDIA_BASE_SCOPED_ASYNC_TRACE_H_ |
| |
| #include <memory> |
| |
| #include "base/macros.h" |
| #include "media/base/media_export.h" |
| |
| namespace media { |
| |
| // Utility class that starts and stops an async trace event. The intention is |
| // that it it will be created somewhere to start the trace event, passed around |
| // such as via unique_ptr argument in a callback, and eventually freed to end |
| // the trace event. This guarantees that it'll be closed, even if the callback |
| // is destroyed without being run. |
| class MEDIA_EXPORT ScopedAsyncTrace { |
| public: |
| // Create a ScopedAsyncTrace if tracing for "media" is enabled, else return |
| // nullptr. |name| provided to the trace as the name(!). |
| // IMPORTANT: These strings must outlive |this|, since tracing needs it. In |
| // other words, use literal strings only. See trace_event_common.h . |
| static std::unique_ptr<ScopedAsyncTrace> CreateIfEnabled(const char* name); |
| |
| ScopedAsyncTrace(const ScopedAsyncTrace&) = delete; |
| ScopedAsyncTrace& operator=(const ScopedAsyncTrace&) = delete; |
| |
| ~ScopedAsyncTrace(); |
| |
| // TODO(liberato): Add StepInto / StepPast. |
| |
| private: |
| explicit ScopedAsyncTrace(const char* name); |
| |
| const char* name_ = nullptr; |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_SCOPED_ASYNC_TRACE_H_ |