Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: components/arc/arc_bridge_service_impl.cc

Issue 1925183004: arc_bridge: Add more logging, plus cleanup (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: Fixed unit tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/arc/arc_bridge_service_impl.h ('k') | components/arc/arc_bridge_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/arc/arc_bridge_service_impl.cc
diff --git a/components/arc/arc_bridge_service_impl.cc b/components/arc/arc_bridge_service_impl.cc
index 2134af5bc64cd7395ebb3db89f24ae80fa49551d..1596b7a19cfff6ed71573e328bf1634113b10af6 100644
--- a/components/arc/arc_bridge_service_impl.cc
+++ b/components/arc/arc_bridge_service_impl.cc
@@ -9,10 +9,12 @@
#include "base/command_line.h"
#include "base/json/json_writer.h"
+#include "base/message_loop/message_loop.h"
#include "base/sequenced_task_runner.h"
#include "base/sys_info.h"
#include "base/task_runner_util.h"
#include "base/thread_task_runner_handle.h"
+#include "base/time/time.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/dbus/dbus_thread_manager.h"
@@ -22,6 +24,10 @@
namespace arc {
+namespace {
+constexpr int64_t kReconnectDelayInSeconds = 5;
+} // namespace
+
ArcBridgeServiceImpl::ArcBridgeServiceImpl(
std::unique_ptr<ArcBridgeBootstrap> bootstrap)
: bootstrap_(std::move(bootstrap)),
@@ -31,31 +37,46 @@ ArcBridgeServiceImpl::ArcBridgeServiceImpl(
bootstrap_->set_delegate(this);
}
-ArcBridgeServiceImpl::~ArcBridgeServiceImpl() {
-}
+ArcBridgeServiceImpl::~ArcBridgeServiceImpl() {}
void ArcBridgeServiceImpl::HandleStartup() {
DCHECK(CalledOnValidThread());
+ if (session_started_)
+ return;
+ VLOG(1) << "Session started";
session_started_ = true;
PrerequisitesChanged();
}
void ArcBridgeServiceImpl::Shutdown() {
DCHECK(CalledOnValidThread());
+ if (!session_started_)
+ return;
+ VLOG(1) << "Session ended";
session_started_ = false;
PrerequisitesChanged();
}
+void ArcBridgeServiceImpl::DisableReconnectDelayForTesting() {
+ use_delay_before_reconnecting_ = false;
+}
+
void ArcBridgeServiceImpl::PrerequisitesChanged() {
DCHECK(CalledOnValidThread());
+ VLOG(1) << "Prerequisites changed. "
+ << "state=" << static_cast<uint32_t>(state())
+ << ", available=" << available()
+ << ", session_started=" << session_started_;
if (state() == State::STOPPED) {
if (!available() || !session_started_)
return;
+ VLOG(0) << "Prerequisites met, starting ARC";
SetState(State::CONNECTING);
bootstrap_->Start();
} else {
if (available() && session_started_)
return;
+ VLOG(0) << "Prerequisites stopped being met, stopping ARC";
StopInstance();
}
}
@@ -67,6 +88,7 @@ void ArcBridgeServiceImpl::StopInstance() {
return;
}
+ VLOG(1) << "Stopping ARC";
SetState(State::STOPPING);
instance_ptr_.reset();
if (binding_.is_bound())
@@ -78,6 +100,7 @@ void ArcBridgeServiceImpl::SetDetectedAvailability(bool arc_available) {
DCHECK(CalledOnValidThread());
if (available() == arc_available)
return;
+ VLOG(1) << "ARC available: " << arc_available;
SetAvailable(arc_available);
PrerequisitesChanged();
}
@@ -96,17 +119,31 @@ void ArcBridgeServiceImpl::OnConnectionEstablished(
instance_ptr_->Init(binding_.CreateInterfacePtrAndBind());
+ VLOG(0) << "ARC ready";
SetState(State::READY);
}
void ArcBridgeServiceImpl::OnStopped() {
DCHECK(CalledOnValidThread());
SetState(State::STOPPED);
+ VLOG(0) << "ARC stopped";
if (reconnect_) {
// There was a previous invocation and it crashed for some reason. Try
// starting the container again.
reconnect_ = false;
- PrerequisitesChanged();
+ VLOG(0) << "ARC reconnecting";
+ if (use_delay_before_reconnecting_) {
+ // Instead of immediately trying to restart the container, give it some
+ // time to finish tearing down in case it is still in the process of
+ // stopping.
+ base::MessageLoop::current()->task_runner()->PostDelayedTask(
+ FROM_HERE, base::Bind(&ArcBridgeServiceImpl::PrerequisitesChanged,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(kReconnectDelayInSeconds));
+ } else {
+ // Restart immediately.
+ PrerequisitesChanged();
+ }
}
}
« no previous file with comments | « components/arc/arc_bridge_service_impl.h ('k') | components/arc/arc_bridge_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698