Bug 1651087 - Check if the session is ended before processing XRSession::StartFrame() r=kip,daoshengmu

Differential Revision: https://phabricator.services.mozilla.com/D82556
This commit is contained in:
Imanol Fernandez 2020-07-07 21:52:56 +00:00
Родитель 8a563af888
Коммит f17da90522
1 изменённых файлов: 7 добавлений и 3 удалений

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

@ -292,9 +292,13 @@ void XRSession::WillRefresh(mozilla::TimeStamp aTime) {
} }
void XRSession::StartFrame() { void XRSession::StartFrame() {
if (mShutdown || mEnded) {
return;
}
ApplyPendingRenderState(); ApplyPendingRenderState();
if (mActiveRenderState->GetBaseLayer() == nullptr) { XRWebGLLayer* baseLayer = mActiveRenderState->GetBaseLayer();
if (!baseLayer) {
return; return;
} }
@ -311,7 +315,7 @@ void XRSession::StartFrame() {
RefPtr<XRFrame> frame = PooledFrame(); RefPtr<XRFrame> frame = PooledFrame();
frame->StartAnimationFrame(); frame->StartAnimationFrame();
mActiveRenderState->GetBaseLayer()->StartAnimationFrame(); baseLayer->StartAnimationFrame();
nsTArray<XRFrameRequest> callbacks; nsTArray<XRFrameRequest> callbacks;
callbacks.AppendElements(mFrameRequestCallbacks); callbacks.AppendElements(mFrameRequestCallbacks);
mFrameRequestCallbacks.Clear(); mFrameRequestCallbacks.Clear();
@ -319,7 +323,7 @@ void XRSession::StartFrame() {
callback.Call(timeStamp, *frame); callback.Call(timeStamp, *frame);
} }
mActiveRenderState->GetBaseLayer()->EndAnimationFrame(); baseLayer->EndAnimationFrame();
frame->EndAnimationFrame(); frame->EndAnimationFrame();
if (mDisplayPresentation) { if (mDisplayPresentation) {
mDisplayPresentation->SubmitFrame(); mDisplayPresentation->SubmitFrame();