1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "components/metrics/motherboard_metrics_provider.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <memory> 8*6777b538SAndroid Build Coastguard Worker #include <utility> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/task/thread_pool.h" 12*6777b538SAndroid Build Coastguard Worker #include "components/metrics/motherboard.h" 13*6777b538SAndroid Build Coastguard Worker #include "third_party/metrics_proto/system_profile.pb.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace metrics { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace { 18*6777b538SAndroid Build Coastguard Worker // Constructs the Motherboard data on the blocking pool. GetMotherboard()19*6777b538SAndroid Build Coastguard Workerstd::unique_ptr<Motherboard> GetMotherboard() { 20*6777b538SAndroid Build Coastguard Worker return std::make_unique<Motherboard>(); 21*6777b538SAndroid Build Coastguard Worker } 22*6777b538SAndroid Build Coastguard Worker } // namespace 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker MotherboardMetricsProvider::MotherboardMetricsProvider() = default; 25*6777b538SAndroid Build Coastguard Worker MotherboardMetricsProvider::~MotherboardMetricsProvider() = default; 26*6777b538SAndroid Build Coastguard Worker ProvideSystemProfileMetrics(SystemProfileProto * system_profile)27*6777b538SAndroid Build Coastguard Workervoid MotherboardMetricsProvider::ProvideSystemProfileMetrics( 28*6777b538SAndroid Build Coastguard Worker SystemProfileProto* system_profile) { 29*6777b538SAndroid Build Coastguard Worker // If motherboard_info_ has not yet been initialized, skip metrics. 30*6777b538SAndroid Build Coastguard Worker if (!motherboard_info_) { 31*6777b538SAndroid Build Coastguard Worker return; 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker SystemProfileProto::Hardware::Motherboard* motherboard = 34*6777b538SAndroid Build Coastguard Worker system_profile->mutable_hardware()->mutable_motherboard(); 35*6777b538SAndroid Build Coastguard Worker if (motherboard_info_->manufacturer().has_value()) { 36*6777b538SAndroid Build Coastguard Worker motherboard->set_manufacturer(*motherboard_info_->manufacturer()); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker if (motherboard_info_->model().has_value()) { 39*6777b538SAndroid Build Coastguard Worker motherboard->set_model(*motherboard_info_->model()); 40*6777b538SAndroid Build Coastguard Worker } 41*6777b538SAndroid Build Coastguard Worker if (motherboard_info_->bios_manufacturer().has_value()) { 42*6777b538SAndroid Build Coastguard Worker motherboard->set_bios_manufacturer(*motherboard_info_->bios_manufacturer()); 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker if (motherboard_info_->bios_version().has_value()) { 45*6777b538SAndroid Build Coastguard Worker motherboard->set_bios_version(*motherboard_info_->bios_version()); 46*6777b538SAndroid Build Coastguard Worker } 47*6777b538SAndroid Build Coastguard Worker if (motherboard_info_->bios_type().has_value()) { 48*6777b538SAndroid Build Coastguard Worker if (*motherboard_info_->bios_type() == Motherboard::BiosType::kLegacy) { 49*6777b538SAndroid Build Coastguard Worker motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_LEGACY); 50*6777b538SAndroid Build Coastguard Worker } else if (*motherboard_info_->bios_type() == 51*6777b538SAndroid Build Coastguard Worker Motherboard::BiosType::kUefi) { 52*6777b538SAndroid Build Coastguard Worker motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_UEFI); 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker } else { 55*6777b538SAndroid Build Coastguard Worker motherboard->set_bios_type(SystemProfileProto::Hardware::BIOS_TYPE_UNKNOWN); 56*6777b538SAndroid Build Coastguard Worker } 57*6777b538SAndroid Build Coastguard Worker } 58*6777b538SAndroid Build Coastguard Worker AsyncInit(base::OnceClosure done_callback)59*6777b538SAndroid Build Coastguard Workervoid MotherboardMetricsProvider::AsyncInit(base::OnceClosure done_callback) { 60*6777b538SAndroid Build Coastguard Worker base::ThreadPool::PostTaskAndReplyWithResult( 61*6777b538SAndroid Build Coastguard Worker FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, 62*6777b538SAndroid Build Coastguard Worker base::BindOnce(&GetMotherboard), 63*6777b538SAndroid Build Coastguard Worker base::BindOnce(&MotherboardMetricsProvider::InitializeMotherboard, 64*6777b538SAndroid Build Coastguard Worker weak_ptr_factory_.GetWeakPtr(), std::move(done_callback))); 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker InitializeMotherboard(base::OnceClosure done_callback,std::unique_ptr<Motherboard> motherboard_info)67*6777b538SAndroid Build Coastguard Workervoid MotherboardMetricsProvider::InitializeMotherboard( 68*6777b538SAndroid Build Coastguard Worker base::OnceClosure done_callback, 69*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Motherboard> motherboard_info) { 70*6777b538SAndroid Build Coastguard Worker motherboard_info_ = std::move(motherboard_info); 71*6777b538SAndroid Build Coastguard Worker std::move(done_callback).Run(); 72*6777b538SAndroid Build Coastguard Worker } 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker } // namespace metrics 75