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";
// 'en-US,en' as preferred languages.
const char kArcDisableLocaleSync[] = "arc-disable-locale-sync";
// 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";
// Used to disable GMS scheduling of media store periodic indexing and corpora
// maintenance tasks. Used in performance tests to prevent running during
// 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
// apps silently. Used in autotests to resolve racy conditions.
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.
const char kArcForceCacheAppIcons[] = "arc-force-cache-app-icons";
......
......@@ -41,6 +41,8 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableGmsCoreCache[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const char kArcDisableLocaleSync[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableMediaStoreMaintenance[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisableSystemDefaultApps[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kArcDisablePlayAutoInstall[];
......
......@@ -116,6 +116,8 @@ class ArcContainerClientAdapter
request.set_arc_custom_tabs_experiment(params.arc_custom_tabs_experiment);
request.set_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(
request, std::move(callback));
}
......
......@@ -41,6 +41,10 @@ class ArcContainerClientAdapterTest : public testing::Test {
content::BrowserTaskEnvironment browser_task_environment_;
};
void OnMiniInstanceStarted(bool result) {
DCHECK(result);
}
// b/164816080 This test ensures that a new container instance that is
// created while handling the shutting down of the previous instance,
// doesn't incorrectly receive the shutdown event as well.
......@@ -91,6 +95,17 @@ TEST_F(ArcContainerClientAdapterTest,
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 {
// Requested profile.
StartParams::DalvikMemoryProfile profile;
......@@ -120,9 +135,6 @@ INSTANTIATE_TEST_SUITE_P(All,
ArcContainerClientAdapterDalvikMemoryProfileTest,
::testing::ValuesIn(kDalvikMemoryProfileTestCases));
void OnMiniInstanceStarted(bool result) {
DCHECK(result);
}
TEST_P(ArcContainerClientAdapterDalvikMemoryProfileTest, Profile) {
const auto& test_param = GetParam();
......
......@@ -460,6 +460,14 @@ void ArcSessionImpl::DoStartMiniInstance(size_t num_cores_disabled) {
params.arc_disable_system_default_app =
base::CommandLine::ForCurrentProcess()->HasSwitch(
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="
<< params.lcd_density
......
......@@ -56,6 +56,9 @@ struct StartParams {
// Flag to disable system default apps.
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.
// This parameter is used only for starting ARCVM.
uint32_t num_cores_disabled = 0;
......
......@@ -238,6 +238,10 @@ std::vector<std::string> GenerateKernelCmdline(
// TODO(niwa): Check if we need to set ro.boot.enable_adb_sideloading for
// 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|.
switch (start_params.play_store_auto_update) {
case StartParams::PlayStoreAutoUpdate::AUTO_UPDATE_DEFAULT:
......
......@@ -1226,6 +1226,20 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc_DisableSystemDefaultApp) {
"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.
TEST_F(ArcVmClientAdapterTest, StartMiniArc_StartArcVmParams) {
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