 Chromium Code Reviews
 Chromium Code Reviews Issue 1296243004:
  Oilpan: Move MainThreadTaskRunner into Oilpan heap.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 1296243004:
  Oilpan: Move MainThreadTaskRunner into Oilpan heap.  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| 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 |