Skip to content

Commit 1781cb9

Browse files
committed
Remove double map fetch in GetFlag*ValueForInstances
Calling `find` first then `operator[]` traverses the map twice. go/totw/202 Bug: b/470453334
1 parent d92f4aa commit 1781cb9

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
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
@@ -306,6 +306,7 @@ cf_cc_library(
306306
"//cuttlefish/host/libs/vhal_proxy_server",
307307
"//cuttlefish/host/libs/vm_manager",
308308
"//libbase",
309+
"@abseil-cpp//absl/strings",
309310
"@fmt",
310311
"@fruit",
311312
"@gflags",

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

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@
2727
#include <unordered_map>
2828
#include <vector>
2929

30-
#include <android-base/file.h>
31-
#include <android-base/logging.h>
32-
#include <android-base/parseint.h>
33-
#include <android-base/strings.h>
34-
#include <fmt/format.h>
35-
#include <fruit/fruit.h>
36-
#include <gflags/gflags.h>
37-
#include <json/json.h>
38-
#include <json/writer.h>
30+
#include "absl/strings/str_split.h"
31+
#include "android-base/file.h"
32+
#include "android-base/logging.h"
33+
#include "android-base/parseint.h"
34+
#include "android-base/strings.h"
35+
#include "fmt/format.h"
36+
#include "fruit/fruit.h"
37+
#include "gflags/gflags.h"
38+
#include "json/json.h"
39+
#include "json/writer.h"
3940

4041
#include "cuttlefish/common/libs/utils/base64.h"
4142
#include "cuttlefish/common/libs/utils/container.h"
@@ -177,20 +178,23 @@ std::map<std::string, std::string> CurrentFlagsToDefaultValue() {
177178
}
178179

179180
Result<std::vector<bool>> GetFlagBoolValueForInstances(
180-
const std::string& flag_values, int32_t instances_size, const std::string& flag_name,
181-
std::map<std::string, std::string>& name_to_default_value) {
182-
std::vector<std::string> flag_vec = android::base::Split(flag_values, ",");
181+
const std::string& flag_values, int32_t instances_size,
182+
const std::string& flag_name,
183+
const std::map<std::string, std::string>& name_to_default_value) {
184+
std::vector<std::string_view> flag_vec = absl::StrSplit(flag_values, ",");
183185
std::vector<bool> value_vec(instances_size);
184186

185-
CF_EXPECT(name_to_default_value.find(flag_name) != name_to_default_value.end());
186-
std::vector<std::string> default_value_vec = android::base::Split(name_to_default_value[flag_name], ",");
187+
auto default_value_it = name_to_default_value.find(flag_name);
188+
CF_EXPECT(default_value_it != name_to_default_value.end());
189+
std::vector<std::string_view> default_value_vec =
190+
absl::StrSplit(default_value_it->second, ",");
187191

188192
for (int instance_index=0; instance_index<instances_size; instance_index++) {
189193
if (instance_index >= flag_vec.size()) {
190194
value_vec[instance_index] = value_vec[0];
191195
} else {
192196
if (flag_vec[instance_index] == "unset" || flag_vec[instance_index] == "\"unset\"") {
193-
std::string default_value = default_value_vec[0];
197+
std::string_view default_value = default_value_vec[0];
194198
if (instance_index < default_value_vec.size()) {
195199
default_value = default_value_vec[instance_index];
196200
}
@@ -204,13 +208,16 @@ Result<std::vector<bool>> GetFlagBoolValueForInstances(
204208
}
205209

206210
Result<std::vector<int>> GetFlagIntValueForInstances(
207-
const std::string& flag_values, int32_t instances_size, const std::string& flag_name,
208-
std::map<std::string, std::string>& name_to_default_value) {
209-
std::vector<std::string> flag_vec = android::base::Split(flag_values, ",");
211+
const std::string& flag_values, int32_t instances_size,
212+
const std::string& flag_name,
213+
const std::map<std::string, std::string>& name_to_default_value) {
214+
std::vector<std::string> flag_vec = absl::StrSplit(flag_values, ",");
210215
std::vector<int> value_vec(instances_size);
211216

212-
CF_EXPECT(name_to_default_value.find(flag_name) != name_to_default_value.end());
213-
std::vector<std::string> default_value_vec = android::base::Split(name_to_default_value[flag_name], ",");
217+
auto default_value_it = name_to_default_value.find(flag_name);
218+
CF_EXPECT(default_value_it != name_to_default_value.end());
219+
std::vector<std::string> default_value_vec =
220+
absl::StrSplit(default_value_it->second, ",");
214221

215222
for (int instance_index=0; instance_index<instances_size; instance_index++) {
216223
if (instance_index >= flag_vec.size()) {
@@ -237,19 +244,22 @@ Result<std::vector<int>> GetFlagIntValueForInstances(
237244

238245
Result<std::vector<std::string>> GetFlagStrValueForInstances(
239246
const std::string& flag_values, int32_t instances_size,
240-
const std::string& flag_name, std::map<std::string, std::string>& name_to_default_value) {
241-
std::vector<std::string> flag_vec = android::base::Split(flag_values, ",");
247+
const std::string& flag_name,
248+
const std::map<std::string, std::string>& name_to_default_value) {
249+
std::vector<std::string_view> flag_vec = absl::StrSplit(flag_values, ",");
242250
std::vector<std::string> value_vec(instances_size);
243251

244-
CF_EXPECT(name_to_default_value.find(flag_name) != name_to_default_value.end());
245-
std::vector<std::string> default_value_vec = android::base::Split(name_to_default_value[flag_name], ",");
252+
auto default_value_it = name_to_default_value.find(flag_name);
253+
CF_EXPECT(default_value_it != name_to_default_value.end());
254+
std::vector<std::string_view> default_value_vec =
255+
absl::StrSplit(default_value_it->second, ",");
246256

247257
for (int instance_index=0; instance_index<instances_size; instance_index++) {
248258
if (instance_index >= flag_vec.size()) {
249259
value_vec[instance_index] = value_vec[0];
250260
} else {
251261
if (flag_vec[instance_index] == "unset" || flag_vec[instance_index] == "\"unset\"") {
252-
std::string default_value = default_value_vec[0];
262+
std::string_view default_value = default_value_vec[0];
253263
if (instance_index < default_value_vec.size()) {
254264
default_value = default_value_vec[instance_index];
255265
}

0 commit comments

Comments
 (0)