910e62b5创建于 1月15日历史提交
// 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.

#include "chrome/common/profiler/chrome_thread_profiler_client.h"

#include "base/command_line.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/work_id_provider.h"
#include "base/process/process.h"
#include "base/profiler/sample_metadata.h"
#include "base/task/single_thread_task_runner.h"
#include "chrome/common/profiler/core_unwinders.h"
#include "chrome/common/profiler/process_type.h"
#include "chrome/common/profiler/thread_profiler_configuration.h"
#include "components/metrics/call_stacks/call_stack_profile_builder.h"
#include "components/sampling_profiler/process_type.h"
#include "content/public/common/content_switches.h"

base::StackSamplingProfiler::SamplingParams
ChromeThreadProfilerClient::GetSamplingParams() {
  return ThreadProfilerConfiguration::Get()->GetSamplingParams();
}

std::unique_ptr<base::ProfileBuilder>
ChromeThreadProfilerClient::CreateProfileBuilder(
    sampling_profiler::CallStackProfileParams profile_params,
    metrics::WorkIdRecorder* work_id_recorder,
    base::OnceClosure builder_completed_callback) {
  return std::make_unique<metrics::CallStackProfileBuilder>(
      profile_params, work_id_recorder, std::move(builder_completed_callback));
}

base::StackSamplingProfiler::UnwindersFactory
ChromeThreadProfilerClient::GetUnwindersFactory() {
  return CreateCoreUnwindersFactory();
}

bool ChromeThreadProfilerClient::IsProfilerEnabledForCurrentProcessAndThread(
    sampling_profiler::ProfilerThreadType thread) {
  return ThreadProfilerConfiguration::Get()
      ->IsProfilerEnabledForCurrentProcessAndThread(thread);
}

sampling_profiler::ProfilerProcessType
ChromeThreadProfilerClient::GetProcessType(
    const base::CommandLine& command_line) {
  return GetProfilerProcessType(command_line);
}

bool ChromeThreadProfilerClient::IsSingleProcess(
    const base::CommandLine& command_line) {
  return command_line.HasSwitch(switches::kSingleProcess) ||
         command_line.HasSwitch(switches::kInProcessGPU);
}