X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2FWebKit%2FSource%2Fcore%2Finspector%2FTraceEventDispatcher.cpp;h=110cbcbbcf1432443563fe458bf7417985952b25;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=4c077d2f1365de7ffe919474b2019ba1052d9cec;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/WebKit/Source/core/inspector/TraceEventDispatcher.cpp b/src/third_party/WebKit/Source/core/inspector/TraceEventDispatcher.cpp index 4c077d2..110cbcb 100644 --- a/src/third_party/WebKit/Source/core/inspector/TraceEventDispatcher.cpp +++ b/src/third_party/WebKit/Source/core/inspector/TraceEventDispatcher.cpp @@ -37,18 +37,16 @@ #include "wtf/MainThread.h" #include "wtf/text/StringHash.h" -namespace WebCore { +namespace blink { void TraceEventDispatcher::dispatchEventOnAnyThread(char phase, const unsigned char*, const char* name, unsigned long long id, int numArgs, const char* const* argNames, const unsigned char* argTypes, const unsigned long long* argValues, unsigned char flags, double timestamp) { - if (phase == TRACE_EVENT_PHASE_INSTANT_WITH_SCOPE) - phase = TRACE_EVENT_PHASE_INSTANT; TraceEventDispatcher* self = instance(); { MutexLocker locker(self->m_mutex); - if (self->m_handlers.find(std::make_pair(name, phase)) == self->m_handlers.end()) + if (self->m_listeners->find(std::make_pair(name, phase)) == self->m_listeners->end()) return; } self->enqueueEvent(TraceEvent(timestamp, phase, name, id, currentThread(), numArgs, argNames, argTypes, argValues)); @@ -89,52 +87,52 @@ void TraceEventDispatcher::processBackgroundEvents() } for (size_t eventIndex = 0, size = events.size(); eventIndex < size; ++eventIndex) { const TraceEvent& event = events[eventIndex]; - HandlersMap::iterator it = m_handlers.find(std::make_pair(event.name(), event.phase())); - if (it == m_handlers.end()) + ListenersMap::iterator it = m_listeners->find(std::make_pair(event.name(), event.phase())); + if (it == m_listeners->end()) continue; - Vector& handlers = it->value; - for (size_t handlerIndex = 0; handlerIndex < handlers.size(); ++handlerIndex) - (handlers[handlerIndex].instance->*(handlers[handlerIndex].method))(event); + WillBeHeapVector >& listeners = *it->value.get(); + for (size_t listenerIndex = 0; listenerIndex < listeners.size(); ++listenerIndex) + listeners[listenerIndex]->call(event); } } -void TraceEventDispatcher::innerAddListener(const char* name, char phase, TraceEventTargetBase* instance, TraceEventHandlerMethod method, InspectorClient* client) +void TraceEventDispatcher::addListener(const char* name, char phase, PassOwnPtrWillBeRawPtr listener, InspectorClient* client) { static const char CategoryFilter[] = "-*," TRACE_DISABLED_BY_DEFAULT("devtools.timeline") "," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame"); ASSERT(isMainThread()); MutexLocker locker(m_mutex); - if (m_handlers.isEmpty()) + if (m_listeners->isEmpty()) client->setTraceEventCallback(CategoryFilter, dispatchEventOnAnyThread); - HandlersMap::iterator it = m_handlers.find(std::make_pair(name, phase)); - if (it == m_handlers.end()) - m_handlers.add(std::make_pair(name, phase), Vector()).storedValue->value.append(BoundTraceEventHandler(instance, method)); + ListenersMap::iterator it = m_listeners->find(std::make_pair(name, phase)); + if (it == m_listeners->end()) + m_listeners->add(std::make_pair(name, phase), adoptPtrWillBeNoop(new WillBeHeapVector >())).storedValue->value->append(listener); else - it->value.append(BoundTraceEventHandler(instance, method)); + it->value->append(listener); } -void TraceEventDispatcher::removeAllListeners(TraceEventTargetBase* instance, InspectorClient* client) +void TraceEventDispatcher::removeAllListeners(void* eventTarget, InspectorClient* client) { ASSERT(isMainThread()); processBackgroundEvents(); { MutexLocker locker(m_mutex); - HandlersMap remainingHandlers; - for (HandlersMap::iterator it = m_handlers.begin(); it != m_handlers.end(); ++it) { - Vector& handlers = it->value; - for (size_t j = 0; j < handlers.size();) { - if (handlers[j].instance == instance) - handlers.remove(j); + ListenersMap remainingListeners; + for (ListenersMap::iterator it = m_listeners->begin(); it != m_listeners->end(); ++it) { + WillBeHeapVector >& listeners = *it->value.get(); + for (size_t j = 0; j < listeners.size();) { + if (listeners[j]->target() == eventTarget) + listeners.remove(j); else ++j; } - if (!handlers.isEmpty()) - remainingHandlers.add(it->key, it->value); + if (!listeners.isEmpty()) + remainingListeners.add(it->key, it->value.release()); } - m_handlers.swap(remainingHandlers); + m_listeners->swap(remainingListeners); } - if (m_handlers.isEmpty()) + if (m_listeners->isEmpty()) client->resetTraceEventCallback(); } @@ -149,7 +147,7 @@ size_t TraceEventDispatcher::TraceEvent::findParameter(const char* name) const const TraceEvent::TraceValueUnion& TraceEventDispatcher::TraceEvent::parameter(const char* name, unsigned char expectedType) const { - static WebCore::TraceEvent::TraceValueUnion missingValue; + static blink::TraceEvent::TraceValueUnion missingValue; size_t index = findParameter(name); ASSERT(isMainThread()); if (index == kNotFound || m_argumentTypes[index] != expectedType) { @@ -159,5 +157,5 @@ const TraceEvent::TraceValueUnion& TraceEventDispatcher::TraceEvent::parameter(c return m_argumentValues[index]; } -} // namespace WebCore +} // namespace blink