Factor duplicated code to a single spot.
PerfettoProtoAppender can be shared between the two files that both defined it. Bug: 364987728 Change-Id: I62d0239082b7c146403fc4e7f254753a37925214 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6136374 Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Auto-Submit: Peter Kasting <pkasting@chromium.org> Commit-Queue: Peter Kasting <pkasting@chromium.org> Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org> Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com> Cr-Commit-Position: refs/heads/main@{#1401420}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
daf40c5b9e
commit
c94122ccf2
@@ -2374,6 +2374,8 @@ component("base") {
|
|||||||
"trace_event/memory_usage_estimator.cc",
|
"trace_event/memory_usage_estimator.cc",
|
||||||
"trace_event/memory_usage_estimator.h",
|
"trace_event/memory_usage_estimator.h",
|
||||||
"trace_event/optional_trace_event.h",
|
"trace_event/optional_trace_event.h",
|
||||||
|
"trace_event/perfetto_proto_appender.cc",
|
||||||
|
"trace_event/perfetto_proto_appender.h",
|
||||||
"trace_event/process_memory_dump.cc",
|
"trace_event/process_memory_dump.cc",
|
||||||
"trace_event/process_memory_dump.h",
|
"trace_event/process_memory_dump.h",
|
||||||
"trace_event/trace_arguments.cc",
|
"trace_event/trace_arguments.cc",
|
||||||
|
32
base/trace_event/perfetto_proto_appender.cc
Normal file
32
base/trace_event/perfetto_proto_appender.cc
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2025 The Chromium Authors
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "base/trace_event/perfetto_proto_appender.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h"
|
||||||
|
#include "third_party/perfetto/protos/perfetto/trace/track_event/debug_annotation.pbzero.h"
|
||||||
|
|
||||||
|
namespace base::trace_event {
|
||||||
|
|
||||||
|
PerfettoProtoAppender::PerfettoProtoAppender(
|
||||||
|
perfetto::protos::pbzero::DebugAnnotation* proto)
|
||||||
|
: annotation_proto_(proto) {}
|
||||||
|
|
||||||
|
PerfettoProtoAppender::~PerfettoProtoAppender() = default;
|
||||||
|
|
||||||
|
void PerfettoProtoAppender::AddBuffer(uint8_t* begin, uint8_t* end) {
|
||||||
|
ranges_.push_back({.begin = begin, .end = end});
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t PerfettoProtoAppender::Finalize(uint32_t field_id) {
|
||||||
|
return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(),
|
||||||
|
ranges_.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace base::trace_event
|
35
base/trace_event/perfetto_proto_appender.h
Normal file
35
base/trace_event/perfetto_proto_appender.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2025 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_PERFETTO_PROTO_APPENDER_H_
|
||||||
|
#define BASE_TRACE_EVENT_PERFETTO_PROTO_APPENDER_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "base/memory/raw_ptr.h"
|
||||||
|
#include "base/trace_event/trace_arguments.h"
|
||||||
|
#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h"
|
||||||
|
#include "third_party/perfetto/protos/perfetto/trace/track_event/debug_annotation.pbzero.h"
|
||||||
|
|
||||||
|
namespace base::trace_event {
|
||||||
|
|
||||||
|
class BASE_EXPORT PerfettoProtoAppender
|
||||||
|
: public ConvertableToTraceFormat::ProtoAppender {
|
||||||
|
public:
|
||||||
|
explicit PerfettoProtoAppender(
|
||||||
|
perfetto::protos::pbzero::DebugAnnotation* proto);
|
||||||
|
~PerfettoProtoAppender() override;
|
||||||
|
|
||||||
|
// ConvertableToTraceFormat::ProtoAppender:
|
||||||
|
void AddBuffer(uint8_t* begin, uint8_t* end) override;
|
||||||
|
size_t Finalize(uint32_t field_id) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<protozero::ContiguousMemoryRange> ranges_;
|
||||||
|
raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace base::trace_event
|
||||||
|
|
||||||
|
#endif // BASE_TRACE_EVENT_PERFETTO_PROTO_APPENDER_H_
|
@@ -26,6 +26,7 @@
|
|||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
#include "base/strings/stringprintf.h"
|
#include "base/strings/stringprintf.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
|
#include "base/trace_event/perfetto_proto_appender.h"
|
||||||
|
|
||||||
namespace base {
|
namespace base {
|
||||||
namespace trace_event {
|
namespace trace_event {
|
||||||
@@ -120,29 +121,6 @@ void AppendValueDebugString(const TraceArguments& args,
|
|||||||
*out += ")";
|
*out += ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
class PerfettoProtoAppender : public ConvertableToTraceFormat::ProtoAppender {
|
|
||||||
public:
|
|
||||||
explicit PerfettoProtoAppender(
|
|
||||||
perfetto::protos::pbzero::DebugAnnotation* proto)
|
|
||||||
: annotation_proto_(proto) {}
|
|
||||||
~PerfettoProtoAppender() override = default;
|
|
||||||
|
|
||||||
void AddBuffer(uint8_t* begin, uint8_t* end) override {
|
|
||||||
ranges_.emplace_back();
|
|
||||||
ranges_.back().begin = begin;
|
|
||||||
ranges_.back().end = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Finalize(uint32_t field_id) override {
|
|
||||||
return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(),
|
|
||||||
ranges_.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<protozero::ContiguousMemoryRange> ranges_;
|
|
||||||
raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void StringStorage::Reset(size_t alloc_size) {
|
void StringStorage::Reset(size_t alloc_size) {
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
#include "base/task/single_thread_task_runner.h"
|
#include "base/task/single_thread_task_runner.h"
|
||||||
#include "base/threading/platform_thread.h"
|
#include "base/threading/platform_thread.h"
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
|
#include "base/trace_event/perfetto_proto_appender.h"
|
||||||
#include "base/trace_event/trace_event.h"
|
#include "base/trace_event/trace_event.h"
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "third_party/perfetto/include/perfetto/ext/trace_processor/export_json.h" // nogncheck
|
#include "third_party/perfetto/include/perfetto/ext/trace_processor/export_json.h" // nogncheck
|
||||||
@@ -94,31 +95,6 @@ void InitializeMetadataEvent(TraceEvent* trace_event,
|
|||||||
&args, TRACE_EVENT_FLAG_NONE);
|
&args, TRACE_EVENT_FLAG_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
class PerfettoProtoAppender
|
|
||||||
: public base::trace_event::ConvertableToTraceFormat::ProtoAppender {
|
|
||||||
public:
|
|
||||||
explicit PerfettoProtoAppender(
|
|
||||||
perfetto::protos::pbzero::DebugAnnotation* proto)
|
|
||||||
: annotation_proto_(proto) {}
|
|
||||||
~PerfettoProtoAppender() override = default;
|
|
||||||
|
|
||||||
// ProtoAppender implementation
|
|
||||||
void AddBuffer(uint8_t* begin, uint8_t* end) override {
|
|
||||||
ranges_.emplace_back();
|
|
||||||
ranges_.back().begin = begin;
|
|
||||||
ranges_.back().end = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Finalize(uint32_t field_id) override {
|
|
||||||
return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(),
|
|
||||||
ranges_.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<protozero::ContiguousMemoryRange> ranges_;
|
|
||||||
raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_;
|
|
||||||
};
|
|
||||||
|
|
||||||
void AddConvertableToTraceFormat(
|
void AddConvertableToTraceFormat(
|
||||||
base::trace_event::ConvertableToTraceFormat* value,
|
base::trace_event::ConvertableToTraceFormat* value,
|
||||||
perfetto::protos::pbzero::DebugAnnotation* annotation) {
|
perfetto::protos::pbzero::DebugAnnotation* annotation) {
|
||||||
|
@@ -28,22 +28,6 @@ using TraceEvent = base::trace_event::TraceEvent;
|
|||||||
|
|
||||||
namespace tracing {
|
namespace tracing {
|
||||||
|
|
||||||
PerfettoProtoAppender::PerfettoProtoAppender(DebugAnnotation* proto)
|
|
||||||
: annotation_proto_(proto) {}
|
|
||||||
|
|
||||||
PerfettoProtoAppender::~PerfettoProtoAppender() = default;
|
|
||||||
|
|
||||||
void PerfettoProtoAppender::AddBuffer(uint8_t* begin, uint8_t* end) {
|
|
||||||
ranges_.emplace_back();
|
|
||||||
ranges_.back().begin = begin;
|
|
||||||
ranges_.back().end = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t PerfettoProtoAppender::Finalize(uint32_t field_id) {
|
|
||||||
return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(),
|
|
||||||
ranges_.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr size_t kDefaultSliceSize = 128;
|
constexpr size_t kDefaultSliceSize = 128;
|
||||||
|
@@ -6,36 +6,9 @@
|
|||||||
#define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACED_VALUE_PROTO_WRITER_H_
|
#define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACED_VALUE_PROTO_WRITER_H_
|
||||||
|
|
||||||
#include "base/component_export.h"
|
#include "base/component_export.h"
|
||||||
#include "base/memory/raw_ptr.h"
|
|
||||||
#include "base/trace_event/trace_event_impl.h"
|
|
||||||
#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h"
|
|
||||||
|
|
||||||
namespace perfetto {
|
|
||||||
namespace protos {
|
|
||||||
namespace pbzero {
|
|
||||||
class DebugAnnotation;
|
|
||||||
} // namespace pbzero
|
|
||||||
} // namespace protos
|
|
||||||
} // namespace perfetto
|
|
||||||
|
|
||||||
namespace tracing {
|
namespace tracing {
|
||||||
|
|
||||||
class COMPONENT_EXPORT(TRACING_CPP) PerfettoProtoAppender
|
|
||||||
: public base::trace_event::ConvertableToTraceFormat::ProtoAppender {
|
|
||||||
public:
|
|
||||||
explicit PerfettoProtoAppender(
|
|
||||||
perfetto::protos::pbzero::DebugAnnotation* proto);
|
|
||||||
~PerfettoProtoAppender() override;
|
|
||||||
|
|
||||||
// ProtoAppender implementation
|
|
||||||
void AddBuffer(uint8_t* begin, uint8_t* end) override;
|
|
||||||
size_t Finalize(uint32_t field_id) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<protozero::ContiguousMemoryRange> ranges_;
|
|
||||||
raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_;
|
|
||||||
};
|
|
||||||
|
|
||||||
void COMPONENT_EXPORT(TRACING_CPP) RegisterTracedValueProtoWriter();
|
void COMPONENT_EXPORT(TRACING_CPP) RegisterTracedValueProtoWriter();
|
||||||
|
|
||||||
} // namespace tracing
|
} // namespace tracing
|
||||||
|
@@ -13,6 +13,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "base/memory/raw_ptr.h"
|
#include "base/memory/raw_ptr.h"
|
||||||
|
#include "base/notreached.h"
|
||||||
|
#include "base/trace_event/perfetto_proto_appender.h"
|
||||||
#include "base/trace_event/traced_value.h"
|
#include "base/trace_event/traced_value.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
#include "third_party/perfetto/include/perfetto/protozero/scattered_heap_buffer.h"
|
#include "third_party/perfetto/include/perfetto/protozero/scattered_heap_buffer.h"
|
||||||
@@ -107,7 +109,7 @@ bool IsValue(const NestedValue* proto_value, const char* value) {
|
|||||||
|
|
||||||
NestedValue GetProtoFromTracedValue(TracedValue* traced_value) {
|
NestedValue GetProtoFromTracedValue(TracedValue* traced_value) {
|
||||||
protozero::HeapBuffered<perfetto::protos::pbzero::DebugAnnotation> proto;
|
protozero::HeapBuffered<perfetto::protos::pbzero::DebugAnnotation> proto;
|
||||||
PerfettoProtoAppender proto_appender(proto.get());
|
base::trace_event::PerfettoProtoAppender proto_appender(proto.get());
|
||||||
EXPECT_TRUE(traced_value->AppendToProto(&proto_appender));
|
EXPECT_TRUE(traced_value->AppendToProto(&proto_appender));
|
||||||
|
|
||||||
DebugAnnotation full_proto;
|
DebugAnnotation full_proto;
|
||||||
|
Reference in New Issue
Block a user