[tracing] Expose interning helpers.
The source of truth for the interned data is tied to a particular
subclass of TrackEventInternedDataIndex.
Expose the implementations for event name / category / debug annotation
names to allow Chromium to use it.
R=eseckler@google.com,skyostil@google.com
Change-Id: I6fc7bb5d0f6c3f4f0358de8c6aca7509dfbf9449
diff --git a/Android.bp b/Android.bp
index a0839b9..0a3606e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -8469,6 +8469,7 @@
"src/tracing/internal/tracing_muxer_fake.cc",
"src/tracing/internal/tracing_muxer_impl.cc",
"src/tracing/internal/track_event_internal.cc",
+ "src/tracing/internal/track_event_interned_fields.cc",
"src/tracing/platform.cc",
"src/tracing/traced_value.cc",
"src/tracing/tracing.cc",
diff --git a/BUILD b/BUILD
index 55074b2..55dcf56 100644
--- a/BUILD
+++ b/BUILD
@@ -528,6 +528,7 @@
"include/perfetto/tracing/internal/tracing_tls.h",
"include/perfetto/tracing/internal/track_event_data_source.h",
"include/perfetto/tracing/internal/track_event_internal.h",
+ "include/perfetto/tracing/internal/track_event_interned_fields.h",
"include/perfetto/tracing/internal/track_event_macros.h",
"include/perfetto/tracing/internal/write_track_event_args.h",
"include/perfetto/tracing/locked_handle.h",
@@ -1645,6 +1646,7 @@
"src/tracing/internal/tracing_muxer_impl.cc",
"src/tracing/internal/tracing_muxer_impl.h",
"src/tracing/internal/track_event_internal.cc",
+ "src/tracing/internal/track_event_interned_fields.cc",
"src/tracing/platform.cc",
"src/tracing/traced_value.cc",
"src/tracing/tracing.cc",
diff --git a/include/perfetto/tracing/BUILD.gn b/include/perfetto/tracing/BUILD.gn
index a7e9ab3..b7a91d0 100644
--- a/include/perfetto/tracing/BUILD.gn
+++ b/include/perfetto/tracing/BUILD.gn
@@ -46,6 +46,7 @@
"internal/tracing_tls.h",
"internal/track_event_data_source.h",
"internal/track_event_internal.h",
+ "internal/track_event_interned_fields.h",
"internal/track_event_macros.h",
"internal/write_track_event_args.h",
"locked_handle.h",
diff --git a/include/perfetto/tracing/internal/track_event_interned_fields.h b/include/perfetto/tracing/internal/track_event_interned_fields.h
new file mode 100644
index 0000000..cccbf0c
--- /dev/null
+++ b/include/perfetto/tracing/internal/track_event_interned_fields.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "perfetto/tracing/track_event_interned_data_index.h"
+
+#ifndef INCLUDE_PERFETTO_TRACING_INTERNAL_TRACK_EVENT_INTERNED_FIELDS_H_
+#define INCLUDE_PERFETTO_TRACING_INTERNAL_TRACK_EVENT_INTERNED_FIELDS_H_
+
+namespace perfetto {
+namespace internal {
+
+// These helpers are exposed here to allow Chromium-without-client library
+// to share the interning buffers with Perfetto internals (e.g.
+// perfetto::TracedValue implementation).
+
+struct InternedEventCategory
+ : public TrackEventInternedDataIndex<
+ InternedEventCategory,
+ perfetto::protos::pbzero::InternedData::kEventCategoriesFieldNumber,
+ const char*,
+ SmallInternedDataTraits> {
+ ~InternedEventCategory() override;
+
+ static void Add(protos::pbzero::InternedData* interned_data,
+ size_t iid,
+ const char* value,
+ size_t length) {
+ auto category = interned_data->add_event_categories();
+ category->set_iid(iid);
+ category->set_name(value, length);
+ }
+};
+
+struct InternedEventName
+ : public TrackEventInternedDataIndex<
+ InternedEventName,
+ perfetto::protos::pbzero::InternedData::kEventNamesFieldNumber,
+ const char*,
+ SmallInternedDataTraits> {
+ ~InternedEventName() override;
+
+ static void Add(protos::pbzero::InternedData* interned_data,
+ size_t iid,
+ const char* value) {
+ auto name = interned_data->add_event_names();
+ name->set_iid(iid);
+ name->set_name(value);
+ }
+};
+
+struct InternedDebugAnnotationName
+ : public TrackEventInternedDataIndex<
+ InternedDebugAnnotationName,
+ perfetto::protos::pbzero::InternedData::
+ kDebugAnnotationNamesFieldNumber,
+ const char*,
+ SmallInternedDataTraits> {
+ ~InternedDebugAnnotationName() override;
+
+ static void Add(protos::pbzero::InternedData* interned_data,
+ size_t iid,
+ const char* value) {
+ auto name = interned_data->add_debug_annotation_names();
+ name->set_iid(iid);
+ name->set_name(value);
+ }
+};
+
+} // namespace internal
+} // namespace perfetto
+
+#endif // INCLUDE_PERFETTO_TRACING_INTERNAL_TRACK_EVENT_INTERNED_FIELDS_H_
diff --git a/src/tracing/BUILD.gn b/src/tracing/BUILD.gn
index c7074e7..2440d39 100644
--- a/src/tracing/BUILD.gn
+++ b/src/tracing/BUILD.gn
@@ -112,6 +112,7 @@
"internal/tracing_muxer_impl.cc",
"internal/tracing_muxer_impl.h",
"internal/track_event_internal.cc",
+ "internal/track_event_interned_fields.cc",
"platform.cc",
"traced_value.cc",
"tracing.cc",
diff --git a/src/tracing/internal/track_event_internal.cc b/src/tracing/internal/track_event_internal.cc
index 3658229..cffab69 100644
--- a/src/tracing/internal/track_event_internal.cc
+++ b/src/tracing/internal/track_event_internal.cc
@@ -20,6 +20,7 @@
#include "perfetto/base/thread_utils.h"
#include "perfetto/base/time.h"
#include "perfetto/tracing/core/data_source_config.h"
+#include "perfetto/tracing/internal/track_event_interned_fields.h"
#include "perfetto/tracing/track_event.h"
#include "perfetto/tracing/track_event_category_registry.h"
#include "perfetto/tracing/track_event_interned_data_index.h"
@@ -61,53 +62,6 @@
}
}
-struct InternedEventCategory
- : public TrackEventInternedDataIndex<
- InternedEventCategory,
- perfetto::protos::pbzero::InternedData::kEventCategoriesFieldNumber,
- const char*,
- SmallInternedDataTraits> {
- static void Add(protos::pbzero::InternedData* interned_data,
- size_t iid,
- const char* value,
- size_t length) {
- auto category = interned_data->add_event_categories();
- category->set_iid(iid);
- category->set_name(value, length);
- }
-};
-
-struct InternedEventName
- : public TrackEventInternedDataIndex<
- InternedEventName,
- perfetto::protos::pbzero::InternedData::kEventNamesFieldNumber,
- const char*,
- SmallInternedDataTraits> {
- static void Add(protos::pbzero::InternedData* interned_data,
- size_t iid,
- const char* value) {
- auto name = interned_data->add_event_names();
- name->set_iid(iid);
- name->set_name(value);
- }
-};
-
-struct InternedDebugAnnotationName
- : public TrackEventInternedDataIndex<
- InternedDebugAnnotationName,
- perfetto::protos::pbzero::InternedData::
- kDebugAnnotationNamesFieldNumber,
- const char*,
- SmallInternedDataTraits> {
- static void Add(protos::pbzero::InternedData* interned_data,
- size_t iid,
- const char* value) {
- auto name = interned_data->add_debug_annotation_names();
- name->set_iid(iid);
- name->set_name(value);
- }
-};
-
enum class MatchType { kExact, kPattern };
bool NameMatchesPattern(const std::string& pattern,
diff --git a/src/tracing/internal/track_event_interned_fields.cc b/src/tracing/internal/track_event_interned_fields.cc
new file mode 100644
index 0000000..a9c5f0e
--- /dev/null
+++ b/src/tracing/internal/track_event_interned_fields.cc
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "perfetto/tracing/internal/track_event_interned_fields.h"
+
+namespace perfetto {
+namespace internal {
+
+InternedEventCategory::~InternedEventCategory() = default;
+
+InternedEventName::~InternedEventName() = default;
+
+InternedDebugAnnotationName::~InternedDebugAnnotationName() = default;
+
+} // namespace internal
+} // namespace perfetto