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

Unified Diff: services/image_decoder/image_decoder_service.cc

Issue 2538833004: image_decoder: Delay shutdown on idle (Closed)
Patch Set: . Created 4 years 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 | « services/image_decoder/image_decoder_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/image_decoder/image_decoder_service.cc
diff --git a/services/image_decoder/image_decoder_service.cc b/services/image_decoder/image_decoder_service.cc
index 5295e25299989e39804b2b4676759903a7c9ff57..97db543264d9088315fe0cef7f75dfd0bf05680a 100644
--- a/services/image_decoder/image_decoder_service.cc
+++ b/services/image_decoder/image_decoder_service.cc
@@ -5,6 +5,8 @@
#include "services/image_decoder/image_decoder_service.h"
#include "base/macros.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/time/time.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/image_decoder/image_decoder_impl.h"
#include "services/image_decoder/public/interfaces/image_decoder.mojom.h"
@@ -30,7 +32,7 @@ void OnImageDecoderRequest(
} // namespace
-ImageDecoderService::ImageDecoderService() = default;
+ImageDecoderService::ImageDecoderService() : weak_factory_(this) {}
ImageDecoderService::~ImageDecoderService() = default;
@@ -41,8 +43,8 @@ std::unique_ptr<service_manager::Service> ImageDecoderService::Create() {
void ImageDecoderService::OnStart() {
ref_factory_.reset(new service_manager::ServiceContextRefFactory(
- base::Bind(&service_manager::ServiceContext::RequestQuit,
- base::Unretained(context()))));
+ base::Bind(&ImageDecoderService::MaybeRequestQuitDelayed,
+ base::Unretained(this))));
}
bool ImageDecoderService::OnConnect(
@@ -63,4 +65,18 @@ bool ImageDecoderService::OnStop() {
return true;
}
+void ImageDecoderService::MaybeRequestQuitDelayed() {
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&ImageDecoderService::MaybeRequestQuit,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(5));
+}
+
+void ImageDecoderService::MaybeRequestQuit() {
+ DCHECK(ref_factory_);
+ if (ref_factory_->HasNoRefs())
+ context()->RequestQuit();
+}
+
} // namespace image_decoder
« no previous file with comments | « services/image_decoder/image_decoder_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698