120 lines
2.4 KiB
C++
120 lines
2.4 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "CompositableChild.h"
|
|
#include "CompositableClient.h"
|
|
|
|
namespace mozilla {
|
|
namespace layers {
|
|
|
|
/* static */ PCompositableChild*
|
|
CompositableChild::CreateActor()
|
|
{
|
|
CompositableChild* child = new CompositableChild();
|
|
child->AddRef();
|
|
return child;
|
|
}
|
|
|
|
/* static */ void
|
|
CompositableChild::DestroyActor(PCompositableChild* aChild)
|
|
{
|
|
static_cast<CompositableChild*>(aChild)->Release();
|
|
}
|
|
|
|
CompositableChild::CompositableChild()
|
|
: mCompositableClient(nullptr),
|
|
mAsyncID(0),
|
|
mCanSend(true)
|
|
{
|
|
MOZ_COUNT_CTOR(CompositableChild);
|
|
}
|
|
|
|
CompositableChild::~CompositableChild()
|
|
{
|
|
MOZ_COUNT_DTOR(CompositableChild);
|
|
}
|
|
|
|
bool
|
|
CompositableChild::IsConnected() const
|
|
{
|
|
return mCompositableClient && mCanSend;
|
|
}
|
|
|
|
void
|
|
CompositableChild::Init(CompositableClient* aCompositable, uint64_t aAsyncID)
|
|
{
|
|
mCompositableClient = aCompositable;
|
|
mAsyncID = aAsyncID;
|
|
}
|
|
|
|
void
|
|
CompositableChild::RevokeCompositableClient()
|
|
{
|
|
mCompositableClient = nullptr;
|
|
}
|
|
|
|
RefPtr<CompositableClient>
|
|
CompositableChild::GetCompositableClient()
|
|
{
|
|
return mCompositableClient;
|
|
}
|
|
|
|
void
|
|
CompositableChild::ActorDestroy(ActorDestroyReason)
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread());
|
|
|
|
mCanSend = false;
|
|
|
|
if (mCompositableClient) {
|
|
mCompositableClient->mCompositableChild = nullptr;
|
|
mCompositableClient = nullptr;
|
|
}
|
|
}
|
|
|
|
/* static */ PCompositableChild*
|
|
AsyncCompositableChild::CreateActor()
|
|
{
|
|
AsyncCompositableChild* child = new AsyncCompositableChild();
|
|
child->AddRef();
|
|
return child;
|
|
}
|
|
|
|
AsyncCompositableChild::AsyncCompositableChild()
|
|
: mLock("AsyncCompositableChild.mLock")
|
|
{
|
|
}
|
|
|
|
AsyncCompositableChild::~AsyncCompositableChild()
|
|
{
|
|
}
|
|
|
|
void
|
|
AsyncCompositableChild::ActorDestroy(ActorDestroyReason)
|
|
{
|
|
mCanSend = false;
|
|
|
|
// We do not revoke CompositableClient::mCompositableChild here, since that
|
|
// could race with the main thread.
|
|
RevokeCompositableClient();
|
|
}
|
|
|
|
void
|
|
AsyncCompositableChild::RevokeCompositableClient()
|
|
{
|
|
MutexAutoLock lock(mLock);
|
|
mCompositableClient = nullptr;
|
|
}
|
|
|
|
RefPtr<CompositableClient>
|
|
AsyncCompositableChild::GetCompositableClient()
|
|
{
|
|
MutexAutoLock lock(mLock);
|
|
return CompositableChild::GetCompositableClient();
|
|
}
|
|
|
|
} // namespace layers
|
|
} // namespace mozilla
|