Bug 1498092 - Add necessary forced frame rendering r=nical

This commit is contained in:
sotaro 2018-10-15 20:28:01 +09:00
Родитель 73f65236b3
Коммит 2dae3826d6
3 изменённых файлов: 17 добавлений и 4 удалений

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

@ -645,7 +645,7 @@ mozilla::ipc::IPCResult
CompositorBridgeParent::RecvForcePresent() CompositorBridgeParent::RecvForcePresent()
{ {
if (mWrBridge) { if (mWrBridge) {
mWrBridge->ScheduleGenerateFrame(); mWrBridge->ScheduleForcedGenerateFrame();
} }
// During the shutdown sequence mLayerManager may be null // During the shutdown sequence mLayerManager may be null
if (mLayerManager) { if (mLayerManager) {

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

@ -1389,18 +1389,23 @@ WebRenderBridgeParent::UpdateWebRender(CompositorVsyncScheduler* aScheduler,
mozilla::ipc::IPCResult mozilla::ipc::IPCResult
WebRenderBridgeParent::RecvScheduleComposite() WebRenderBridgeParent::RecvScheduleComposite()
{
ScheduleGenerateFrame();
return IPC_OK();
}
void
WebRenderBridgeParent::ScheduleForcedGenerateFrame()
{ {
if (mDestroyed) { if (mDestroyed) {
return IPC_OK(); return;
} }
// Force frame rendering during next frame generation.
wr::TransactionBuilder fastTxn(/* aUseSceneBuilderThread */ false); wr::TransactionBuilder fastTxn(/* aUseSceneBuilderThread */ false);
fastTxn.InvalidateRenderedFrame(); fastTxn.InvalidateRenderedFrame();
mApi->SendTransaction(fastTxn); mApi->SendTransaction(fastTxn);
ScheduleGenerateFrame(); ScheduleGenerateFrame();
return IPC_OK();
} }
mozilla::ipc::IPCResult mozilla::ipc::IPCResult

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

@ -186,6 +186,14 @@ public:
*/ */
void ScheduleGenerateFrame(); void ScheduleGenerateFrame();
/**
* Schedule forced frame rendering at next composite timing.
*
* WebRender could skip frame rendering if there is no update.
* This function is used to force rendering even when there is not update.
*/
void ScheduleForcedGenerateFrame();
wr::Epoch UpdateWebRender(CompositorVsyncScheduler* aScheduler, wr::Epoch UpdateWebRender(CompositorVsyncScheduler* aScheduler,
wr::WebRenderAPI* aApi, wr::WebRenderAPI* aApi,
AsyncImagePipelineManager* aImageMgr, AsyncImagePipelineManager* aImageMgr,