Commit e09e4509 authored by Alan Ding's avatar Alan Ding Committed by Chromium LUCI CQ

arc: Add kArcDisableMediaStoreMaintenance switch support

Provide chrome switch to disable GMS scheduling of MediaStore periodic
indexing and corpora maintenance tasks.  Used in performance tast to
prevent running service during testing which can cause unstable results
or CPU not idle pre-test failures.

BUG=b:173906243
BUG=b:170071013
BUG=b:172010486
BUG=b:153866893
TEST=Used local build with https://crrev.com/c/2596242 to verify using
'getprop' that boot property is only available if chrome switch is set.

Change-Id: I72704a9814061af172e5f9a892513e0f414d31a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2597193
Commit-Queue: Alan Ding <alanding@chromium.org>
Reviewed-by: default avatarLong Cheng <lgcheng@google.com>
Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarYury Khmel <khmel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842275}
parent 76edfded
...@@ -97,14 +97,20 @@ const char kArcDisableGmsCoreCache[] = "arc-disable-gms-core-cache"; ...@@ -97,14 +97,20 @@ const char kArcDisableGmsCoreCache[] = "arc-disable-gms-core-cache";
// 'en-US,en' as preferred languages. // 'en-US,en' as preferred languages.
const char kArcDisableLocaleSync[] = "arc-disable-locale-sync"; const char kArcDisableLocaleSync[] = "arc-disable-locale-sync";
// Used for development of Android app that are included into ARC++ as system // Used to disable GMS scheduling of media store periodic indexing and corpora
// default apps in order to be able to install them via adb. // maintenance tasks. Used in performance tests to prevent running during
const char kArcDisableSystemDefaultApps[] = "arc-disable-system-default-apps"; // testing which can cause unstable results or CPU not idle pre-test failures.
const char kArcDisableMediaStoreMaintenance[] =
"arc-disable-media-store-maintenance";
// Flag that disables ARC Play Auto Install flow that installs set of predefined // Flag that disables ARC Play Auto Install flow that installs set of predefined
// apps silently. Used in autotests to resolve racy conditions. // apps silently. Used in autotests to resolve racy conditions.
const char kArcDisablePlayAutoInstall[] = "arc-disable-play-auto-install"; const char kArcDisablePlayAutoInstall[] = "arc-disable-play-auto-install";
// Used for development of Android app that are included into ARC as system
// default apps in order to be able to install them via adb.
const char kArcDisableSystemDefaultApps[] = "arc-disable-system-default-apps";
// Flag that forces ARC to cache icons for apps. // Flag that forces ARC to cache icons for apps.
const char kArcForceCacheAppIcons[] = "arc-force-cache-app-icons"; const char kArcForceCacheAppIcons[] = "arc-force-cache-app-icons";
......
...@@ -41,6 +41,8 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) ...@@ -41,6 +41,8 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableGmsCoreCache[]; extern const char kArcDisableGmsCoreCache[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const char kArcDisableLocaleSync[]; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const char kArcDisableLocaleSync[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableMediaStoreMaintenance[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableSystemDefaultApps[]; extern const char kArcDisableSystemDefaultApps[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisablePlayAutoInstall[]; extern const char kArcDisablePlayAutoInstall[];
......
...@@ -116,6 +116,8 @@ class ArcContainerClientAdapter ...@@ -116,6 +116,8 @@ class ArcContainerClientAdapter
request.set_arc_custom_tabs_experiment(params.arc_custom_tabs_experiment); request.set_arc_custom_tabs_experiment(params.arc_custom_tabs_experiment);
request.set_disable_system_default_app( request.set_disable_system_default_app(
params.arc_disable_system_default_app); params.arc_disable_system_default_app);
request.set_disable_media_store_maintenance(
params.disable_media_store_maintenance);
chromeos::SessionManagerClient::Get()->StartArcMiniContainer( chromeos::SessionManagerClient::Get()->StartArcMiniContainer(
request, std::move(callback)); request, std::move(callback));
} }
......
...@@ -41,6 +41,10 @@ class ArcContainerClientAdapterTest : public testing::Test { ...@@ -41,6 +41,10 @@ class ArcContainerClientAdapterTest : public testing::Test {
content::BrowserTaskEnvironment browser_task_environment_; content::BrowserTaskEnvironment browser_task_environment_;
}; };
void OnMiniInstanceStarted(bool result) {
DCHECK(result);
}
// b/164816080 This test ensures that a new container instance that is // b/164816080 This test ensures that a new container instance that is
// created while handling the shutting down of the previous instance, // created while handling the shutting down of the previous instance,
// doesn't incorrectly receive the shutdown event as well. // doesn't incorrectly receive the shutdown event as well.
...@@ -91,6 +95,17 @@ TEST_F(ArcContainerClientAdapterTest, ...@@ -91,6 +95,17 @@ TEST_F(ArcContainerClientAdapterTest,
EXPECT_FALSE(child_observer.stopped_called()); EXPECT_FALSE(child_observer.stopped_called());
} }
TEST_F(ArcContainerClientAdapterTest, StartArc_DisableMediaStoreMaintenance) {
StartParams start_params;
start_params.disable_media_store_maintenance = true;
client_adapter()->StartMiniArc(std::move(start_params),
base::BindOnce(&OnMiniInstanceStarted));
const auto& request = chromeos::FakeSessionManagerClient::Get()
->last_start_arc_mini_container_request();
EXPECT_TRUE(request.has_disable_media_store_maintenance());
EXPECT_TRUE(request.disable_media_store_maintenance());
}
struct DalvikMemoryProfileTestParam { struct DalvikMemoryProfileTestParam {
// Requested profile. // Requested profile.
StartParams::DalvikMemoryProfile profile; StartParams::DalvikMemoryProfile profile;
...@@ -120,9 +135,6 @@ INSTANTIATE_TEST_SUITE_P(All, ...@@ -120,9 +135,6 @@ INSTANTIATE_TEST_SUITE_P(All,
ArcContainerClientAdapterDalvikMemoryProfileTest, ArcContainerClientAdapterDalvikMemoryProfileTest,
::testing::ValuesIn(kDalvikMemoryProfileTestCases)); ::testing::ValuesIn(kDalvikMemoryProfileTestCases));
void OnMiniInstanceStarted(bool result) {
DCHECK(result);
}
TEST_P(ArcContainerClientAdapterDalvikMemoryProfileTest, Profile) { TEST_P(ArcContainerClientAdapterDalvikMemoryProfileTest, Profile) {
const auto& test_param = GetParam(); const auto& test_param = GetParam();
......
...@@ -460,6 +460,14 @@ void ArcSessionImpl::DoStartMiniInstance(size_t num_cores_disabled) { ...@@ -460,6 +460,14 @@ void ArcSessionImpl::DoStartMiniInstance(size_t num_cores_disabled) {
params.arc_disable_system_default_app = params.arc_disable_system_default_app =
base::CommandLine::ForCurrentProcess()->HasSwitch( base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kArcDisableSystemDefaultApps); chromeos::switches::kArcDisableSystemDefaultApps);
if (params.arc_disable_system_default_app)
VLOG(1) << "System default app(s) are disabled";
params.disable_media_store_maintenance =
base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kArcDisableMediaStoreMaintenance);
if (params.disable_media_store_maintenance)
VLOG(1) << "MediaStore maintenance task(s) are disabled";
VLOG(1) << "Starting ARC mini instance with lcd_density=" VLOG(1) << "Starting ARC mini instance with lcd_density="
<< params.lcd_density << params.lcd_density
......
...@@ -56,6 +56,9 @@ struct StartParams { ...@@ -56,6 +56,9 @@ struct StartParams {
// Flag to disable system default apps. // Flag to disable system default apps.
bool arc_disable_system_default_app = false; bool arc_disable_system_default_app = false;
// Flag to disable scheduling of media store periodic maintenance tasks.
bool disable_media_store_maintenance = false;
// The number of logical CPU cores that are currently disabled on the host. // The number of logical CPU cores that are currently disabled on the host.
// This parameter is used only for starting ARCVM. // This parameter is used only for starting ARCVM.
uint32_t num_cores_disabled = 0; uint32_t num_cores_disabled = 0;
......
...@@ -238,6 +238,10 @@ std::vector<std::string> GenerateKernelCmdline( ...@@ -238,6 +238,10 @@ std::vector<std::string> GenerateKernelCmdline(
// TODO(niwa): Check if we need to set ro.boot.enable_adb_sideloading for // TODO(niwa): Check if we need to set ro.boot.enable_adb_sideloading for
// ARCVM. // ARCVM.
// Only add boot property if flag to disable media store maintenance is set.
if (start_params.disable_media_store_maintenance)
result.push_back("androidboot.disable_media_store_maintenance=1");
// Conditionally sets some properties based on |start_params|. // Conditionally sets some properties based on |start_params|.
switch (start_params.play_store_auto_update) { switch (start_params.play_store_auto_update) {
case StartParams::PlayStoreAutoUpdate::AUTO_UPDATE_DEFAULT: case StartParams::PlayStoreAutoUpdate::AUTO_UPDATE_DEFAULT:
......
...@@ -1226,6 +1226,20 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc_DisableSystemDefaultApp) { ...@@ -1226,6 +1226,20 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc_DisableSystemDefaultApp) {
"androidboot.disable_system_default_app=1")); "androidboot.disable_system_default_app=1"));
} }
TEST_F(ArcVmClientAdapterTest, StartUpgradeArc_DisableMediaStoreMaintenance) {
StartParams start_params(GetPopulatedStartParams());
start_params.disable_media_store_maintenance = true;
SetValidUserInfo();
StartMiniArcWithParams(true, std::move(start_params));
UpgradeParams params(GetPopulatedUpgradeParams());
UpgradeArcWithParams(true, std::move(params));
EXPECT_TRUE(GetTestConciergeClient()->start_arc_vm_called());
EXPECT_FALSE(arc_instance_stopped_called());
EXPECT_TRUE(
base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(),
"androidboot.disable_media_store_maintenance=1"));
}
// Tests that StartArcVm() is called with valid parameters. // Tests that StartArcVm() is called with valid parameters.
TEST_F(ArcVmClientAdapterTest, StartMiniArc_StartArcVmParams) { TEST_F(ArcVmClientAdapterTest, StartMiniArc_StartArcVmParams) {
SetValidUserInfo(); SetValidUserInfo();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment