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

Unified Diff: chrome/browser/sync/notifier/chrome_system_resources.cc

Issue 2979003: Reworked ChromeSystemResources to handle callbacks properly. (Closed)
Patch Set: Fixed compile error Created 10 years, 5 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
Index: chrome/browser/sync/notifier/chrome_system_resources.cc
diff --git a/chrome/browser/sync/notifier/chrome_system_resources.cc b/chrome/browser/sync/notifier/chrome_system_resources.cc
index 0ec02108a92975edd285ec9ad596e0ad29a848b5..21c148cbdcf58ff8cc4facde1657bf5ce50b0a68 100644
--- a/chrome/browser/sync/notifier/chrome_system_resources.cc
+++ b/chrome/browser/sync/notifier/chrome_system_resources.cc
@@ -9,61 +9,64 @@
#include "base/logging.h"
#include "base/message_loop.h"
+#include "base/stl_util-inl.h"
#include "base/string_util.h"
-#include "base/task.h"
#include "chrome/browser/sync/notifier/invalidation_util.h"
namespace sync_notifier {
-ChromeSystemResources::ChromeSystemResources()
- : scheduler_active_(false) {}
+ChromeSystemResources::ChromeSystemResources() {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+}
ChromeSystemResources::~ChromeSystemResources() {
- DCHECK(!scheduler_active_);
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ StopScheduler();
}
invalidation::Time ChromeSystemResources::current_time() {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
return base::Time::Now();
}
void ChromeSystemResources::StartScheduler() {
- DCHECK(!scheduler_active_);
- scheduler_active_ = true;
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ scoped_runnable_method_factory_.reset(
+ new ScopedRunnableMethodFactory<ChromeSystemResources>(this));
}
void ChromeSystemResources::StopScheduler() {
- DCHECK(scheduler_active_);
- scheduler_active_ = false;
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ scoped_runnable_method_factory_.reset();
+ STLDeleteElements(&posted_tasks_);
}
void ChromeSystemResources::ScheduleWithDelay(
invalidation::TimeDelta delay,
invalidation::Closure* task) {
- if (!scheduler_active_) {
- delete task;
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ Task* task_to_post = MakeTaskToPost(task);
+ if (!task_to_post) {
return;
}
- DCHECK(invalidation::IsCallbackRepeatable(task));
MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- NewRunnableFunction(&RunAndDeleteClosure, task),
- delay.InMillisecondsRoundedUp());
+ FROM_HERE, task_to_post, delay.InMillisecondsRoundedUp());
}
void ChromeSystemResources::ScheduleImmediately(
invalidation::Closure* task) {
- if (!scheduler_active_) {
- delete task;
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ Task* task_to_post = MakeTaskToPost(task);
+ if (!task_to_post) {
return;
}
- DCHECK(invalidation::IsCallbackRepeatable(task));
- MessageLoop::current()->PostTask(
- FROM_HERE, NewRunnableFunction(&RunAndDeleteClosure, task));
+ MessageLoop::current()->PostTask(FROM_HERE, task_to_post);
}
void ChromeSystemResources::Log(
LogLevel level, const char* file, int line,
const char* format, ...) {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
va_list ap;
va_start(ap, format);
std::string result;
@@ -72,4 +75,25 @@ void ChromeSystemResources::Log(
va_end(ap);
}
+Task* ChromeSystemResources::MakeTaskToPost(
+ invalidation::Closure* task) {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(invalidation::IsCallbackRepeatable(task));
+ if (!scoped_runnable_method_factory_.get()) {
+ delete task;
+ return NULL;
+ }
+ posted_tasks_.insert(task);
+ Task* task_to_post =
+ scoped_runnable_method_factory_->NewRunnableMethod(
+ &ChromeSystemResources::RunPostedTask, task);
+ return task_to_post;
+}
+
+void ChromeSystemResources::RunPostedTask(invalidation::Closure* task) {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ RunAndDeleteClosure(task);
+ posted_tasks_.erase(task);
+}
+
} // namespace sync_notifier

Powered by Google App Engine
This is Rietveld 408576698