Bug 1461239 - Use InvalidateRenderedFrame() when necessary r=nical

This commit is contained in:
Sotaro Ikeda 2018-10-09 23:20:23 -04:00
parent 98d23e2b2a
commit 848aa7ecc5
6 changed files with 25 additions and 0 deletions

View File

@ -280,6 +280,8 @@ AsyncImagePipelineManager::UpdateImageKeys(const wr::Epoch& aEpoch,
}
if (aPipeline->mWrTextureWrapper) {
// Force frame rendering, since WebRenderTextureHost update its data outside of WebRender.
aMaybeFastTxn.InvalidateRenderedFrame();
HoldExternalImage(aPipelineId, aEpoch, aPipeline->mWrTextureWrapper);
}

View File

@ -1393,6 +1393,12 @@ WebRenderBridgeParent::RecvScheduleComposite()
if (mDestroyed) {
return IPC_OK();
}
// Force frame rendering during next frame generation.
wr::TransactionBuilder fastTxn(/* aUseSceneBuilderThread */ false);
fastTxn.InvalidateRenderedFrame();
mApi->SendTransaction(fastTxn);
ScheduleGenerateFrame();
return IPC_OK();
}

View File

@ -208,6 +208,12 @@ TransactionBuilder::GenerateFrame()
wr_transaction_generate_frame(mTxn);
}
void
TransactionBuilder::InvalidateRenderedFrame()
{
wr_transaction_invalidate_rendered_frame(mTxn);
}
void
TransactionBuilder::UpdateDynamicProperties(const nsTArray<wr::WrOpacityProperty>& aOpacityArray,
const nsTArray<wr::WrTransformProperty>& aTransformArray)

View File

@ -89,6 +89,8 @@ public:
void GenerateFrame();
void InvalidateRenderedFrame();
void UpdateDynamicProperties(const nsTArray<wr::WrOpacityProperty>& aOpacityArray,
const nsTArray<wr::WrTransformProperty>& aTransformArray);

View File

@ -1274,6 +1274,11 @@ pub extern "C" fn wr_transaction_generate_frame(txn: &mut Transaction) {
txn.generate_frame();
}
#[no_mangle]
pub extern "C" fn wr_transaction_invalidate_rendered_frame(txn: &mut Transaction) {
txn.invalidate_rendered_frame();
}
#[no_mangle]
pub extern "C" fn wr_transaction_update_dynamic_properties(
txn: &mut Transaction,

View File

@ -1820,6 +1820,10 @@ WR_INLINE
void wr_transaction_generate_frame(Transaction *aTxn)
WR_FUNC;
WR_INLINE
void wr_transaction_invalidate_rendered_frame(Transaction *aTxn)
WR_FUNC;
WR_INLINE
bool wr_transaction_is_empty(const Transaction *aTxn)
WR_FUNC;