void TraceEventDispatcher::removeAllListeners(TraceEventTargetBase* instance, InspectorClient* client) { ASSERT(isMainThread()); processBackgroundEvents(); { MutexLocker locker(m_mutex); HandlersMap remainingHandlers; for (HandlersMap::iterator it = m_handlers.begin(); it != m_handlers.end(); ++it) { Vector<BoundTraceEventHandler>& handlers = it->value; for (size_t j = 0; j < handlers.size();) { if (handlers[j].instance == instance) handlers.remove(j); else ++j; } if (!handlers.isEmpty()) remainingHandlers.add(it->key, it->value); } m_handlers.swap(remainingHandlers); } if (m_handlers.isEmpty()) client->setTraceEventCallback(0); }
void TraceEventDispatcher::removeAllListeners(void* eventTarget, InspectorClient* client) { ASSERT(isMainThread()); processBackgroundEvents(); { MutexLocker locker(m_mutex); ListenersMap remainingListeners; for (ListenersMap::iterator it = m_listeners->begin(); it != m_listeners->end(); ++it) { WillBeHeapVector<OwnPtrWillBeMember<TraceEventListener> >& listeners = *it->value.get(); for (size_t j = 0; j < listeners.size();) { if (listeners[j]->target() == eventTarget) listeners.remove(j); else ++j; } if (!listeners.isEmpty()) remainingListeners.add(it->key, it->value.release()); } m_listeners->swap(remainingListeners); } if (m_listeners->isEmpty()) client->resetTraceEventCallback(); }
void TraceEventDispatcher::processBackgroundEventsTask() { m_processEventsTaskInFlight = false; processBackgroundEvents(); }