login: pass scheduler-boost-urgent to chrome
Pass /scheduler-tool/boost-urgent from chromeos config to chrome
for platforms with boost-urgent config specified.
BUG=chromium:1041117
TEST=on trogdor, `cat /proc/${all urgent threads}/cmdline`
TEST=cros_run_unit_tests --board=trogdor --packages chromeos-login
Change-Id: I9103f2a2f40527de5a9832827888f4d6df12be94
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2513963
Reviewed-by: Ikjoon Jang <ikjn@chromium.org>
Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: Joel Fernandes <joelaf@google.com>
Tested-by: Ikjoon Jang <ikjn@chromium.org>
Commit-Queue: Ikjoon Jang <ikjn@chromium.org>
diff --git a/login_manager/chrome_setup.cc b/login_manager/chrome_setup.cc
index 87f5c46..34703c9 100644
--- a/login_manager/chrome_setup.cc
+++ b/login_manager/chrome_setup.cc
@@ -87,6 +87,9 @@
constexpr char kEnableCrashpadFlag[] = "--enable-crashpad";
constexpr char kEnableBreakpadFlag[] = "--no-enable-crashpad";
+const char kSchedulerTunePath[] = "/scheduler-tune";
+const char kBoostUrgentProperty[] = "boost-urgent";
+
// These hashes are only being used temporarily till we can determine if a
// device is a Chromebox for Meetings or not from the Install Time attributes.
// TODO(rkc, pbos): Remove these and related code once crbug.com/706523 is
@@ -420,7 +423,8 @@
}
// Adds system-related flags to the command line.
-void AddSystemFlags(ChromiumCommandBuilder* builder) {
+void AddSystemFlags(ChromiumCommandBuilder* builder,
+ brillo::CrosConfigInterface* cros_config) {
const base::FilePath data_dir = GetDataDir(builder);
// We need to delete these files as Chrome may have left them around from its
@@ -463,6 +467,8 @@
builder->AddArg("--ondevice_handwriting=use_rootfs");
else if (builder->UseFlagIsSet("ondevice_handwriting_dlc"))
builder->AddArg("--ondevice_handwriting=use_dlc");
+
+ SetUpSchedulerFlags(builder, cros_config);
}
// Adds UI-related flags to the command line.
@@ -601,6 +607,21 @@
} // namespace
+void SetUpSchedulerFlags(ChromiumCommandBuilder* builder,
+ brillo::CrosConfigInterface* cros_config) {
+ // A platform can override default scheduler boosting value.
+ std::string boost_urgent_str;
+ int boost_urgent;
+
+ if (cros_config &&
+ cros_config->GetString(kSchedulerTunePath, kBoostUrgentProperty,
+ &boost_urgent_str) &&
+ base::StringToInt(boost_urgent_str, &boost_urgent)) {
+ builder->AddArg(
+ base::StringPrintf("--scheduler-boost-urgent=%d", boost_urgent));
+ }
+}
+
void AddSerializedAshFlags(ChromiumCommandBuilder* builder,
brillo::CrosConfigInterface* cros_config) {
using std::string_literals::operator""s;
@@ -855,7 +876,7 @@
// ChromiumCommandBuilder class instead.
CreateDirectories(&builder);
AddSerializedAshFlags(&builder, cros_config);
- AddSystemFlags(&builder);
+ AddSystemFlags(&builder, cros_config);
AddUiFlags(&builder, cros_config);
AddArcFlags(&builder, &disallowed_prefixes, cros_config);
AddCrostiniFlags(&builder);
diff --git a/login_manager/chrome_setup.h b/login_manager/chrome_setup.h
index ce5c2ca..5141db5 100644
--- a/login_manager/chrome_setup.h
+++ b/login_manager/chrome_setup.h
@@ -74,6 +74,12 @@
// Property for radius polynomial in NNPalm for Ozone.
extern const char kOzoneNNPalmRadiusProperty[];
+// Path to scheduler tune.
+extern const char kSchedulerTunePath[];
+
+// Property for urgent tasks boosting value.
+extern const char kBoostUrgentProperty[];
+
// Initializes a ChromiumCommandBuilder and performs additional Chrome-specific
// setup. Returns environment variables that the caller should export for Chrome
// and arguments that it should pass to the Chrome binary, along with the UID
@@ -92,6 +98,10 @@
std::vector<std::string>* args_out,
uid_t* uid_out);
+// Add flags to override default scheduler tunings
+void SetUpSchedulerFlags(chromeos::ui::ChromiumCommandBuilder* builder,
+ brillo::CrosConfigInterface* cros_config);
+
// Add flags pertinent to the Ash window manager generated at
// build-time by cros_config_schema. These are stored in
// /ui:serialized-ash-flags, an implicitly generated element.
diff --git a/login_manager/chrome_setup_test.cc b/login_manager/chrome_setup_test.cc
index 5fcc344..6408af1 100644
--- a/login_manager/chrome_setup_test.cc
+++ b/login_manager/chrome_setup_test.cc
@@ -274,6 +274,20 @@
ASSERT_EQ(login_manager::kAllowAmbientEQFeature, GetFlag(argv, kFeatureFlag));
}
+TEST_F(ChromeSetupTest, TestSchedulerFlags) {
+ constexpr char kBoostUrgentVal[] = "99";
+
+ login_manager::SetUpSchedulerFlags(&builder_, &cros_config_);
+ std::vector<std::string> argv = builder_.arguments();
+ ASSERT_EQ(0, argv.size());
+
+ cros_config_.SetString(login_manager::kSchedulerTunePath,
+ login_manager::kBoostUrgentProperty, kBoostUrgentVal);
+ login_manager::SetUpSchedulerFlags(&builder_, &cros_config_);
+ argv = builder_.arguments();
+ EXPECT_EQ(kBoostUrgentVal, GetFlag(argv, "--scheduler-boost-urgent"));
+}
+
void InitWithUseFlag(base::Optional<std::string> flag,
base::ScopedTempDir* temp_dir,
ChromiumCommandBuilder* builder) {