Bug 1084421 - Only Events with a wrapper should trigger GC more likely, r=mccr8

--HG--
extra : rebase_source : 398e18dfc3d103ee139cc3c5d49710855c925e82
This commit is contained in:
Olli Pettay 2014-10-18 02:16:58 +03:00
Родитель 4066b17292
Коммит 3b8be5cd0d
48 изменённых файлов: 68 добавлений и 56 удалений

Просмотреть файл

@ -46,7 +46,7 @@ MediaEncryptedEvent::~MediaEncryptedEvent()
}
JSObject*
MediaEncryptedEvent::WrapObject(JSContext* aCx)
MediaEncryptedEvent::WrapObjectInternal(JSContext* aCx)
{
return MediaEncryptedEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -36,7 +36,7 @@ protected:
public:
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
static already_AddRefed<MediaEncryptedEvent>
Constructor(EventTarget* aOwner,

Просмотреть файл

@ -29,7 +29,7 @@ MediaKeyError::SystemCode() const
}
JSObject*
MediaKeyError::WrapObject(JSContext* aCx)
MediaKeyError::WrapObjectInternal(JSContext* aCx)
{
return MediaKeyErrorBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -24,7 +24,7 @@ public:
MediaKeyError(EventTarget* aOwner, uint32_t aSystemCode);
~MediaKeyError();
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
uint32_t SystemCode() const;

Просмотреть файл

@ -56,7 +56,7 @@ MediaKeyMessageEvent::AsMediaKeyMessageEvent()
}
JSObject*
MediaKeyMessageEvent::WrapObject(JSContext* aCx)
MediaKeyMessageEvent::WrapObjectInternal(JSContext* aCx)
{
return MediaKeyMessageEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -37,7 +37,7 @@ protected:
public:
virtual MediaKeyMessageEvent* AsMediaKeyMessageEvent();
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
static already_AddRefed<MediaKeyMessageEvent>
Constructor(EventTarget* aOwner,

Просмотреть файл

@ -35,7 +35,7 @@ AudioProcessingEvent::~AudioProcessingEvent()
}
JSObject*
AudioProcessingEvent::WrapObject(JSContext* aCx)
AudioProcessingEvent::WrapObjectInternal(JSContext* aCx)
{
return AudioProcessingEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -25,7 +25,7 @@ public:
NS_FORWARD_TO_EVENT
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AudioProcessingEvent, Event)
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
void InitEvent(AudioBuffer* aInputBuffer,
uint32_t aNumberOfInputChannels,

Просмотреть файл

@ -32,7 +32,7 @@ OfflineAudioCompletionEvent::~OfflineAudioCompletionEvent()
}
JSObject*
OfflineAudioCompletionEvent::WrapObject(JSContext* aCx)
OfflineAudioCompletionEvent::WrapObjectInternal(JSContext* aCx)
{
return OfflineAudioCompletionEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -26,7 +26,7 @@ public:
NS_FORWARD_TO_EVENT
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(OfflineAudioCompletionEvent, Event)
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
void InitEvent(AudioBuffer* aRenderedBuffer)
{

Просмотреть файл

@ -33,7 +33,7 @@ public:
// Forward to base class
NS_FORWARD_TO_UIEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return SVGZoomEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -12865,7 +12865,7 @@ class CGBindingImplClass(CGClass):
"""
Common codegen for generating a C++ implementation of a WebIDL interface
"""
def __init__(self, descriptor, cgMethod, cgGetter, cgSetter, wantGetParent=True):
def __init__(self, descriptor, cgMethod, cgGetter, cgSetter, wantGetParent=True, wrapMethodName="WrapObject"):
"""
cgMethod, cgGetter and cgSetter are classes used to codegen methods,
getters and setters.
@ -12988,7 +12988,7 @@ class CGBindingImplClass(CGClass):
wrapArgs = [Argument('JSContext*', 'aCx')]
self.methodDecls.insert(0,
ClassMethod("WrapObject", "JSObject*",
ClassMethod(wrapMethodName, "JSObject*",
wrapArgs, virtual=descriptor.wrapperCache,
breakAfterReturnDecl=" ",
override=descriptor.wrapperCache,
@ -14835,7 +14835,7 @@ class CGEventClass(CGBindingImplClass):
Codegen for the actual Event class implementation for this descriptor
"""
def __init__(self, descriptor):
CGBindingImplClass.__init__(self, descriptor, CGEventMethod, CGEventGetter, CGEventSetter, False)
CGBindingImplClass.__init__(self, descriptor, CGEventMethod, CGEventGetter, CGEventSetter, False, "WrapObjectInternal")
members = []
for m in descriptor.interface.members:
if m.isAttr():

Просмотреть файл

@ -33,7 +33,7 @@ public:
const AnimationEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return AnimationEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -24,7 +24,7 @@ public:
{
}
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return BeforeUnloadEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -30,7 +30,7 @@ public:
// Forward to base class
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return ClipboardEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -29,7 +29,7 @@ public:
// Forward to base class
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return CommandEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -27,7 +27,7 @@ public:
NS_FORWARD_TO_UIEVENT
NS_DECL_NSIDOMCOMPOSITIONEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return CompositionEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -53,7 +53,7 @@ CustomEvent::Constructor(const GlobalObject& aGlobal,
}
JSObject*
CustomEvent::WrapObject(JSContext* aCx)
CustomEvent::WrapObjectInternal(JSContext* aCx)
{
return mozilla::dom::CustomEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -38,7 +38,7 @@ public:
ErrorResult& aRv);
virtual JSObject*
WrapObject(JSContext* aCx) MOZ_OVERRIDE;
WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
void
GetDetail(JSContext* aCx,

Просмотреть файл

@ -31,7 +31,7 @@ public:
NS_DECL_NSIDOMDATACONTAINEREVENT
virtual JSObject*
WrapObject(JSContext* aCx) MOZ_OVERRIDE
WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return DataContainerEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -94,7 +94,7 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DeviceMotionEvent, Event)
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return DeviceMotionEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -30,7 +30,7 @@ public:
NS_FORWARD_TO_MOUSEEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return DragEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -64,9 +64,6 @@ Event::ConstructorInit(EventTarget* aOwner,
{
SetOwner(aOwner);
mIsMainThreadEvent = mOwner || NS_IsMainThread();
if (mIsMainThreadEvent) {
nsJSContext::LikelyShortLivingObjectCreated();
}
if (mIsMainThreadEvent && !sReturnHighResTimeStampIsSet) {
Preferences::AddBoolVarCache(&sReturnHighResTimeStamp,
@ -235,6 +232,22 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Event)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
JSObject*
Event::WrapObject(JSContext* aCx)
{
if (mIsMainThreadEvent && !GetWrapperPreserveColor()) {
nsJSContext::LikelyShortLivingObjectCreated();
}
return WrapObjectInternal(aCx);
}
JSObject*
Event::WrapObjectInternal(JSContext* aCx)
{
return EventBinding::Wrap(aCx, this);
}
bool
Event::IsChrome(JSContext* aCx) const
{

Просмотреть файл

@ -91,10 +91,9 @@ public:
return mOwner;
}
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
{
return EventBinding::Wrap(aCx, this);
}
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE MOZ_FINAL;
virtual JSObject* WrapObjectInternal(JSContext* aCx);
virtual ErrorEvent* AsErrorEvent()
{

Просмотреть файл

@ -23,7 +23,7 @@ public:
// Forward to base class
NS_FORWARD_TO_UIEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return FocusEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -31,7 +31,7 @@ public:
const InputEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return InputEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -36,7 +36,7 @@ public:
const KeyboardEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return KeyboardEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -57,7 +57,7 @@ MessageEvent::~MessageEvent()
}
JSObject*
MessageEvent::WrapObject(JSContext* aCx)
MessageEvent::WrapObjectInternal(JSContext* aCx)
{
return mozilla::dom::MessageEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -43,7 +43,7 @@ public:
// Forward to base class
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
void GetData(JSContext* aCx, JS::MutableHandle<JS::Value> aData,
ErrorResult& aRv);

Просмотреть файл

@ -30,7 +30,7 @@ public:
// Forward to base class
NS_FORWARD_TO_UIEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return MouseEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -29,7 +29,7 @@ public:
// Forward to base class
NS_FORWARD_TO_MOUSEEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return MouseScrollEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -30,7 +30,7 @@ public:
// Forward to base class
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return MutationEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -43,7 +43,7 @@ public:
NS_IMETHOD_(void) Serialize(IPC::Message* aMsg, bool aSerializeInterfaceType) MOZ_OVERRIDE;
NS_IMETHOD_(bool) Deserialize(const IPC::Message* aMsg, void** aIter) MOZ_OVERRIDE;
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return NotifyPaintEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -22,7 +22,7 @@ public:
nsPresContext* aPresContext,
WidgetPointerEvent* aEvent);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return PointerEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -38,7 +38,7 @@ public:
NS_IMETHOD_(void) Serialize(IPC::Message* aMsg, bool aSerializeInterfaceType) MOZ_OVERRIDE;
NS_IMETHOD_(bool) Deserialize(const IPC::Message* aMsg, void** aIter) MOZ_OVERRIDE;
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return ScrollAreaEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -30,7 +30,7 @@ public:
// Forward to base class
NS_FORWARD_TO_MOUSEEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return SimpleGestureEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -26,7 +26,7 @@ public:
const SpeechRecognitionErrorInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return mozilla::dom::SpeechRecognitionErrorBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -45,7 +45,7 @@ StorageEvent::AsStorageEvent()
}
JSObject*
StorageEvent::WrapObject(JSContext* aCx)
StorageEvent::WrapObjectInternal(JSContext* aCx)
{
return StorageEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -42,7 +42,7 @@ protected:
public:
virtual StorageEvent* AsStorageEvent();
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
static already_AddRefed<StorageEvent>
Constructor(EventTarget* aOwner, const nsAString& aType,

Просмотреть файл

@ -89,7 +89,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TouchEvent, UIEvent)
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return TouchEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -33,7 +33,7 @@ public:
const TransitionEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return TransitionEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -102,7 +102,7 @@ public:
const UIEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return UIEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -37,7 +37,7 @@ public:
const WheelEventInit& aParam,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return WheelEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -31,7 +31,7 @@ public:
// Forward our inherited virtual methods to the base class
NS_FORWARD_TO_UIEVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return XULCommandEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -96,7 +96,7 @@ NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
NS_INTERFACE_MAP_END_INHERITING(Event)
JSObject*
IDBVersionChangeEvent::WrapObject(JSContext* aCx)
IDBVersionChangeEvent::WrapObjectInternal(JSContext* aCx)
{
return IDBVersionChangeEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -104,7 +104,7 @@ public:
NS_FORWARD_TO_EVENT
virtual JSObject*
WrapObject(JSContext* aCx) MOZ_OVERRIDE;
WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE;
private:
IDBVersionChangeEvent(EventTarget* aOwner, uint64_t aOldVersion)

Просмотреть файл

@ -31,7 +31,7 @@ public:
// Forward to base class
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return TimeEventBinding::Wrap(aCx, this);
}

Просмотреть файл

@ -36,7 +36,7 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(InstallPhaseEvent, Event)
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return mozilla::dom::InstallPhaseEventBinding_workers::Wrap(aCx, this);
}
@ -88,7 +88,7 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(InstallEvent, InstallPhaseEvent)
NS_FORWARD_TO_EVENT
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE
virtual JSObject* WrapObjectInternal(JSContext* aCx) MOZ_OVERRIDE
{
return mozilla::dom::InstallEventBinding_workers::Wrap(aCx, this);
}