1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// Copyright 2024 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_SAMPLING_PROFILER_THREAD_PROFILER_CLIENT_H_
#define COMPONENTS_SAMPLING_PROFILER_THREAD_PROFILER_CLIENT_H_
#include "base/command_line.h"
#include "base/functional/callback.h"
#include "base/profiler/sampling_profiler_thread_token.h"
#include "base/profiler/stack_sampling_profiler.h"
#include "components/sampling_profiler/call_stack_profile_params.h"
#include "components/sampling_profiler/process_type.h"
namespace metrics {
class WorkIdRecorder;
}
namespace sampling_profiler {
// Interface for a client to participate in thread profiling. The primary use
// for this API is for embedders to provide configuration to control the
// profiling, and consume profiling results.
//
// Functions on this interface are invoked on multiple threads without
// synchronization. Virtual function overrides in subclasses must be
// thread-safe.
class ThreadProfilerClient {
public:
ThreadProfilerClient() = default;
ThreadProfilerClient(const ThreadProfilerClient&) = delete;
ThreadProfilerClient& operator=(const ThreadProfilerClient&) = delete;
virtual ~ThreadProfilerClient() = default;
// Gets the parameters to control the sampling for a new SamplingProfiler
// instance.
virtual base::StackSamplingProfiler::SamplingParams GetSamplingParams() = 0;
// Creates a `base::ProfileBuilder` instance to record profiles for a new
// SamplingProfiler instance.
virtual std::unique_ptr<base::ProfileBuilder> CreateProfileBuilder(
CallStackProfileParams profile_params,
metrics::WorkIdRecorder* work_id_recorder,
base::OnceClosure builder_completed_callback) = 0;
// Gets the factory function for providing unwinders to a new SamplingProfiler
// instance.
virtual base::StackSamplingProfiler::UnwindersFactory
GetUnwindersFactory() = 0;
// Indicates if the embedder has enabled profiling for this specific process
// and thread. The embedder may enable (or disable) profiling based on
// platform, subset of executions, application version, etc.
virtual bool IsProfilerEnabledForCurrentProcessAndThread(
ProfilerThreadType thread) = 0;
// Determines the process type of the current process, primarily based on the
// command line switches.
virtual ProfilerProcessType GetProcessType(
const base::CommandLine& command_line) = 0;
// Determines if the embedder is running in single process mode, primarily
// based on the command line switches.
virtual bool IsSingleProcess(const base::CommandLine& command_line) = 0;
};
} // namespace sampling_profiler
#endif // COMPONENTS_SAMPLING_PROFILER_THREAD_PROFILER_CLIENT_H_
|