Commit 0f84ea10 authored by Francois Doray's avatar Francois Doray Committed by Commit Bot

[content] Use DoSomeWork() in NestedMessagePumpAndroid.

MessagePump::Delegate::DoWork/DoDelayedWork are being removed in favor
of DoSomeWork. This CL updates NestedMessagePumpAndroid to use
DoSomeWork to unblock that migration.

Bug: 885371
Change-Id: I0bd84f9f54f7509f7cbfed985d80ed3c6150f8a3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2070330Reviewed-by: default avatarEtienne Pierre-Doray <etiennep@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#744357}
parent fe7bafa7
...@@ -34,9 +34,6 @@ struct NestedMessagePumpAndroid::RunState { ...@@ -34,9 +34,6 @@ struct NestedMessagePumpAndroid::RunState {
// Used to sleep until there is more work to do. // Used to sleep until there is more work to do.
base::WaitableEvent waitable_event; base::WaitableEvent waitable_event;
// The time at which we should call DoDelayedWork.
base::TimeTicks delayed_work_time;
}; };
NestedMessagePumpAndroid::NestedMessagePumpAndroid() NestedMessagePumpAndroid::NestedMessagePumpAndroid()
...@@ -63,23 +60,19 @@ void NestedMessagePumpAndroid::Run(Delegate* delegate) { ...@@ -63,23 +60,19 @@ void NestedMessagePumpAndroid::Run(Delegate* delegate) {
if (state_->should_quit) if (state_->should_quit)
break; break;
bool did_work = state_->delegate->DoWork(); Delegate::NextWorkInfo next_work_info = delegate->DoSomeWork();
if (state_->should_quit) bool has_more_immediate_work = next_work_info.is_immediate();
break;
did_work |= state_->delegate->DoDelayedWork(&state_->delayed_work_time);
if (state_->should_quit) if (state_->should_quit)
break; break;
if (did_work) { if (has_more_immediate_work)
continue; continue;
}
did_work = state_->delegate->DoIdleWork(); has_more_immediate_work = state_->delegate->DoIdleWork();
if (state_->should_quit) if (state_->should_quit)
break; break;
if (did_work) if (has_more_immediate_work)
continue; continue;
// No native tasks to process right now. Process tasks from the Java // No native tasks to process right now. Process tasks from the Java
...@@ -88,20 +81,14 @@ void NestedMessagePumpAndroid::Run(Delegate* delegate) { ...@@ -88,20 +81,14 @@ void NestedMessagePumpAndroid::Run(Delegate* delegate) {
bool ret = Java_NestedSystemMessageHandler_runNestedLoopTillIdle(env); bool ret = Java_NestedSystemMessageHandler_runNestedLoopTillIdle(env);
CHECK(ret) << "Error running java message loop, tests will likely fail."; CHECK(ret) << "Error running java message loop, tests will likely fail.";
if (state_->delayed_work_time.is_null()) { if (next_work_info.delayed_run_time.is_max()) {
state_->waitable_event.TimedWait(max_delay); state_->waitable_event.TimedWait(max_delay);
} else { } else {
base::TimeDelta delay = base::TimeDelta delay = next_work_info.remaining_delay();
state_->delayed_work_time - base::TimeTicks::Now();
if (delay > max_delay) if (delay > max_delay)
delay = max_delay; delay = max_delay;
if (delay > base::TimeDelta()) { DCHECK_GT(delay, base::TimeDelta());
state_->waitable_event.TimedWait(delay); state_->waitable_event.TimedWait(delay);
} else {
// It looks like delayed_work_time indicates a time in the past, so we
// need to call DoDelayedWork now.
state_->delayed_work_time = base::TimeTicks();
}
} }
} }
...@@ -127,13 +114,11 @@ void NestedMessagePumpAndroid::ScheduleWork() { ...@@ -127,13 +114,11 @@ void NestedMessagePumpAndroid::ScheduleWork() {
void NestedMessagePumpAndroid::ScheduleDelayedWork( void NestedMessagePumpAndroid::ScheduleDelayedWork(
const base::TimeTicks& delayed_work_time) { const base::TimeTicks& delayed_work_time) {
if (state_) { // Since this is always called from the same thread as Run(), there is nothing
// We know that we can't be blocked on Wait right now since this method can // to do as the loop is already running. It will wait in Run() with the
// only be called on the same thread as Run, so we only need to update our // correct timeout when it's out of immediate tasks.
// record of how long to sleep when we do sleep. // TODO(gab): Consider removing ScheduleDelayedWork() when all pumps function
state_->delayed_work_time = delayed_work_time; // this way (bit.ly/merge-message-pump-do-work).
return;
}
} }
} // namespace content } // namespace content
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