Chromium Code Reviews| Index: Source/core/dom/MainThreadTaskRunner.cpp |
| diff --git a/Source/core/dom/MainThreadTaskRunner.cpp b/Source/core/dom/MainThreadTaskRunner.cpp |
| index 095e28d2dcce6cfb6e833a3232dc5612a0d4dce9..cf66af11ff92dabdc4c517ad6a02cb0ea0772897 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,7 @@ public: |
| void run() override; |
| private: |
| - WeakPtr<MainThreadTaskRunner> m_runner; |
|
sof
2015/08/19 06:37:56
The GC plugin ought to warn/disallow WeakPtr<T> if
|
| + WeakPtrWillBeWeakPersistent<MainThreadTaskRunner> m_runner; |
| OwnPtr<ExecutionContextTask> m_task; |
| bool m_isInspectorTask; |
| }; |
| @@ -64,7 +64,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 +76,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)); |
|
haraken
2015/08/19 05:18:17
Maybe I'm wrong but this task is created on a non-
Yuta Kitamura
2015/08/19 05:56:57
You are right; it indeed can be called from non-ma
|
| } |
| 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 +138,13 @@ void MainThreadTaskRunner::pendingTasksTimerFired(Timer<MainThreadTaskRunner>*) |
| } |
| } |
| +WeakPtrWillBeRawPtr<MainThreadTaskRunner> MainThreadTaskRunner::createWeakPointerToSelf() |
| +{ |
| +#if ENABLE(OILPAN) |
| + return this; |
| +#else |
| + return m_weakFactory.createWeakPtr(); |
| +#endif |
| +} |
| + |
| } // namespace |