Bug 1222867 - part 2 - be smarter about transferring ownership of WebSocketFrame; r=mcmanus

WebSocketFrames are created only to be transferred in to
WebSocketEventService::Frame{Sent,Received}, where a strong reference is
taken to them by a runnable posted to the main thread.  Let's avoid an
extra AddRef/Release cycle by passing through already_AddRefed
structures.
This commit is contained in:
Nathan Froyd
2015-11-08 20:52:27 -05:00
parent 1f97fb199d
commit 4ada092d17
4 changed files with 19 additions and 18 deletions

View File

@@ -1698,7 +1698,7 @@ WebSocketChannel::ProcessInput(uint8_t *buffer, uint32_t count)
opcode, maskBit, mask, utf8Data);
if (frame) {
mService->FrameReceived(mSerial, mInnerWindowID, frame);
mService->FrameReceived(mSerial, mInnerWindowID, frame.forget());
}
mTargetThread->Dispatch(new CallOnMessageAvailable(this, utf8Data, -1),
@@ -1757,8 +1757,7 @@ WebSocketChannel::ProcessInput(uint8_t *buffer, uint32_t count)
if (frame) {
// We send the frame immediately becuase we want to have it dispatched
// before the CallOnServerClose.
mService->FrameReceived(mSerial, mInnerWindowID, frame);
frame = nullptr;
mService->FrameReceived(mSerial, mInnerWindowID, frame.forget());
}
if (mListenerMT) {
@@ -1797,7 +1796,7 @@ WebSocketChannel::ProcessInput(uint8_t *buffer, uint32_t count)
}
if (frame) {
mService->FrameReceived(mSerial, mInnerWindowID, frame);
mService->FrameReceived(mSerial, mInnerWindowID, frame.forget());
}
} else if (opcode == nsIWebSocketFrame::OPCODE_BINARY) {
bool isDeflated = mPMCECompressor && mPMCECompressor->IsMessageDeflated();
@@ -1826,7 +1825,7 @@ WebSocketChannel::ProcessInput(uint8_t *buffer, uint32_t count)
mService->CreateFrameIfNeeded(finBit, rsvBit1, rsvBit2, rsvBit3,
opcode, maskBit, mask, binaryData);
if (frame) {
mService->FrameReceived(mSerial, mInnerWindowID, frame);
mService->FrameReceived(mSerial, mInnerWindowID, frame.forget());
}
mTargetThread->Dispatch(
@@ -2185,7 +2184,7 @@ WebSocketChannel::PrimeNewOutgoingMessage()
mCurrentOut->OrigLength());
if (frame) {
mService->FrameSent(mSerial, mInnerWindowID, frame);
mService->FrameSent(mSerial, mInnerWindowID, frame.forget());
}
while (payload < (mOutHeader + mHdrOutToSend)) {