Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: Source/core/events/EventTarget.cpp

Issue 794223003: Cheaper thread-safe atomic initialization of static references. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add type check for initial value Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng 374 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng
375 // event listeners, even though that violates some versions of the DOM s pec. 375 // event listeners, even though that violates some versions of the DOM s pec.
376 registeredListener.listener->handleEvent(context, event); 376 registeredListener.listener->handleEvent(context, event);
377 InspectorInstrumentation::didHandleEvent(cookie); 377 InspectorInstrumentation::didHandleEvent(cookie);
378 } 378 }
379 d->firingEventIterators->removeLast(); 379 d->firingEventIterators->removeLast();
380 } 380 }
381 381
382 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev entType) 382 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev entType)
383 { 383 {
384 AtomicallyInitializedStatic(EventListenerVector*, emptyVector = new EventLis tenerVector); 384 AtomicallyInitializedStaticReference(EventListenerVector, emptyVector, new E ventListenerVector);
385 385
386 EventTargetData* d = eventTargetData(); 386 EventTargetData* d = eventTargetData();
387 if (!d) 387 if (!d)
388 return *emptyVector; 388 return emptyVector;
389 389
390 EventListenerVector* listenerVector = d->eventListenerMap.find(eventType); 390 EventListenerVector* listenerVector = d->eventListenerMap.find(eventType);
391 if (!listenerVector) 391 if (!listenerVector)
392 return *emptyVector; 392 return emptyVector;
393 393
394 return *listenerVector; 394 return *listenerVector;
395 } 395 }
396 396
397 Vector<AtomicString> EventTarget::eventTypes() 397 Vector<AtomicString> EventTarget::eventTypes()
398 { 398 {
399 EventTargetData* d = eventTargetData(); 399 EventTargetData* d = eventTargetData();
400 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>(); 400 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>();
401 } 401 }
402 402
403 void EventTarget::removeAllEventListeners() 403 void EventTarget::removeAllEventListeners()
404 { 404 {
405 EventTargetData* d = eventTargetData(); 405 EventTargetData* d = eventTargetData();
406 if (!d) 406 if (!d)
407 return; 407 return;
408 d->eventListenerMap.clear(); 408 d->eventListenerMap.clear();
409 409
410 // Notify firing events planning to invoke the listener at 'index' that 410 // Notify firing events planning to invoke the listener at 'index' that
411 // they have one less listener to invoke. 411 // they have one less listener to invoke.
412 if (d->firingEventIterators) { 412 if (d->firingEventIterators) {
413 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 413 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
414 d->firingEventIterators->at(i).iterator = 0; 414 d->firingEventIterators->at(i).iterator = 0;
415 d->firingEventIterators->at(i).end = 0; 415 d->firingEventIterators->at(i).end = 0;
416 } 416 }
417 } 417 }
418 } 418 }
419 419
420 } // namespace blink 420 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698