summaryrefslogtreecommitdiffstats
path: root/components/scheduler/renderer
diff options
context:
space:
mode:
authorskyostil <skyostil@chromium.org>2015-06-01 11:16:45 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-01 18:18:17 +0000
commit23e04e72e8121a372fcbaf779fde9faae2bc772f (patch)
treef4f3b53a2977222f3ef955214a002896ad4634b8 /components/scheduler/renderer
parentff2fa0ca2adff9a5546a072c6f180df07dcd5fe1 (diff)
downloadchromium_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.cc6
-rw-r--r--components/scheduler/renderer/renderer_scheduler_impl.h1
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_;