Bug 1127270: Only acquire a hold on the compositor thread once the channel for a parent actor has been succesfully connected. r=nical

This commit is contained in:
Bas Schouten 2015-09-11 15:24:46 +02:00
parent 47268649ef
commit 9fcfcb0de7
3 changed files with 11 additions and 2 deletions

View File

@ -1636,7 +1636,6 @@ class CrossProcessCompositorParent final : public PCompositorParent,
public:
explicit CrossProcessCompositorParent(Transport* aTransport)
: mTransport(aTransport)
, mCompositorThreadHolder(sCompositorThreadHolder)
, mNotifyAfterRemotePaint(false)
{
MOZ_ASSERT(NS_IsMainThread());
@ -1726,6 +1725,8 @@ public:
TimeStamp& aCompositeStart,
TimeStamp& aCompositeEnd);
protected:
void OnChannelConnected(int32_t pid) override { mCompositorThreadHolder = sCompositorThreadHolder; }
private:
// Private destructor, to discourage deletion outside of Release():
virtual ~CrossProcessCompositorParent();

View File

@ -58,7 +58,6 @@ ImageBridgeParent::ImageBridgeParent(MessageLoop* aLoop,
: mMessageLoop(aLoop)
, mTransport(aTransport)
, mSetChildThreadPriority(false)
, mCompositorThreadHolder(GetCompositorThreadHolder())
{
MOZ_ASSERT(NS_IsMainThread());
sMainLoop = MessageLoop::current();
@ -385,6 +384,12 @@ ImageBridgeParent::CloneToplevel(const InfallibleTArray<ProtocolFdMapping>& aFds
return nullptr;
}
void
ImageBridgeParent::OnChannelConnected(int32_t aPid)
{
mCompositorThreadHolder = GetCompositorThreadHolder();
}
bool ImageBridgeParent::IsSameProcess() const
{
return OtherPid() == base::GetCurrentProcId();

View File

@ -151,6 +151,9 @@ public:
base::ProcessHandle aPeerProcess,
mozilla::ipc::ProtocolCloneContext* aCtx) override;
protected:
void OnChannelConnected(int32_t pid) override;
private:
void DeferredDestroy();
MessageLoop* mMessageLoop;