Commit ae6c3d56 authored by Yury Khmel's avatar Yury Khmel Committed by Chromium LUCI CQ

arc: Apply dalvik memory profiles for high-end devices (container).

This sends request to ARC Android to set dalvik memory params based on
device's memory config.

BUG=b:160760318
TEST=unit test added
     Locally on device, early tests show improvements in app loading and
     ARC boot time up to 5%. This feature is currently optional and is
     behind Chrome feature. Next data will be collected on real user
     using finch experiment and in-lab tests by adding separate testing
     variation for few reference boards that activates this feature.

Change-Id: Iacb1a8c6ce874fe74152204a2e41a35bb2fa9da8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2570552Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Commit-Queue: Yury Khmel <khmel@google.com>
Cr-Commit-Position: refs/heads/master@{#833154}
parent 95dd5bf4
......@@ -66,6 +66,26 @@ ToLoginManagerPlayStoreAutoUpdate(StartParams::PlayStoreAutoUpdate update) {
}
}
// Converts DalvikMemoryProfile into login_manager's.
login_manager::StartArcMiniContainerRequest_DalvikMemoryProfile
ToLoginManagerDalvikMemoryProfile(
StartParams::DalvikMemoryProfile dalvik_memory_profile) {
switch (dalvik_memory_profile) {
case StartParams::DalvikMemoryProfile::DEFAULT:
return login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_DEFAULT;
case StartParams::DalvikMemoryProfile::M4G:
return login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_4G;
case StartParams::DalvikMemoryProfile::M8G:
return login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_8G;
case StartParams::DalvikMemoryProfile::M16G:
return login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_16G;
}
}
} // namespace
class ArcContainerClientAdapter
......@@ -91,11 +111,11 @@ class ArcContainerClientAdapter
request.set_arc_file_picker_experiment(params.arc_file_picker_experiment);
request.set_play_store_auto_update(
ToLoginManagerPlayStoreAutoUpdate(params.play_store_auto_update));
request.set_dalvik_memory_profile(
ToLoginManagerDalvikMemoryProfile(params.dalvik_memory_profile));
request.set_arc_custom_tabs_experiment(params.arc_custom_tabs_experiment);
request.set_disable_system_default_app(
params.arc_disable_system_default_app);
// TODO(b/160760318): Add Dalvik memory profile once arc.proto is ready.
chromeos::SessionManagerClient::Get()->StartArcMiniContainer(
request, std::move(callback));
}
......
......@@ -7,10 +7,13 @@
#include "base/callback_helpers.h"
#include "chromeos/dbus/session_manager/fake_session_manager_client.h"
#include "components/arc/session/arc_container_client_adapter.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace arc {
namespace {
class ArcContainerClientAdapterTest : public testing::Test {
public:
ArcContainerClientAdapterTest() = default;
......@@ -22,6 +25,7 @@ class ArcContainerClientAdapterTest : public testing::Test {
void SetUp() override {
chromeos::SessionManagerClient::InitializeFake();
client_adapter_ = CreateArcContainerClientAdapter();
chromeos::FakeSessionManagerClient::Get()->set_arc_available(true);
}
void TearDown() override {
......@@ -34,6 +38,7 @@ class ArcContainerClientAdapterTest : public testing::Test {
private:
std::unique_ptr<ArcClientAdapter> client_adapter_;
content::BrowserTaskEnvironment browser_task_environment_;
};
// b/164816080 This test ensures that a new container instance that is
......@@ -86,4 +91,51 @@ TEST_F(ArcContainerClientAdapterTest,
EXPECT_FALSE(child_observer.stopped_called());
}
struct DalvikMemoryProfileTestParam {
// Requested profile.
StartParams::DalvikMemoryProfile profile;
// Expected value passed to DBus.
login_manager::StartArcMiniContainerRequest_DalvikMemoryProfile expectation;
};
constexpr DalvikMemoryProfileTestParam kDalvikMemoryProfileTestCases[] = {
{StartParams::DalvikMemoryProfile::DEFAULT,
login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_DEFAULT},
{StartParams::DalvikMemoryProfile::M4G,
login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_4G},
{StartParams::DalvikMemoryProfile::M8G,
login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_8G},
{StartParams::DalvikMemoryProfile::M16G,
login_manager::
StartArcMiniContainerRequest_DalvikMemoryProfile_MEMORY_PROFILE_16G}};
class ArcContainerClientAdapterDalvikMemoryProfileTest
: public ArcContainerClientAdapterTest,
public testing::WithParamInterface<DalvikMemoryProfileTestParam> {};
INSTANTIATE_TEST_SUITE_P(All,
ArcContainerClientAdapterDalvikMemoryProfileTest,
::testing::ValuesIn(kDalvikMemoryProfileTestCases));
void OnMiniInstanceStarted(bool result) {
DCHECK(result);
}
TEST_P(ArcContainerClientAdapterDalvikMemoryProfileTest, Profile) {
const auto& test_param = GetParam();
StartParams start_params;
start_params.dalvik_memory_profile = test_param.profile;
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_dalvik_memory_profile());
EXPECT_EQ(test_param.expectation, request.dalvik_memory_profile());
}
} // namespace
} // namespace arc
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