// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_METRICS_CALL_STACKS_CHILD_CALL_STACK_PROFILE_COLLECTOR_H_ #define COMPONENTS_METRICS_CALL_STACKS_CHILD_CALL_STACK_PROFILE_COLLECTOR_H_ #include <string> #include <vector> #include "base/memory/ref_counted.h" #include "base/synchronization/lock.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" #include "components/metrics/public/mojom/call_stack_profile_collector.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" namespace service_manager { class InterfaceProvider; } namespace metrics { class SampledProfile; // ChildCallStackProfileCollector collects stacks at startup, caching them // internally until a CallStackProfileCollector interface is available. If a // CallStackProfileCollector is provided via the InterfaceProvider supplied to // SetParentProfileCollector, the cached stacks are sent via that interface. All // future stacks received via callbacks supplied by GetProfilerCallback are sent // via that interface as well. // // If no CallStackProfileCollector is provided via InterfaceProvider, any cached // stacks and all future stacks received via callbacks supplied by // GetProfilerCallback are flushed. In typical usage this should not happen // because the browser is expected to always supply a CallStackProfileCollector. // // This class is only necessary if a CallStackProfileCollector is not available // at the time the profiler is created. Otherwise the CallStackProfileCollector // can be used directly. // // CallStackProfileBuilder owns and manages a ChildCallStackProfileCollector. It // invokes Collect() in CallStackProfileBuilder::OnProfileCompleted() to collect // a profile. // // When the mojo InterfaceProvider becomes available, provide it via // SetParentProfileCollector(). class ChildCallStackProfileCollector { … }; } // namespace metrics #endif // COMPONENTS_METRICS_CALL_STACKS_CHILD_CALL_STACK_PROFILE_COLLECTOR_H_