Bug 1335335 - Manually call DidComposite() when transaction was dropped because of obsoleted command r=nical

The patch fixes a problem on windows. Before the patch, there was a case that moved tab was not re-rendered. When WebRenderBridgeParent reveived obsolted transaction, DidComposite() was not returned to a client side. It stopped nsRefreshDriver to trigger a next transaction.
This commit is contained in:
sotaro 2017-06-29 12:45:29 -07:00
parent 23d69372f5
commit 6cec97d16c
3 changed files with 13 additions and 3 deletions

View File

@ -130,6 +130,8 @@ public:
virtual void ObserveLayerUpdate(uint64_t aLayersId, uint64_t aEpoch, bool aActive) = 0;
virtual void DidComposite(uint64_t aId, TimeStamp& aCompositeStart, TimeStamp& aCompositeEnd) {}
virtual void NotifyDidCompositeToPipeline(const wr::PipelineId& aPipelineId, const wr::Epoch& aEpoch, TimeStamp& aCompositeStart, TimeStamp& aCompositeEnd) {}
// HostIPCAllocator
@ -562,6 +564,7 @@ protected:
*/
bool CanComposite();
using CompositorBridgeParentBase::DidComposite;
void DidComposite(TimeStamp& aCompositeStart, TimeStamp& aCompositeEnd);
virtual void NotifyDidCompositeToPipeline(const wr::PipelineId& aPipelineId, const wr::Epoch& aEpoch, TimeStamp& aCompositeStart, TimeStamp& aCompositeEnd) override;

View File

@ -107,9 +107,9 @@ public:
virtual AsyncCompositionManager* GetCompositionManager(LayerTransactionParent* aParent) override;
virtual mozilla::ipc::IPCResult RecvRemotePluginsReady() override { return IPC_FAIL_NO_REASON(this); }
void DidComposite(uint64_t aId,
TimeStamp& aCompositeStart,
TimeStamp& aCompositeEnd);
virtual void DidComposite(uint64_t aId,
TimeStamp& aCompositeStart,
TimeStamp& aCompositeEnd) override;
virtual PTextureParent* AllocPTextureParent(const SurfaceDescriptor& aSharedData,
const LayersBackend& aLayersBackend,

View File

@ -422,6 +422,13 @@ WebRenderBridgeParent::HandleDPEnd(const gfx::IntSize& aSize,
mScrollData = aScrollData;
UpdateAPZ();
if (mIdNameSpace != aIdNameSpace) {
// Pretend we composited since someone is wating for this event,
// though DisplayList was not pushed to webrender.
TimeStamp now = TimeStamp::Now();
mCompositorBridge->DidComposite(wr::AsUint64(mPipelineId), now, now);
}
}
CompositorBridgeParent*