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.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.h",
|
||||
"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/stringprintf.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/trace_event/perfetto_proto_appender.h"
|
||||
|
||||
namespace base {
|
||||
namespace trace_event {
|
||||
@ -120,29 +121,6 @@ void AppendValueDebugString(const TraceArguments& args,
|
||||
*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
|
||||
|
||||
void StringStorage::Reset(size_t alloc_size) {
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "base/task/single_thread_task_runner.h"
|
||||
#include "base/threading/platform_thread.h"
|
||||
#include "base/time/time.h"
|
||||
#include "base/trace_event/perfetto_proto_appender.h"
|
||||
#include "base/trace_event/trace_event.h"
|
||||
#include "build/build_config.h"
|
||||
#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);
|
||||
}
|
||||
|
||||
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(
|
||||
base::trace_event::ConvertableToTraceFormat* value,
|
||||
perfetto::protos::pbzero::DebugAnnotation* annotation) {
|
||||
|
@ -28,22 +28,6 @@ using TraceEvent = base::trace_event::TraceEvent;
|
||||
|
||||
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 {
|
||||
|
||||
constexpr size_t kDefaultSliceSize = 128;
|
||||
|
@ -6,36 +6,9 @@
|
||||
#define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACED_VALUE_PROTO_WRITER_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 {
|
||||
|
||||
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();
|
||||
|
||||
} // namespace tracing
|
||||
|
@ -13,6 +13,8 @@
|
||||
#include <string>
|
||||
|
||||
#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 "testing/gtest/include/gtest/gtest.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) {
|
||||
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));
|
||||
|
||||
DebugAnnotation full_proto;
|
||||
|
Reference in New Issue
Block a user