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

Side by Side Diff: components/scheduler/promises/thread_pool_promise_executor.cc

Issue 1401553002: NOT INTENDED FOR LANDING: A promises demo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Support for rejectatble promises! 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/scheduler/promises/thread_pool_promise_executor.h"
6
7 #include "base/bind.h"
8 #include "base/threading/worker_pool.h"
9
10 namespace promise {
11 namespace internal {
12
13 ThreadPoolPromiseExecutor::ThreadPoolPromiseExecutor() {}
14
15 ThreadPoolPromiseExecutor::~ThreadPoolPromiseExecutor() {}
16
17 void ThreadPoolPromiseExecutor::StartResolveInternal(PromiseBase* promise) {
18 PromiseExecutor::StartResolveInternal(promise);
19 DispatchExecutorDrivenResolve();
20 }
21
22 void ThreadPoolPromiseExecutor::ExecutorDrivenResolve() {
23 PromiseBase* ready_promise;
24 {
25 base::AutoLock lock(lock_);
26 ready_promise = GetNextReadyPromise();
27 DCHECK(ready_promise->state() != PromiseBase::State::RESOLVED);
28 DCHECK(ready_promise->AllPrerequisitesSatisfied());
29 }
30
31 if (!ready_promise)
32 return;
33
34 ready_promise->ExecutorDrivenResolve();
35 }
36
37 void ThreadPoolPromiseExecutor::DispatchExecutorDrivenResolve() {
38 base::WorkerPool::PostTask(
39 FROM_HERE, base::Bind(&ThreadPoolPromiseExecutor::ExecutorDrivenResolve,
40 base::Unretained(this)),
41 true);
42 }
43
44 bool ThreadPoolPromiseExecutor::OnPromiseResolved(PromiseBase* promise) {
45 if (PromiseExecutor::OnPromiseResolved(promise))
46 DispatchExecutorDrivenResolve();
47 return false;
48 }
49
50 bool ThreadPoolPromiseExecutor::OnPromiseRejected(PromiseBase* promise) {
51 if (PromiseExecutor::OnPromiseRejected(promise))
52 DispatchExecutorDrivenResolve();
53 return false;
54 }
55
56 } // namespace internal
57 } // namespace promise
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698