Allow posting a Task to Microtasks (issue 242123005)

0 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

cbies...@chromium.org

nieprzeczytany,
17 kwi 2014, 20:15:3317.04.2014
do raf...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com
Reviewers: rafaelw,

Description:
Allow posting a Task to Microtasks

...not just a static callback. This will be used for
<img> loading and potential other future users.

R=raf...@chromium.org
CC=aba...@chromium.org
BUG=

Please review this at https://codereview.chromium.org/242123005/

SVN Base: svn://svn.chromium.org/blink/trunk

Affected files (+13, -8 lines):
M Source/core/dom/Microtask.h
M Source/core/dom/Microtask.cpp
M Source/core/dom/MutationObserver.cpp
M Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp


Index: Source/core/dom/Microtask.cpp
diff --git a/Source/core/dom/Microtask.cpp b/Source/core/dom/Microtask.cpp
index
e63b84b1f60d1b998e79bd7c14b378e2510dbad4..f4ad6acb4539654c26a4a0dfa13c7fed82ea975b
100644
--- a/Source/core/dom/Microtask.cpp
+++ b/Source/core/dom/Microtask.cpp
@@ -32,12 +32,13 @@
#include "core/dom/Microtask.h"

#include "bindings/v8/V8PerIsolateData.h"
+#include "platform/Task.h"
#include "wtf/Vector.h"
#include <v8.h>

namespace WebCore {

-typedef Vector<MicrotaskCallback> MicrotaskQueue;
+typedef Vector<Task*> MicrotaskQueue;

static MicrotaskQueue& microtaskQueue()
{
@@ -54,17 +55,18 @@ void Microtask::performCheckpoint()
isolateData->setPerformingMicrotaskCheckpoint(true);

while (!microtaskQueue().isEmpty()) {
- Vector<MicrotaskCallback> microtasks;
+ Vector<Task*> microtasks;
microtasks.swap(microtaskQueue());
for (size_t i = 0; i < microtasks.size(); ++i) {
- microtasks[i]();
+ microtasks[i]->run();
+ delete microtasks[i];
}
}

isolateData->setPerformingMicrotaskCheckpoint(false);
}

-void Microtask::enqueueMicrotask(MicrotaskCallback callback)
+void Microtask::enqueueMicrotask(Task* callback)
{
microtaskQueue().append(callback);
}
Index: Source/core/dom/Microtask.h
diff --git a/Source/core/dom/Microtask.h b/Source/core/dom/Microtask.h
index
63e7b9589ab66dda45271d04591e39f219b587cb..51473a1c7fff552ba9de220f82cd568a4fd2d81d
100644
--- a/Source/core/dom/Microtask.h
+++ b/Source/core/dom/Microtask.h
@@ -33,12 +33,13 @@

namespace WebCore {

-typedef void (*MicrotaskCallback)();
+class Task;

class Microtask {
public:
static void performCheckpoint();
- static void enqueueMicrotask(MicrotaskCallback);
+ // This function takes ownership of the passed-in Task.
+ static void enqueueMicrotask(Task*);

private:
explicit Microtask();
Index: Source/core/dom/MutationObserver.cpp
diff --git a/Source/core/dom/MutationObserver.cpp
b/Source/core/dom/MutationObserver.cpp
index
6f4fb9ec0fe39db4359629b189ef4fc822bebdda..c95263007a22e90ae1c6eed461eee182fd90f2f4
100644
--- a/Source/core/dom/MutationObserver.cpp
+++ b/Source/core/dom/MutationObserver.cpp
@@ -42,6 +42,7 @@
#include "core/dom/MutationRecord.h"
#include "core/dom/Node.h"
#include "core/inspector/InspectorInstrumentation.h"
+#include "platform/Task.h"
#include "wtf/MainThread.h"

namespace WebCore {
@@ -186,7 +187,7 @@ static MutationObserverSet& suspendedMutationObservers()
static void activateObserver(PassRefPtr<MutationObserver> observer)
{
if (activeMutationObservers().isEmpty())
- Microtask::enqueueMicrotask(&MutationObserver::deliverMutations);
+ Microtask::enqueueMicrotask(new
Task(WTF::bind(&MutationObserver::deliverMutations)));

activeMutationObservers().add(observer);
}
Index: Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
diff --git a/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
b/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
index
5337da3359835fb8512eaecab54cf2cf28eed2b5..fa515c5d91d862a06fa982202119b9244757d386
100644
--- a/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
+++ b/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
@@ -11,6 +11,7 @@
#include "core/dom/custom/CustomElementMicrotaskImportStep.h"
#include "core/dom/custom/CustomElementScheduler.h"
#include "core/html/imports/HTMLImport.h"
+#include "platform/Task.h"
#include "wtf/MainThread.h"

namespace WebCore {
@@ -56,7 +57,7 @@ void
CustomElementMicrotaskDispatcher::importDidFinish(CustomElementMicrotaskImp
void CustomElementMicrotaskDispatcher::ensureMicrotaskScheduled()
{
if (!m_hasScheduledMicrotask) {
- Microtask::enqueueMicrotask(&dispatch);
+ Microtask::enqueueMicrotask(new Task(WTF::bind(&dispatch)));
m_hasScheduledMicrotask = true;
}
}


aba...@chromium.org

nieprzeczytany,
18 kwi 2014, 12:01:0418.04.2014
do cbies...@chromium.org, raf...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/Microtask.cpp
File Source/core/dom/Microtask.cpp (right):

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/Microtask.cpp#newcode41
Source/core/dom/Microtask.cpp:41: typedef
Vector<blink::WebThread::Task*> MicrotaskQueue;
Vector<OwnPtr<blink::WebThread::Task> >

?

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/Microtask.h
File Source/core/dom/Microtask.h (right):

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/Microtask.h#newcode42
Source/core/dom/Microtask.h:42: static void
enqueueMicrotask(blink::WebThread::Task*);
PassOwnPtr?

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/MutationObserver.cpp
File Source/core/dom/MutationObserver.cpp (right):

https://codereview.chromium.org/242123005/diff/20001/Source/core/dom/MutationObserver.cpp#newcode190
Source/core/dom/MutationObserver.cpp:190:
Microtask::enqueueMicrotask(new
Task(WTF::bind(&MutationObserver::deliverMutations)));
Maybe Microtask::enqueueMicrotask should have an overload that takes a
WTF::Closure and wraps it in a Task for you?

https://codereview.chromium.org/242123005/

cbies...@chromium.org

nieprzeczytany,
18 kwi 2014, 14:04:3418.04.2014
do raf...@chromium.org, aba...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com, aba...@chromium.org
All done. Please take another look.

https://codereview.chromium.org/242123005/

raf...@chromium.org

nieprzeczytany,
18 kwi 2014, 14:11:0418.04.2014
do cbies...@chromium.org, aba...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com, aba...@chromium.org

aba...@chromium.org

nieprzeczytany,
18 kwi 2014, 14:15:2118.04.2014
do cbies...@chromium.org, raf...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com

commi...@chromium.org

nieprzeczytany,
18 kwi 2014, 14:15:3618.04.2014
do cbies...@chromium.org, raf...@chromium.org, aba...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com, aba...@chromium.org

commi...@chromium.org

nieprzeczytany,
18 kwi 2014, 15:24:5318.04.2014
do cbies...@chromium.org, raf...@chromium.org, aba...@chromium.org, blink-...@chromium.org, webcomponen...@chromium.org, sigb...@opera.com, eae+bli...@chromium.org, dglazko...@chromium.org, adamk...@chromium.org, ch.d...@samsung.com, rob....@samsung.com, aba...@chromium.org
Change committed as 171965

https://codereview.chromium.org/242123005/
Odpowiedz wszystkim
Odpowiedz autorowi
Przekaż
Nowe wiadomości: 0