Commit 31c67645 authored by Yusuke Sato's avatar Yusuke Sato Committed by Commit Bot

arc: Remove GetReleaseChannel() from the VM adapter

Instead, use ArcSessionImpl's delegate.

BUG=b:142144019
TEST=ran the unit tests

Change-Id: I982d34ba82e93a31ea1e158a5d170e86eaf27a05
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1864326Reviewed-by: default avatarHidehiko Abe <hidehiko@chromium.org>
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707416}
parent 501af0e3
...@@ -22,8 +22,9 @@ void ArcClientAdapter::RemoveObserver(Observer* observer) { ...@@ -22,8 +22,9 @@ void ArcClientAdapter::RemoveObserver(Observer* observer) {
} }
// static // static
std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create() { std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create(
return IsArcVmEnabled() ? CreateArcVmClientAdapter() version_info::Channel channel) {
return IsArcVmEnabled() ? CreateArcVmClientAdapter(channel)
: CreateArcContainerClientAdapter(); : CreateArcContainerClientAdapter();
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chromeos/dbus/dbus_method_call_status.h" #include "chromeos/dbus/dbus_method_call_status.h"
#include "components/arc/session/arc_start_params.h" #include "components/arc/session/arc_start_params.h"
#include "components/arc/session/arc_upgrade_params.h" #include "components/arc/session/arc_upgrade_params.h"
#include "components/version_info/channel.h"
namespace arc { namespace arc {
...@@ -26,7 +27,8 @@ class ArcClientAdapter { ...@@ -26,7 +27,8 @@ class ArcClientAdapter {
}; };
// Creates a default instance of ArcClientAdapter. // Creates a default instance of ArcClientAdapter.
static std::unique_ptr<ArcClientAdapter> Create(); static std::unique_ptr<ArcClientAdapter> Create(
version_info::Channel channel);
virtual ~ArcClientAdapter(); virtual ~ArcClientAdapter();
// StartMiniArc starts ARC with only a handful of ARC processes for Chrome OS // StartMiniArc starts ARC with only a handful of ARC processes for Chrome OS
......
...@@ -316,7 +316,7 @@ ArcSessionImpl::ArcSessionImpl(std::unique_ptr<Delegate> delegate, ...@@ -316,7 +316,7 @@ ArcSessionImpl::ArcSessionImpl(std::unique_ptr<Delegate> delegate,
chromeos::SchedulerConfigurationManagerBase* chromeos::SchedulerConfigurationManagerBase*
scheduler_configuration_manager) scheduler_configuration_manager)
: delegate_(std::move(delegate)), : delegate_(std::move(delegate)),
client_(ArcClientAdapter::Create()), client_(ArcClientAdapter::Create(delegate_->GetChannel())),
scheduler_configuration_manager_(scheduler_configuration_manager) { scheduler_configuration_manager_(scheduler_configuration_manager) {
DCHECK(client_); DCHECK(client_);
client_->AddObserver(this); client_->AddObserver(this);
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "components/arc/arc_features.h" #include "components/arc/arc_features.h"
#include "components/arc/arc_util.h" #include "components/arc/arc_util.h"
#include "components/arc/session/arc_session.h" #include "components/arc/session/arc_session.h"
#include "components/version_info/version_info.h"
namespace arc { namespace arc {
namespace { namespace {
...@@ -179,34 +180,6 @@ vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest( ...@@ -179,34 +180,6 @@ vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest(
return request; return request;
} }
// TODO(yusukes): ArcSessionImpl already has this info through the delegate.
// Use it and remove this function.
std::string GetReleaseChannel() {
constexpr const char kUnknown[] = "unknown";
const std::set<std::string> channels = {"beta", "canary", "dev",
"dogfood", "stable", "testimage"};
std::string value;
if (!base::SysInfo::GetLsbReleaseValue("CHROMEOS_RELEASE_TRACK", &value)) {
LOG(ERROR) << "Could not load lsb-release";
return kUnknown;
}
auto pieces = base::SplitString(value, "-", base::KEEP_WHITESPACE,
base::SPLIT_WANT_ALL);
if (pieces.size() != 2 || pieces[1] != "channel") {
LOG(ERROR) << "Misformatted CHROMEOS_RELEASE_TRACK value in lsb-release";
return kUnknown;
}
if (channels.find(pieces[0]) == channels.end()) {
LOG(WARNING) << "Unknown ChromeOS channel: \"" << pieces[0] << "\"";
return kUnknown;
}
return pieces[0];
}
std::string MonotonicTimestamp() { std::string MonotonicTimestamp() {
struct timespec ts; struct timespec ts;
const int ret = clock_gettime(CLOCK_BOOTTIME, &ts); const int ret = clock_gettime(CLOCK_BOOTTIME, &ts);
...@@ -220,7 +193,8 @@ std::vector<std::string> GenerateKernelCmdline( ...@@ -220,7 +193,8 @@ std::vector<std::string> GenerateKernelCmdline(
const StartParams& start_params, const StartParams& start_params,
const FileSystemStatus& file_system_status, const FileSystemStatus& file_system_status,
bool is_dev_mode, bool is_dev_mode,
bool is_host_on_vm) { bool is_host_on_vm,
const std::string& channel) {
std::vector<std::string> result = { std::vector<std::string> result = {
"androidboot.hardware=bertha", "androidboot.hardware=bertha",
"androidboot.container=1", "androidboot.container=1",
...@@ -240,7 +214,7 @@ std::vector<std::string> GenerateKernelCmdline( ...@@ -240,7 +214,7 @@ std::vector<std::string> GenerateKernelCmdline(
start_params.arc_custom_tabs_experiment), start_params.arc_custom_tabs_experiment),
base::StringPrintf("androidboot.arc_print_spooler=%d", base::StringPrintf("androidboot.arc_print_spooler=%d",
start_params.arc_print_spooler_experiment), start_params.arc_print_spooler_experiment),
"androidboot.chromeos_channel=" + GetReleaseChannel(), "androidboot.chromeos_channel=" + channel,
"androidboot.boottime_offset=" + MonotonicTimestamp(), "androidboot.boottime_offset=" + MonotonicTimestamp(),
// TODO(yusukes): remove this once arcvm supports SELinux. // TODO(yusukes): remove this once arcvm supports SELinux.
"androidboot.selinux=permissive", "androidboot.selinux=permissive",
...@@ -327,8 +301,9 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -327,8 +301,9 @@ class ArcVmClientAdapter : public ArcClientAdapter,
// Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast. // Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast.
// Try to initialize them in the constructor and in StartMiniArc respectively. // Try to initialize them in the constructor and in StartMiniArc respectively.
// They usually run when the system is not busy. // They usually run when the system is not busy.
ArcVmClientAdapter() explicit ArcVmClientAdapter(version_info::Channel channel)
: is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance() : channel_(channel),
is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
->IsRunningOnVm()) { ->IsRunningOnVm()) {
auto* client = GetConciergeClient(); auto* client = GetConciergeClient();
client->AddVmObserver(this); client->AddVmObserver(this);
...@@ -507,7 +482,8 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -507,7 +482,8 @@ class ArcVmClientAdapter : public ArcClientAdapter,
// TODO(yusukes): Use |params| for generating kernel command line too. // TODO(yusukes): Use |params| for generating kernel command line too.
DCHECK(is_dev_mode_); DCHECK(is_dev_mode_);
std::vector<std::string> kernel_cmdline = GenerateKernelCmdline( std::vector<std::string> kernel_cmdline = GenerateKernelCmdline(
start_params_, file_system_status, *is_dev_mode_, is_host_on_vm_); start_params_, file_system_status, *is_dev_mode_, is_host_on_vm_,
version_info::GetChannelString(channel_));
auto start_request = auto start_request =
CreateStartArcVmRequest(user_id_hash_, cpus, data_disk_path, CreateStartArcVmRequest(user_id_hash_, cpus, data_disk_path,
file_system_status, std::move(kernel_cmdline)); file_system_status, std::move(kernel_cmdline));
...@@ -592,6 +568,8 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -592,6 +568,8 @@ class ArcVmClientAdapter : public ArcClientAdapter,
VLOG(1) << "OnArcVmServerProxyJobStopped result=" << result; VLOG(1) << "OnArcVmServerProxyJobStopped result=" << result;
} }
const version_info::Channel channel_;
base::Optional<bool> is_dev_mode_; base::Optional<bool> is_dev_mode_;
// True when the *host* is running on a VM. // True when the *host* is running on a VM.
const bool is_host_on_vm_; const bool is_host_on_vm_;
...@@ -608,8 +586,9 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -608,8 +586,9 @@ class ArcVmClientAdapter : public ArcClientAdapter,
DISALLOW_COPY_AND_ASSIGN(ArcVmClientAdapter); DISALLOW_COPY_AND_ASSIGN(ArcVmClientAdapter);
}; };
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter() { std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(
return std::make_unique<ArcVmClientAdapter>(); version_info::Channel channel) {
return std::make_unique<ArcVmClientAdapter>(channel);
} }
bool IsAndroidDebuggableForTesting(const base::FilePath& json_path) { bool IsAndroidDebuggableForTesting(const base::FilePath& json_path) {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include "components/arc/session/arc_client_adapter.h" #include "components/arc/session/arc_client_adapter.h"
#include "components/version_info/channel.h"
namespace base { namespace base {
class FilePath; class FilePath;
...@@ -16,7 +17,8 @@ class FilePath; ...@@ -16,7 +17,8 @@ class FilePath;
namespace arc { namespace arc {
// Returns an adapter for arcvm. // Returns an adapter for arcvm.
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(); std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(
version_info::Channel channel);
// Function(s) below are for testing. // Function(s) below are for testing.
bool IsAndroidDebuggableForTesting(const base::FilePath& json_path); bool IsAndroidDebuggableForTesting(const base::FilePath& json_path);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "components/arc/session/arc_vm_client_adapter.h" #include "components/arc/session/arc_vm_client_adapter.h"
#include <memory> #include <memory>
#include <string>
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
...@@ -97,7 +98,7 @@ class ArcVmClientAdapterTest : public testing::Test, ...@@ -97,7 +98,7 @@ class ArcVmClientAdapterTest : public testing::Test,
void SetUp() override { void SetUp() override {
run_loop_ = std::make_unique<base::RunLoop>(); run_loop_ = std::make_unique<base::RunLoop>();
adapter_ = CreateArcVmClientAdapter(); adapter_ = CreateArcVmClientAdapter(version_info::Channel::STABLE);
arc_instance_stopped_called_ = false; arc_instance_stopped_called_ = false;
adapter_->AddObserver(this); adapter_->AddObserver(this);
ASSERT_TRUE(dir_.CreateUniqueTempDir()); ASSERT_TRUE(dir_.CreateUniqueTempDir());
......
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