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)16bool 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)24void 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)29uint64_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)35perfetto::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