From 97c6f394ca454e27293d72223f0f745899a7f3e4 Mon Sep 17 00:00:00 2001 From: nuwanda Date: Mon, 5 Oct 2020 18:04:08 +0000 Subject: [PATCH] Enable HistogramName interning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change depends on https://android-review.googlesource.com/c/platform/external/perfetto/+/1438933 Bug: 1119834 Change-Id: I55bc44de601479704fd35c2f12ccad2459a61fb5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2431566 Reviewed-by: Sami Kyöstilä Reviewed-by: Mikhail Khokhlov Commit-Queue: Julia Semavina Cr-Commit-Position: refs/heads/master@{#813810} --- .../cpp/perfetto/trace_event_data_source.cc | 22 ++++++++++++++++++- .../trace_event_data_source_unittest.cc | 18 ++++++++++----- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc index cdb82f79bcc92b..c10f7b2bba5a83 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc @@ -49,6 +49,7 @@ #include "third_party/perfetto/include/perfetto/ext/tracing/core/shared_memory_arbiter.h" #include "third_party/perfetto/include/perfetto/ext/tracing/core/trace_writer.h" #include "third_party/perfetto/include/perfetto/tracing/track.h" +#include "third_party/perfetto/include/perfetto/tracing/track_event_interned_data_index.h" #include "third_party/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/trace_packet.pbzero.h" @@ -1041,6 +1042,24 @@ void TraceEventDataSource::FlushCurrentThread() { } } +namespace { + +struct InternedHistogramName + : public perfetto::TrackEventInternedDataIndex< + InternedHistogramName, + perfetto::protos::pbzero::InternedData::kHistogramNamesFieldNumber, + std::string> { + static void Add(perfetto::protos::pbzero::InternedData* interned_data, + size_t iid, + const std::string& histogram_name) { + auto* msg = interned_data->add_histogram_names(); + msg->set_iid(iid); + msg->set_name(histogram_name); + } +}; + +} // namespace + // static void TraceEventDataSource::OnMetricsSampleCallback( const char* histogram_name, @@ -1056,7 +1075,8 @@ void TraceEventDataSource::OnMetricsSampleCallback( new_sample->set_name_hash(name_hash); new_sample->set_sample(sample); if (!privacy_filtering_enabled) { - new_sample->set_name(histogram_name); + size_t iid = InternedHistogramName::Get(&ctx, histogram_name); + new_sample->set_name_iid(iid); } }); } diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc index d7e1f8e62ce429..7ca1c5ab3b5226 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc @@ -1917,9 +1917,11 @@ TEST_F(TraceEventDataSourceTest, HistogramSampleTraceConfigEmpty) { {{1u, TRACE_DISABLED_BY_DEFAULT("histogram_samples")}}); ExpectEventNames(e_packet, {{1u, "HistogramSample"}}); ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); - EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_hash(), - base::HashMetricName("Foo.Bar")); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().sample(), 1u); + ASSERT_TRUE(e_packet->has_interned_data()); + EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_iid(), + e_packet->interned_data().histogram_names()[0].iid()); + EXPECT_EQ(e_packet->interned_data().histogram_names()[0].name(), "Foo.Bar"); } TEST_F(TraceEventDataSourceTest, HistogramSampleTraceConfigNotEmpty) { @@ -1946,9 +1948,11 @@ TEST_F(TraceEventDataSourceTest, HistogramSampleTraceConfigNotEmpty) { ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_hash(), base::HashMetricName("Foo1.Bar1")); - EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name(), - "Foo1.Bar1"); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().sample(), 1u); + ASSERT_TRUE(e_packet->has_interned_data()); + EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_iid(), + e_packet->interned_data().histogram_names()[0].iid()); + EXPECT_EQ(e_packet->interned_data().histogram_names()[0].name(), "Foo1.Bar1"); e_packet = producer_client()->GetFinalizedPacket(packet_index++); @@ -1957,9 +1961,11 @@ TEST_F(TraceEventDataSourceTest, HistogramSampleTraceConfigNotEmpty) { ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_hash(), base::HashMetricName("Foo3.Bar3")); - EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name(), - "Foo3.Bar3"); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().sample(), 1u); + ASSERT_TRUE(e_packet->has_interned_data()); + EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_iid(), + e_packet->interned_data().histogram_names()[0].iid()); + EXPECT_EQ(e_packet->interned_data().histogram_names()[0].name(), "Foo3.Bar3"); EXPECT_EQ(packet_index, producer_client()->GetFinalizedPacketCount()); }