• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2024 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/trace_event/named_trigger.h"
6 
7 #include "base/check.h"
8 #include "base/hash/hash.h"
9 #include "base/strings/strcat.h"
10 
11 namespace base::trace_event {
12 
13 // |g_named_trigger_manager| is intentionally leaked on shutdown.
14 NamedTriggerManager* g_named_trigger_manager = nullptr;
15 
EmitNamedTrigger(const std::string & trigger_name,std::optional<int32_t> value)16 bool EmitNamedTrigger(const std::string& trigger_name,
17                       std::optional<int32_t> value) {
18   if (g_named_trigger_manager) {
19     return g_named_trigger_manager->DoEmitNamedTrigger(trigger_name, value);
20   }
21   return false;
22 }
23 
SetInstance(NamedTriggerManager * manager)24 void NamedTriggerManager::SetInstance(NamedTriggerManager* manager) {
25   DCHECK(g_named_trigger_manager == nullptr || manager == nullptr);
26   g_named_trigger_manager = manager;
27 }
28 
TriggerFlowId(const std::string_view & name,std::optional<int32_t> value)29 uint64_t TriggerFlowId(const std::string_view& name,
30                        std::optional<int32_t> value) {
31   size_t name_hash = base::FastHash(name);
32   return base::HashInts(name_hash, static_cast<uint32_t>(value.value_or(0)));
33 }
34 
TriggerFlow(const std::string_view & name,std::optional<int32_t> value)35 perfetto::Flow TriggerFlow(const std::string_view& name,
36                            std::optional<int32_t> value) {
37   return perfetto::Flow::Global(TriggerFlowId(name, value));
38 }
39 
40 }  // namespace base::trace_event
41