// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/metrics/motherboard_metrics_provider.h" #include #include #include "base/functional/callback.h" #include "base/task/thread_pool.h" #include "components/metrics/motherboard.h" #include "third_party/metrics_proto/system_profile.pb.h" namespace metrics { namespace { // Constructs the Motherboard data on the blocking pool. std::unique_ptr GetMotherboard() { return std::make_unique(); } } // namespace MotherboardMetricsProvider::MotherboardMetricsProvider() = default; MotherboardMetricsProvider::~MotherboardMetricsProvider() = default; void MotherboardMetricsProvider::ProvideSystemProfileMetrics( SystemProfileProto* system_profile) { // If motherboard_info_ has not yet been initialized, skip metrics. if (!motherboard_info_) { return; } SystemProfileProto::Hardware::Motherboard* motherboard = system_profile->mutable_hardware()->mutable_motherboard(); if (motherboard_info_->manufacturer().has_value()) { motherboard->set_manufacturer(*motherboard_info_->manufacturer()); } if (motherboard_info_->model().has_value()) { motherboard->set_model(*motherboard_info_->model()); } if (motherboard_info_->bios_manufacturer().has_value()) { motherboard->set_bios_manufacturer(*motherboard_info_->bios_manufacturer()); } if (motherboard_info_->bios_version().has_value()) { motherboard->set_bios_version(*motherboard_info_->bios_version()); } if (motherboard_info_->bios_type().has_value()) { if (*motherboard_info_->bios_type() == Motherboard::BiosType::kLegacy) { motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_LEGACY); } else if (*motherboard_info_->bios_type() == Motherboard::BiosType::kUefi) { motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_UEFI); } } else { motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_UNKNOWN); } } void MotherboardMetricsProvider::AsyncInit(base::OnceClosure done_callback) { base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, base::BindOnce(&GetMotherboard), base::BindOnce(&MotherboardMetricsProvider::InitializeMotherboard, weak_ptr_factory_.GetWeakPtr(), std::move(done_callback))); } void MotherboardMetricsProvider::InitializeMotherboard( base::OnceClosure done_callback, std::unique_ptr motherboard_info) { motherboard_info_ = std::move(motherboard_info); std::move(done_callback).Run(); } } // namespace metrics