1 /*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "src/trace_processor/importers/common/args_translation_table.h"
18
19 namespace perfetto {
20 namespace trace_processor {
21
22 constexpr char ArgsTranslationTable::kChromeHistogramHashKey[];
23 constexpr char ArgsTranslationTable::kChromeHistogramNameKey[];
24
25 constexpr char ArgsTranslationTable::kChromeUserEventHashKey[];
26 constexpr char ArgsTranslationTable::kChromeUserEventActionKey[];
27
28 constexpr char ArgsTranslationTable::kChromePerformanceMarkSiteHashKey[];
29 constexpr char ArgsTranslationTable::kChromePerformanceMarkSiteKey[];
30
31 constexpr char ArgsTranslationTable::kChromePerformanceMarkMarkHashKey[];
32 constexpr char ArgsTranslationTable::kChromePerformanceMarkMarkKey[];
33
ArgsTranslationTable(TraceStorage * storage)34 ArgsTranslationTable::ArgsTranslationTable(TraceStorage* storage)
35 : storage_(storage),
36 interned_chrome_histogram_hash_key_(
37 storage->InternString(kChromeHistogramHashKey)),
38 interned_chrome_histogram_name_key_(
39 storage->InternString(kChromeHistogramNameKey)),
40 interned_chrome_user_event_hash_key_(
41 storage->InternString(kChromeUserEventHashKey)),
42 interned_chrome_user_event_action_key_(
43 storage->InternString(kChromeUserEventActionKey)),
44 interned_chrome_performance_mark_site_hash_key_(
45 storage->InternString(kChromePerformanceMarkSiteHashKey)),
46 interned_chrome_performance_mark_site_key_(
47 storage->InternString(kChromePerformanceMarkSiteKey)),
48 interned_chrome_performance_mark_mark_hash_key_(
49 storage->InternString(kChromePerformanceMarkMarkHashKey)),
50 interned_chrome_performance_mark_mark_key_(
51 storage->InternString(kChromePerformanceMarkMarkKey)) {}
52
TranslateUnsignedIntegerArg(const Key & key,uint64_t value,ArgsTracker::BoundInserter & inserter)53 bool ArgsTranslationTable::TranslateUnsignedIntegerArg(
54 const Key& key,
55 uint64_t value,
56 ArgsTracker::BoundInserter& inserter) {
57 if (key.key == kChromeHistogramHashKey) {
58 inserter.AddArg(interned_chrome_histogram_hash_key_,
59 Variadic::UnsignedInteger(value));
60 const base::Optional<base::StringView> translated_value =
61 TranslateChromeHistogramHash(value);
62 if (translated_value) {
63 inserter.AddArg(
64 interned_chrome_histogram_name_key_,
65 Variadic::String(storage_->InternString(*translated_value)));
66 }
67 return true;
68 }
69 if (key.key == kChromeUserEventHashKey) {
70 inserter.AddArg(interned_chrome_user_event_hash_key_,
71 Variadic::UnsignedInteger(value));
72 const base::Optional<base::StringView> translated_value =
73 TranslateChromeUserEventHash(value);
74 if (translated_value) {
75 inserter.AddArg(
76 interned_chrome_user_event_action_key_,
77 Variadic::String(storage_->InternString(*translated_value)));
78 }
79 return true;
80 }
81 if (key.key == kChromePerformanceMarkSiteHashKey) {
82 inserter.AddArg(interned_chrome_performance_mark_site_hash_key_,
83 Variadic::UnsignedInteger(value));
84 const base::Optional<base::StringView> translated_value =
85 TranslateChromePerformanceMarkSiteHash(value);
86 if (translated_value) {
87 inserter.AddArg(
88 interned_chrome_performance_mark_site_key_,
89 Variadic::String(storage_->InternString(*translated_value)));
90 }
91 return true;
92 }
93 if (key.key == kChromePerformanceMarkMarkHashKey) {
94 inserter.AddArg(interned_chrome_performance_mark_mark_hash_key_,
95 Variadic::UnsignedInteger(value));
96 const base::Optional<base::StringView> translated_value =
97 TranslateChromePerformanceMarkMarkHash(value);
98 if (translated_value) {
99 inserter.AddArg(
100 interned_chrome_performance_mark_mark_key_,
101 Variadic::String(storage_->InternString(*translated_value)));
102 }
103 return true;
104 }
105 return false;
106 }
107
108 base::Optional<base::StringView>
TranslateChromeHistogramHash(uint64_t hash) const109 ArgsTranslationTable::TranslateChromeHistogramHash(uint64_t hash) const {
110 auto* value = chrome_histogram_hash_to_name_.Find(hash);
111 if (!value) {
112 return base::nullopt;
113 }
114 return base::StringView(*value);
115 }
116
117 base::Optional<base::StringView>
TranslateChromeUserEventHash(uint64_t hash) const118 ArgsTranslationTable::TranslateChromeUserEventHash(uint64_t hash) const {
119 auto* value = chrome_user_event_hash_to_action_.Find(hash);
120 if (!value) {
121 return base::nullopt;
122 }
123 return base::StringView(*value);
124 }
125
126 base::Optional<base::StringView>
TranslateChromePerformanceMarkSiteHash(uint64_t hash) const127 ArgsTranslationTable::TranslateChromePerformanceMarkSiteHash(
128 uint64_t hash) const {
129 auto* value = chrome_performance_mark_site_hash_to_name_.Find(hash);
130 if (!value) {
131 return base::nullopt;
132 }
133 return base::StringView(*value);
134 }
135
136 base::Optional<base::StringView>
TranslateChromePerformanceMarkMarkHash(uint64_t hash) const137 ArgsTranslationTable::TranslateChromePerformanceMarkMarkHash(
138 uint64_t hash) const {
139 auto* value = chrome_performance_mark_mark_hash_to_name_.Find(hash);
140 if (!value) {
141 return base::nullopt;
142 }
143 return base::StringView(*value);
144 }
145
146 } // namespace trace_processor
147 } // namespace perfetto
148