Commit ab284130 authored by aandrey@chromium.org's avatar aandrey@chromium.org

DevTools: Instrument GenericEventQueue for async stacks.

This adds async stacks support for the following DOM events:
- audio & video events (play, pause, ratechange, etc.)
- TrackList events: addtrack, removetrack
- MediaSource events (sourceopen and etc.)
- autocomplete and others

BUG=272416
R=yurys, pfeldman@chromium.org

Review URL: https://codereview.chromium.org/335963004

git-svn-id: svn://svn.chromium.org/blink/trunk@176523 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 8bf9d983
......@@ -15,4 +15,10 @@ Call stack:
1) doTestSelectionChange (async-callstack-events.html:31)
2) testFunction (async-callstack-events.html:11)
Call stack:
0) onVideoPlay (async-callstack-events.html:64)
[play]
0) doTestMediaEvents (async-callstack-events.html:58)
1) testFunction (async-callstack-events.html:11)
......@@ -51,9 +51,22 @@ function onHashChange()
debugger;
}
function doTestMediaEvents()
{
var video = document.getElementById("video");
video.addEventListener("play", onVideoPlay, false);
video.play();
}
function onVideoPlay()
{
video.removeEventListener("play", onVideoPlay, false);
debugger;
}
var test = function()
{
var totalDebuggerStatements = 2;
var totalDebuggerStatements = 3;
var maxAsyncCallStackDepth = 4;
InspectorTest.runAsyncCallStacksTest(totalDebuggerStatements, maxAsyncCallStackDepth);
}
......@@ -62,6 +75,7 @@ var test = function()
</head>
<body onload="runTest()">
<video id="video" src="../../../media/content/test.ogv"></video>
<p id="content">
Tests asynchronous call stacks for various DOM events.
</p>
......
......@@ -28,6 +28,7 @@
#include "core/events/GenericEventQueue.h"
#include "core/events/Event.h"
#include "core/inspector/InspectorInstrumentation.h"
#include "platform/TraceEvent.h"
namespace WebCore {
......@@ -64,6 +65,7 @@ bool GenericEventQueue::enqueueEvent(PassRefPtrWillBeRawPtr<Event> event)
event->setTarget(nullptr);
TRACE_EVENT_ASYNC_BEGIN1("event", "GenericEventQueue:enqueueEvent", event.get(), "type", event->type().ascii());
InspectorInstrumentation::didEnqueueEvent(event->target() ? event->target() : m_owner.get(), event.get());
m_pendingEvents.append(event);
if (!m_timer.isActive())
......@@ -77,6 +79,7 @@ bool GenericEventQueue::cancelEvent(Event* event)
bool found = m_pendingEvents.contains(event);
if (found) {
InspectorInstrumentation::didRemoveEvent(event->target() ? event->target() : m_owner.get(), event);
m_pendingEvents.remove(m_pendingEvents.find(event));
TRACE_EVENT_ASYNC_END2("event", "GenericEventQueue:enqueueEvent", event, "type", event->type().ascii(), "status", "cancelled");
}
......@@ -101,8 +104,9 @@ void GenericEventQueue::timerFired(Timer<GenericEventQueue>*)
EventTarget* target = event->target() ? event->target() : m_owner.get();
CString type(event->type().ascii());
TRACE_EVENT_ASYNC_STEP_INTO1("event", "GenericEventQueue:enqueueEvent", event, "dispatch", "type", type);
target->dispatchEvent(pendingEvents[i].release());
target->dispatchEvent(pendingEvents[i]);
TRACE_EVENT_ASYNC_END1("event", "GenericEventQueue:enqueueEvent", event, "type", type);
InspectorInstrumentation::didRemoveEvent(target, event);
}
}
......@@ -119,6 +123,7 @@ void GenericEventQueue::cancelAllEvents()
for (size_t i = 0; i < m_pendingEvents.size(); ++i) {
Event* event = m_pendingEvents[i].get();
TRACE_EVENT_ASYNC_END2("event", "GenericEventQueue:enqueueEvent", event, "type", event->type().ascii(), "status", "cancelled");
InspectorInstrumentation::didRemoveEvent(event->target() ? event->target() : m_owner.get(), event);
}
m_pendingEvents.clear();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment