Index: Source/core/dom/MainThreadTaskRunner.cpp |
diff --git a/Source/core/dom/MainThreadTaskRunner.cpp b/Source/core/dom/MainThreadTaskRunner.cpp |
index 095e28d2dcce6cfb6e833a3232dc5612a0d4dce9..339332f5050456d486acedd6de1ea58f7448043e 100644 |
--- a/Source/core/dom/MainThreadTaskRunner.cpp |
+++ b/Source/core/dom/MainThreadTaskRunner.cpp |
@@ -38,7 +38,7 @@ namespace blink { |
class MainThreadTask : public WebThread::Task { |
WTF_MAKE_NONCOPYABLE(MainThreadTask); WTF_MAKE_FAST_ALLOCATED(MainThreadTask); |
public: |
- MainThreadTask(WeakPtr<MainThreadTaskRunner> runner, PassOwnPtr<ExecutionContextTask> task, bool isInspectorTask) |
+ MainThreadTask(WeakPtrWillBeRawPtr<MainThreadTaskRunner> runner, PassOwnPtr<ExecutionContextTask> task, bool isInspectorTask) |
: m_runner(runner) |
, m_task(task) |
, m_isInspectorTask(isInspectorTask) |
@@ -48,7 +48,11 @@ public: |
void run() override; |
private: |
+#if ENABLE(OILPAN) |
+ CrossThreadWeakPersistent<MainThreadTaskRunner> m_runner; |
+#else |
WeakPtr<MainThreadTaskRunner> m_runner; |
+#endif |
OwnPtr<ExecutionContextTask> m_task; |
bool m_isInspectorTask; |
}; |
@@ -64,7 +68,9 @@ void MainThreadTask::run() |
MainThreadTaskRunner::MainThreadTaskRunner(ExecutionContext* context) |
: m_context(context) |
+#if !ENABLE(OILPAN) |
, m_weakFactory(this) |
+#endif |
, m_pendingTasksTimer(this, &MainThreadTaskRunner::pendingTasksTimerFired) |
, m_suspended(false) |
{ |
@@ -74,16 +80,21 @@ MainThreadTaskRunner::~MainThreadTaskRunner() |
{ |
} |
+DEFINE_TRACE(MainThreadTaskRunner) |
+{ |
+ visitor->trace(m_context); |
+} |
+ |
void MainThreadTaskRunner::postTask(const WebTraceLocation& location, PassOwnPtr<ExecutionContextTask> task) |
{ |
if (!task->taskNameForInstrumentation().isEmpty()) |
InspectorInstrumentation::didPostExecutionContextTask(m_context, task.get()); |
- Platform::current()->mainThread()->postTask(location, new MainThreadTask(m_weakFactory.createWeakPtr(), task, false)); |
+ Platform::current()->mainThread()->postTask(location, new MainThreadTask(createWeakPointerToSelf(), task, false)); |
} |
void MainThreadTaskRunner::postInspectorTask(const WebTraceLocation& location, PassOwnPtr<ExecutionContextTask> task) |
{ |
- Platform::current()->mainThread()->postTask(location, new MainThreadTask(m_weakFactory.createWeakPtr(), task, true)); |
+ Platform::current()->mainThread()->postTask(location, new MainThreadTask(createWeakPointerToSelf(), task, true)); |
} |
void MainThreadTaskRunner::perform(PassOwnPtr<ExecutionContextTask> task, bool isInspectorTask) |
@@ -131,4 +142,13 @@ void MainThreadTaskRunner::pendingTasksTimerFired(Timer<MainThreadTaskRunner>*) |
} |
} |
+WeakPtrWillBeRawPtr<MainThreadTaskRunner> MainThreadTaskRunner::createWeakPointerToSelf() |
+{ |
+#if ENABLE(OILPAN) |
+ return this; |
+#else |
+ return m_weakFactory.createWeakPtr(); |
+#endif |
+} |
+ |
} // namespace |