diff options
author | skyostil <skyostil@chromium.org> | 2015-06-01 11:16:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-01 18:18:17 +0000 |
commit | 23e04e72e8121a372fcbaf779fde9faae2bc772f (patch) | |
tree | f4f3b53a2977222f3ef955214a002896ad4634b8 /components/scheduler/renderer | |
parent | ff2fa0ca2adff9a5546a072c6f180df07dcd5fe1 (diff) | |
download | chromium_src-23e04e72e8121a372fcbaf779fde9faae2bc772f.zip chromium_src-23e04e72e8121a372fcbaf779fde9faae2bc772f.tar.gz chromium_src-23e04e72e8121a372fcbaf779fde9faae2bc772f.tar.bz2 |
mojo: Fix Blink's shutdown sequence in AxProviderImplTest
This patch ensures the sequence used to tear down Blink in
AxProviderImplTest matches the real implementation in RenderThreadImpl.
Specifically, we need to shut down the scheduler before terminating
Blink, because otherwise the scheduler might keep pointers to tasks
that live on the Blink heap and access freed memory in its destructor.
We also add an assertion to the renderer scheduler that it is shut down
explicitly.
Note that Blink cannot shut down the scheduler internally because of
crbug.com/467369. We expect that this depedency can be cleaned up once
the message loop is better integrated with the scheduler
(crbug.com/465354) and when the Blink repository has been merged into
Chromium.
BUG=463143
Review URL: https://codereview.chromium.org/1145973011
Cr-Commit-Position: refs/heads/master@{#332221}
Diffstat (limited to 'components/scheduler/renderer')
-rw-r--r-- | components/scheduler/renderer/renderer_scheduler_impl.cc | 6 | ||||
-rw-r--r-- | components/scheduler/renderer/renderer_scheduler_impl.h | 1 |
2 files changed, 7 insertions, 0 deletions
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc index 48c4c1b..7827a2c 100644 --- a/components/scheduler/renderer/renderer_scheduler_impl.cc +++ b/components/scheduler/renderer/renderer_scheduler_impl.cc @@ -38,6 +38,7 @@ RendererSchedulerImpl::RendererSchedulerImpl( helper_.ControlTaskRunner()), current_policy_(Policy::NORMAL), renderer_hidden_(false), + was_shutdown_(false), last_input_type_(blink::WebInputEvent::Undefined), input_stream_state_(InputStreamState::INACTIVE), policy_may_need_update_(&incoming_signals_lock_), @@ -61,10 +62,15 @@ RendererSchedulerImpl::~RendererSchedulerImpl() { TRACE_EVENT_OBJECT_DELETED_WITH_ID( TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", this); + // Ensure the renderer scheduler was shut down explicitly, because otherwise + // we could end up having stale pointers to the Blink heap which has been + // terminated by this point. + DCHECK(was_shutdown_); } void RendererSchedulerImpl::Shutdown() { helper_.Shutdown(); + was_shutdown_ = true; } scoped_refptr<base::SingleThreadTaskRunner> diff --git a/components/scheduler/renderer/renderer_scheduler_impl.h b/components/scheduler/renderer/renderer_scheduler_impl.h index 57ff24d..d49af39 100644 --- a/components/scheduler/renderer/renderer_scheduler_impl.h +++ b/components/scheduler/renderer/renderer_scheduler_impl.h @@ -202,6 +202,7 @@ class SCHEDULER_EXPORT RendererSchedulerImpl : public RendererScheduler, Policy current_policy_; base::TimeTicks current_policy_expiration_time_; bool renderer_hidden_; + bool was_shutdown_; base::TimeTicks estimated_next_frame_begin_; |