• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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