Skip to content

Commit 028b13f

Browse files
committed
Create a type to represent --blank_data_image_mb
To allow reuse of the parsing logic for metrics data gathering. Bug: 442024462
1 parent f945969 commit 028b13f

File tree

7 files changed

+144
-62
lines changed

7 files changed

+144
-62
lines changed

base/cvd/cuttlefish/host/commands/assemble_cvd/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ cf_cc_library(
269269
"//cuttlefish/host/commands/assemble_cvd:network_flags",
270270
"//cuttlefish/host/commands/assemble_cvd:touchpad",
271271
"//cuttlefish/host/commands/assemble_cvd/flags:android_efi_loader",
272+
"//cuttlefish/host/commands/assemble_cvd/flags:blank_data_image_mb",
272273
"//cuttlefish/host/commands/assemble_cvd/flags:boot_image",
273274
"//cuttlefish/host/commands/assemble_cvd/flags:bootloader",
274275
"//cuttlefish/host/commands/assemble_cvd/flags:display_proto",

base/cvd/cuttlefish/host/commands/assemble_cvd/assemble_cvd_flags.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,9 @@
3030
DEFINE_vec(cpus, std::to_string(CF_DEFAULTS_CPUS),
3131
"Virtual CPU count.");
3232
DEFINE_vec(data_policy, CF_DEFAULTS_DATA_POLICY,
33-
"How to handle userdata partition."
34-
" Either 'use_existing', 'create_if_missing', 'resize_up_to', or "
35-
"'always_create'.");
36-
DEFINE_vec(blank_data_image_mb,
37-
CF_DEFAULTS_BLANK_DATA_IMAGE_MB,
38-
"The size of the blank data image to generate, MB.");
33+
"How to handle userdata partition."
34+
" Either 'use_existing', 'create_if_missing', 'resize_up_to', or "
35+
"'always_create'.");
3936
DEFINE_vec(gdb_port, std::to_string(CF_DEFAULTS_GDB_PORT),
4037
"Port number to spawn kernel gdb on e.g. -gdb_port=1234. The"
4138
"kernel must have been built with CONFIG_RANDOMIZE_BASE "

base/cvd/cuttlefish/host/commands/assemble_cvd/assemble_cvd_flags.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
DECLARE_vec(cpus);
2424
DECLARE_vec(data_policy);
25-
DECLARE_vec(blank_data_image_mb);
2625
DECLARE_vec(gdb_port);
2726

2827
// TODO(b/192495477): combine these into a single repeatable '--display' flag

base/cvd/cuttlefish/host/commands/assemble_cvd/flags.cc

Lines changed: 5 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "cuttlefish/host/commands/assemble_cvd/disk_image_flags_vectorization.h"
5050
#include "cuttlefish/host/commands/assemble_cvd/display.h"
5151
#include "cuttlefish/host/commands/assemble_cvd/flags/android_efi_loader.h"
52+
#include "cuttlefish/host/commands/assemble_cvd/flags/blank_data_image_mb.h"
5253
#include "cuttlefish/host/commands/assemble_cvd/flags/boot_image.h"
5354
#include "cuttlefish/host/commands/assemble_cvd/flags/bootloader.h"
5455
#include "cuttlefish/host/commands/assemble_cvd/flags/display_proto.h"
@@ -227,56 +228,6 @@ Result<std::vector<int>> GetFlagIntValueForInstances(
227228
return value_vec;
228229
}
229230

230-
Result<std::vector<int>> GetDataImageFlagOrGuestIntValueForInstances(
231-
const std::string& flag_values,
232-
const std::vector<GuestConfig>& guest_configs, int32_t instances_size,
233-
std::map<std::string, std::string>& name_to_default_value) {
234-
std::vector<std::string> flag_vec = android::base::Split(flag_values, ",");
235-
std::vector<int> value_vec(instances_size);
236-
std::string flag_name = "blank_data_image_mb";
237-
bool flag_set =
238-
!gflags::GetCommandLineFlagInfoOrDie(flag_name.c_str()).is_default;
239-
CF_EXPECT(name_to_default_value.find(flag_name) !=
240-
name_to_default_value.end());
241-
std::string default_value = name_to_default_value[flag_name];
242-
bool first_unset = false;
243-
244-
for (int instance_index = 0; instance_index < instances_size;
245-
instance_index++) {
246-
if (flag_set) {
247-
if (instance_index < flag_vec.size()) {
248-
if ((flag_vec[instance_index] == "unset" ||
249-
flag_vec[instance_index] == "\"unset\"") &&
250-
instance_index == 0) {
251-
first_unset = true;
252-
} else {
253-
CF_EXPECT(android::base::ParseInt(default_value,
254-
&value_vec[instance_index]),
255-
"Failed to parse value \"" << default_value << "\" for "
256-
<< flag_name);
257-
continue;
258-
}
259-
} else {
260-
if (!first_unset) {
261-
value_vec[instance_index] = value_vec[0];
262-
continue;
263-
}
264-
}
265-
}
266-
267-
if (guest_configs[instance_index].blank_data_image_mb != 0) {
268-
value_vec[instance_index] =
269-
guest_configs[instance_index].blank_data_image_mb;
270-
} else {
271-
CF_EXPECT(
272-
android::base::ParseInt(default_value, &value_vec[instance_index]),
273-
"Failed to parse value \"" << default_value << "\" for "
274-
<< flag_name);
275-
}
276-
}
277-
return value_vec;
278-
}
279-
280231
Result<std::vector<std::string>> GetFlagStrValueForInstances(
281232
const std::string& flag_values, int32_t instances_size,
282233
const std::string& flag_name, std::map<std::string, std::string>& name_to_default_value) {
@@ -505,10 +456,8 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
505456
std::vector<std::string> vsock_guest_group_vec =
506457
CF_EXPECT(GET_FLAG_STR_VALUE(vsock_guest_group));
507458
std::vector<int> cpus_vec = CF_EXPECT(GET_FLAG_INT_VALUE(cpus));
508-
std::vector<int> blank_data_image_mb_vec =
509-
CF_EXPECT(GetDataImageFlagOrGuestIntValueForInstances(
510-
FLAGS_blank_data_image_mb, guest_configs, instances_size,
511-
name_to_default_value));
459+
BlankDataImageMbFlag blank_data_image_mb_values =
460+
CF_EXPECT(BlankDataImageMbFlag::FromGlobalGflags(guest_configs));
512461
std::vector<int> gdb_port_vec = CF_EXPECT(GET_FLAG_INT_VALUE(gdb_port));
513462
std::vector<std::string> setupwizard_mode_vec =
514463
CF_EXPECT(GET_FLAG_STR_VALUE(setupwizard_mode));
@@ -929,7 +878,8 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
929878
guest_configs[instance_index].android_version_number);
930879
instance.set_console(console_vec[instance_index]);
931880
instance.set_kgdb(console_vec[instance_index] && kgdb_vec[instance_index]);
932-
instance.set_blank_data_image_mb(blank_data_image_mb_vec[instance_index]);
881+
instance.set_blank_data_image_mb(
882+
blank_data_image_mb_values.ForIndex(instance_index));
933883
instance.set_gdb_port(gdb_port_vec[instance_index]);
934884
instance.set_fail_fast(fail_fast_vec[instance_index]);
935885
if (vhost_user_block_vec[instance_index]) {

base/cvd/cuttlefish/host/commands/assemble_cvd/flags/BUILD.bazel

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,19 @@ cf_cc_library(
3333
],
3434
)
3535

36+
cf_cc_library(
37+
name = "blank_data_image_mb",
38+
srcs = ["blank_data_image_mb.cc"],
39+
hdrs = ["blank_data_image_mb.h"],
40+
deps = [
41+
"//cuttlefish/common/libs/utils:result",
42+
"//cuttlefish/host/commands/assemble_cvd:flags_defaults",
43+
"//cuttlefish/host/commands/assemble_cvd:guest_config",
44+
"//libbase",
45+
"@gflags",
46+
],
47+
)
48+
3649
cf_cc_library(
3750
name = "boot_image",
3851
srcs = ["boot_image.cc"],
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Copyright (C) 2025 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#include "cuttlefish/host/commands/assemble_cvd/flags/blank_data_image_mb.h"
18+
19+
#include <cstdlib>
20+
#include <string>
21+
#include <vector>
22+
23+
#include <android-base/parseint.h>
24+
#include <android-base/strings.h>
25+
#include <gflags/gflags.h>
26+
27+
#include "cuttlefish/common/libs/utils/result.h"
28+
#include "cuttlefish/host/commands/assemble_cvd/flags_defaults.h"
29+
#include "cuttlefish/host/commands/assemble_cvd/guest_config.h"
30+
31+
DEFINE_string(blank_data_image_mb, CF_DEFAULTS_BLANK_DATA_IMAGE_MB,
32+
"The size of the blank data image to generate, MB.");
33+
34+
namespace cuttlefish {
35+
36+
Result<BlankDataImageMbFlag> BlankDataImageMbFlag::FromGlobalGflags(
37+
const std::vector<GuestConfig>& guest_configs) {
38+
gflags::CommandLineFlagInfo flag_info =
39+
gflags::GetCommandLineFlagInfoOrDie("blank_data_image_mb");
40+
int default_value;
41+
CF_EXPECTF(android::base::ParseInt(flag_info.default_value, &default_value),
42+
"Failed to parse value as integer: \"{}\"",
43+
flag_info.default_value);
44+
45+
std::vector<std::string> string_values =
46+
android::base::Split(flag_info.current_value, ",");
47+
const std::size_t size = guest_configs.size() > string_values.size()
48+
? guest_configs.size()
49+
: string_values.size();
50+
std::vector<int> values(size);
51+
52+
for (int i = 0; i < size; i++) {
53+
if (i < string_values.size()) {
54+
if (string_values[i] == "unset" || string_values[i] == "\"unset\"") {
55+
values[i] = default_value;
56+
} else {
57+
CF_EXPECTF(android::base::ParseInt(string_values[i], &values[i]),
58+
"Failed to parse value as integer: \"{}\"",
59+
string_values[i]);
60+
}
61+
} else {
62+
values[i] = guest_configs[i].blank_data_image_mb;
63+
}
64+
}
65+
return BlankDataImageMbFlag(default_value, std::move(values));
66+
}
67+
68+
int BlankDataImageMbFlag::ForIndex(std::size_t index) const {
69+
if (index < blank_data_image_mb_values_.size()) {
70+
return blank_data_image_mb_values_[index];
71+
} else {
72+
return default_value_;
73+
}
74+
}
75+
76+
BlankDataImageMbFlag::BlankDataImageMbFlag(
77+
const int default_value, std::vector<int> blank_data_image_mb_values)
78+
: default_value_(default_value),
79+
blank_data_image_mb_values_(blank_data_image_mb_values) {}
80+
81+
} // namespace cuttlefish
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (C) 2025 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#pragma once
18+
19+
#include <cstdlib>
20+
#include <vector>
21+
22+
#include "cuttlefish/common/libs/utils/result.h"
23+
#include "cuttlefish/host/commands/assemble_cvd/guest_config.h"
24+
25+
namespace cuttlefish {
26+
27+
class BlankDataImageMbFlag {
28+
public:
29+
static Result<BlankDataImageMbFlag> FromGlobalGflags(
30+
const std::vector<GuestConfig>& guest_configs);
31+
32+
int ForIndex(std::size_t index) const;
33+
34+
private:
35+
BlankDataImageMbFlag(const int, std::vector<int>);
36+
37+
int default_value_ = 0;
38+
std::vector<int> blank_data_image_mb_values_;
39+
};
40+
41+
} // namespace cuttlefish

0 commit comments

Comments
 (0)