mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 20:30:41 +00:00
Bug 1253424 - part 1 - add a already_AddRefed nsTransactionStack::Push overload; r=erahm
We unnecessarily refcount in several places when pushing items onto an nsTransactionStack. Adding an already_AddRefed overload will enable avoid those unnecessary refcounts.
This commit is contained in:
parent
bd4c88439b
commit
d422cbba4b
@ -237,7 +237,7 @@ nsTransactionItem::UndoChildren(nsTransactionManager *aTxMgr)
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
item = mUndoStack->Pop();
|
||||
mRedoStack->Push(item);
|
||||
mRedoStack->Push(item.forget());
|
||||
}
|
||||
|
||||
nsresult result2 = aTxMgr->DidUndoNotify(t, result);
|
||||
@ -310,7 +310,7 @@ nsTransactionItem::RedoChildren(nsTransactionManager *aTxMgr)
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
item = mRedoStack->Pop();
|
||||
mUndoStack->Push(item);
|
||||
mUndoStack->Push(item.forget());
|
||||
}
|
||||
|
||||
nsresult result2 = aTxMgr->DidUndoNotify(t, result);
|
||||
|
@ -135,7 +135,7 @@ nsTransactionManager::UndoTransaction()
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
tx = mUndoStack.Pop();
|
||||
mRedoStack.Push(tx);
|
||||
mRedoStack.Push(tx.forget());
|
||||
}
|
||||
|
||||
nsresult result2 = DidUndoNotify(t, result);
|
||||
@ -188,7 +188,7 @@ nsTransactionManager::RedoTransaction()
|
||||
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
tx = mRedoStack.Pop();
|
||||
mUndoStack.Push(tx);
|
||||
mUndoStack.Push(tx.forget());
|
||||
}
|
||||
|
||||
nsresult result2 = DidRedoNotify(t, result);
|
||||
@ -898,7 +898,7 @@ nsTransactionManager::EndTransaction(bool aAllowEmpty)
|
||||
|
||||
// Push the transaction on the undo stack:
|
||||
|
||||
mUndoStack.Push(tx);
|
||||
mUndoStack.Push(tx.forget());
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -29,7 +29,23 @@ nsTransactionStack::Push(nsTransactionItem *aTransaction)
|
||||
}
|
||||
|
||||
// The stack's bottom is the front of the deque, and the top is the back.
|
||||
mDeque.push_back(aTransaction);
|
||||
RefPtr<nsTransactionItem> item(aTransaction);
|
||||
Push(item.forget());
|
||||
}
|
||||
|
||||
void
|
||||
nsTransactionStack::Push(already_AddRefed<nsTransactionItem> aTransaction)
|
||||
{
|
||||
RefPtr<nsTransactionItem> item(aTransaction);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
// XXX we really want to use emplace_back here, but we don't have a
|
||||
// C++11 stdlib everywhere.
|
||||
RefPtr<nsTransactionItem> dummy;
|
||||
auto pushedItem = mDeque.insert(mDeque.end(), dummy);
|
||||
*pushedItem = item.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<nsTransactionItem>
|
||||
|
@ -21,6 +21,7 @@ public:
|
||||
~nsTransactionStack();
|
||||
|
||||
void Push(nsTransactionItem *aTransactionItem);
|
||||
void Push(already_AddRefed<nsTransactionItem> aTransactionItem);
|
||||
already_AddRefed<nsTransactionItem> Pop();
|
||||
already_AddRefed<nsTransactionItem> PopBottom();
|
||||
already_AddRefed<nsTransactionItem> Peek();
|
||||
|
Loading…
x
Reference in New Issue
Block a user