#include "content/browser/tracing/tracing_ui.h"
#include <stddef.h>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "base/base64.h"
#include "base/command_line.h"
#include "base/format_macros.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/memory/ref_counted_memory.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/trace_event/trace_event.h"
#include "base/values.h"
#include "content/browser/tracing/grit/tracing_resources.h"
#include "content/browser/tracing/tracing_controller_impl.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/tracing_controller.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/common/content_client.h"
#include "content/public/common/url_constants.h"
#include "services/tracing/public/cpp/perfetto/perfetto_config.h"
#include "services/tracing/public/cpp/perfetto/perfetto_session.h"
#include "third_party/perfetto/include/perfetto/tracing/tracing.h"
#include "third_party/perfetto/protos/perfetto/common/trace_stats.gen.h"
namespace content {
namespace {
constexpr char kStreamFormat[] = …;
constexpr char kStreamFormatProtobuf[] = …;
constexpr char kStreamFormatJSON[] = …;
perfetto::TracingSession* g_tracing_session = …;
void OnGotCategories(WebUIDataSource::GotDataCallback callback,
const std::set<std::string>& category_set) { … }
void OnRecordingEnabledAck(WebUIDataSource::GotDataCallback callback);
bool BeginRecording(const std::string& data64,
WebUIDataSource::GotDataCallback callback) { … }
void OnTraceBufferUsageResult(WebUIDataSource::GotDataCallback callback,
float percent_full,
size_t approximate_event_count) { … }
bool GetTraceBufferUsage(WebUIDataSource::GotDataCallback callback) { … }
void ReadProtobufTraceData(
scoped_refptr<TracingController::TraceDataEndpoint> endpoint,
perfetto::TracingSession::ReadTraceCallbackArgs args) { … }
void TracingCallbackWrapperBase64(WebUIDataSource::GotDataCallback callback,
std::unique_ptr<std::string> data) { … }
bool EndRecording(WebUIDataSource::GotDataCallback callback) { … }
void OnRecordingEnabledAck(WebUIDataSource::GotDataCallback callback) { … }
bool OnBeginJSONRequest(const std::string& path,
WebUIDataSource::GotDataCallback callback) { … }
bool OnShouldHandleRequest(const std::string& path) { … }
void OnTracingRequest(const std::string& path,
WebUIDataSource::GotDataCallback callback) { … }
}
TracingUI::TracingUI(WebUI* web_ui) : … { … }
TracingUI::~TracingUI() = default;
bool TracingUI::GetTracingOptions(const std::string& data64,
base::trace_event::TraceConfig& trace_config,
std::string& out_stream_format) { … }
}