| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| |
| #ifndef BASE_TRACE_EVENT_TRACE_BUFFER_H_ |
| #define BASE_TRACE_EVENT_TRACE_BUFFER_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include "base/base_export.h" |
| #include "base/check.h" |
| #include "base/functional/callback.h" |
| |
| namespace base { |
| namespace trace_event { |
| |
| // TraceResultBuffer collects and converts trace fragments returned by TraceLog |
| // to JSON output. |
| class BASE_EXPORT TraceResultBuffer { |
| public: |
| using OutputCallback = base::RepeatingCallback<void(const std::string&)>; |
| |
| // If you don't need to stream JSON chunks out efficiently, and just want to |
| // get a complete JSON string after calling Finish, use this struct to collect |
| // JSON trace output. |
| struct BASE_EXPORT SimpleOutput { |
| OutputCallback GetCallback(); |
| void Append(const std::string& json_string); |
| |
| // Do what you want with the json_output_ string after calling |
| // TraceResultBuffer::Finish. |
| std::string json_output; |
| }; |
| |
| TraceResultBuffer(); |
| ~TraceResultBuffer(); |
| |
| // Set callback. The callback will be called during Start with the initial |
| // JSON output and during AddFragment and Finish with following JSON output |
| // chunks. The callback target must live past the last calls to |
| // TraceResultBuffer::Start/AddFragment/Finish. |
| void SetOutputCallback(OutputCallback json_chunk_callback); |
| |
| // Start JSON output. This resets all internal state, so you can reuse |
| // the TraceResultBuffer by calling Start. |
| void Start(); |
| |
| // Call AddFragment 0 or more times to add trace fragments from TraceLog. |
| void AddFragment(const std::string& trace_fragment); |
| |
| // When all fragments have been added, call Finish to complete the JSON |
| // formatted output. |
| void Finish(); |
| |
| private: |
| OutputCallback output_callback_; |
| bool append_comma_; |
| }; |
| |
| } // namespace trace_event |
| } // namespace base |
| |
| #endif // BASE_TRACE_EVENT_TRACE_BUFFER_H_ |