xref: /aosp_15_r20/external/cronet/components/metrics/motherboard_metrics_provider.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker std::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 Worker void 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 Worker void 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 Worker void 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