icecat: add release icecat-140.10.1-1gnu1 for ecne
This commit is contained in:
parent
a5f93cb214
commit
ff85d7c623
1256 changed files with 63469 additions and 24141 deletions
|
|
@ -84,7 +84,7 @@ class ShmemTextureData : public BufferTextureData {
|
|||
LayersBackend aLayersBackend,
|
||||
TextureFlags aFlags,
|
||||
TextureAllocationFlags aAllocFlags,
|
||||
IShmemAllocator* aAllocator);
|
||||
LayersIPCChannel* aAllocator);
|
||||
|
||||
virtual TextureData* CreateSimilar(
|
||||
LayersIPCChannel* aAllocator, LayersBackend aLayersBackend,
|
||||
|
|
@ -95,25 +95,55 @@ class ShmemTextureData : public BufferTextureData {
|
|||
|
||||
virtual void Deallocate(LayersIPCChannel* aAllocator) override;
|
||||
|
||||
class ShmemHolder final {
|
||||
public:
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ShmemHolder)
|
||||
|
||||
ShmemHolder(LayersIPCChannel* aAllocator, mozilla::ipc::Shmem aShmem)
|
||||
: mAllocator(aAllocator), mShmem(std::move(aShmem)) {}
|
||||
mozilla::ipc::Shmem& GetShmem() { return mShmem; }
|
||||
void SetDeallocShmem() { mDeallocShmem = true; }
|
||||
|
||||
const RefPtr<LayersIPCChannel> mAllocator;
|
||||
|
||||
protected:
|
||||
~ShmemHolder() {
|
||||
if (mDeallocShmem) {
|
||||
mAllocator->DeallocShmem(mShmem);
|
||||
}
|
||||
}
|
||||
|
||||
mozilla::ipc::Shmem mShmem;
|
||||
mozilla::Atomic<bool> mDeallocShmem{false};
|
||||
};
|
||||
|
||||
ShmemTextureData(const BufferDescriptor& aDesc,
|
||||
gfx::BackendType aMoz2DBackend, mozilla::ipc::Shmem aShmem)
|
||||
: BufferTextureData(aDesc, aMoz2DBackend), mShmem(aShmem) {
|
||||
MOZ_ASSERT(mShmem.Size<uint8_t>());
|
||||
gfx::BackendType aMoz2DBackend, RefPtr<ShmemHolder>& aShmemHolder)
|
||||
: BufferTextureData(aDesc, aMoz2DBackend), mShmemHolder(aShmemHolder) {
|
||||
MOZ_ASSERT(mShmemHolder);
|
||||
MOZ_ASSERT(mShmemHolder->GetShmem().Size<uint8_t>());
|
||||
}
|
||||
|
||||
virtual uint8_t* GetBuffer() override { return mShmem.get<uint8_t>(); }
|
||||
virtual uint8_t* GetBuffer() override {
|
||||
return mShmemHolder->GetShmem().get<uint8_t>();
|
||||
}
|
||||
|
||||
virtual size_t GetBufferSize() override { return mShmem.Size<uint8_t>(); }
|
||||
virtual size_t GetBufferSize() override {
|
||||
return mShmemHolder->GetShmem().Size<uint8_t>();
|
||||
}
|
||||
|
||||
virtual void OnBorrowDrawTarget(gfx::DrawTarget* aDrawTarget) override;
|
||||
|
||||
protected:
|
||||
mozilla::ipc::Shmem mShmem;
|
||||
const RefPtr<ShmemHolder> mShmemHolder;
|
||||
gfx::UserDataKey mShmemHolderKey = {0};
|
||||
};
|
||||
|
||||
BufferTextureData* BufferTextureData::Create(
|
||||
gfx::IntSize aSize, gfx::SurfaceFormat aFormat,
|
||||
gfx::BackendType aMoz2DBackend, LayersBackend aLayersBackend,
|
||||
TextureFlags aFlags, TextureAllocationFlags aAllocFlags,
|
||||
mozilla::ipc::IShmemAllocator* aAllocator, bool aIsSameProcess) {
|
||||
LayersIPCChannel* aAllocator, bool aIsSameProcess) {
|
||||
if (!aAllocator || aIsSameProcess) {
|
||||
return MemoryTextureData::Create(aSize, aFormat, aMoz2DBackend,
|
||||
aLayersBackend, aFlags, aAllocFlags,
|
||||
|
|
@ -144,7 +174,9 @@ BufferTextureData* BufferTextureData::CreateInternal(
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
return new ShmemTextureData(aDesc, aMoz2DBackend, shm);
|
||||
RefPtr<ShmemTextureData::ShmemHolder> shmemHolder =
|
||||
new ShmemTextureData::ShmemHolder(aAllocator, shm);
|
||||
return new ShmemTextureData(aDesc, aMoz2DBackend, shmemHolder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -175,8 +207,8 @@ BufferTextureData* BufferTextureData::CreateForYCbCr(
|
|||
aYUVColorSpace, aColorRange, aSubsampling);
|
||||
|
||||
return CreateInternal(
|
||||
aAllocator ? aAllocator->GetTextureForwarder() : nullptr, descriptor,
|
||||
gfx::BackendType::NONE, bufSize, aTextureFlags);
|
||||
aAllocator ? aAllocator->GetTextureForwarder().get() : nullptr,
|
||||
descriptor, gfx::BackendType::NONE, bufSize, aTextureFlags);
|
||||
}
|
||||
|
||||
void BufferTextureData::FillInfo(TextureData::Info& aInfo) const {
|
||||
|
|
@ -240,6 +272,35 @@ gfx::SurfaceFormat BufferTextureData::GetFormat() const {
|
|||
return ImageDataSerializer::FormatFromBufferDescriptor(mDescriptor);
|
||||
}
|
||||
|
||||
struct ShmemHolderUserData {
|
||||
explicit ShmemHolderUserData(ShmemTextureData::ShmemHolder* aShmemHolder)
|
||||
: mShmemHolder(aShmemHolder) {}
|
||||
~ShmemHolderUserData() {}
|
||||
RefPtr<ShmemTextureData::ShmemHolder> mShmemHolder;
|
||||
};
|
||||
|
||||
void DeleteShmemHolderUserData(void* aClosure) {
|
||||
ShmemHolderUserData* data = reinterpret_cast<ShmemHolderUserData*>(aClosure);
|
||||
auto* eventTarget = data->mShmemHolder->mAllocator->GetThread();
|
||||
|
||||
if (!eventTarget->IsOnCurrentThread()) {
|
||||
RefPtr<Runnable> runnable =
|
||||
NS_NewRunnableFunction("DeleteShmemHolderUserData::Runnable",
|
||||
[wrapper = std::move(data->mShmemHolder)]() {});
|
||||
eventTarget->Dispatch(runnable.forget());
|
||||
}
|
||||
|
||||
delete data;
|
||||
}
|
||||
|
||||
void ShmemTextureData::OnBorrowDrawTarget(gfx::DrawTarget* aDrawTarget) {
|
||||
if (!aDrawTarget) {
|
||||
return;
|
||||
}
|
||||
auto* data = new ShmemHolderUserData(mShmemHolder);
|
||||
aDrawTarget->AddUserData(&mShmemHolderKey, data, DeleteShmemHolderUserData);
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget> BufferTextureData::BorrowDrawTarget() {
|
||||
if (mDescriptor.type() != BufferDescriptor::TRGBDescriptor) {
|
||||
return nullptr;
|
||||
|
|
@ -477,8 +538,8 @@ bool ShmemTextureData::Serialize(SurfaceDescriptor& aOutDescriptor) {
|
|||
return false;
|
||||
}
|
||||
|
||||
aOutDescriptor =
|
||||
SurfaceDescriptorBuffer(mDescriptor, MemoryOrShmem(std::move(mShmem)));
|
||||
aOutDescriptor = SurfaceDescriptorBuffer(
|
||||
mDescriptor, MemoryOrShmem(mShmemHolder->GetShmem()));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -489,10 +550,11 @@ ShmemTextureData* ShmemTextureData::Create(gfx::IntSize aSize,
|
|||
LayersBackend aLayersBackend,
|
||||
TextureFlags aFlags,
|
||||
TextureAllocationFlags aAllocFlags,
|
||||
IShmemAllocator* aAllocator) {
|
||||
LayersIPCChannel* aAllocator) {
|
||||
MOZ_ASSERT(aAllocator);
|
||||
// Should have used CreateForYCbCr.
|
||||
MOZ_ASSERT(aFormat != gfx::SurfaceFormat::YUV420);
|
||||
MOZ_ASSERT(!(aFlags & TextureFlags::DEALLOCATE_CLIENT));
|
||||
|
||||
if (!aAllocator) {
|
||||
return nullptr;
|
||||
|
|
@ -520,8 +582,9 @@ ShmemTextureData* ShmemTextureData::Create(gfx::IntSize aSize,
|
|||
}
|
||||
|
||||
BufferDescriptor descriptor = RGBDescriptor(aSize, aFormat);
|
||||
|
||||
return new ShmemTextureData(descriptor, aMoz2DBackend, shm);
|
||||
RefPtr<ShmemTextureData::ShmemHolder> shmemHolder =
|
||||
new ShmemTextureData::ShmemHolder(aAllocator, shm);
|
||||
return new ShmemTextureData(descriptor, aMoz2DBackend, shmemHolder);
|
||||
}
|
||||
|
||||
TextureData* ShmemTextureData::CreateSimilar(
|
||||
|
|
@ -537,7 +600,8 @@ void ShmemTextureData::Deallocate(LayersIPCChannel* aAllocator) {
|
|||
gfxCriticalNote << "No allocator in ShmemTextureData::Deallocate";
|
||||
return;
|
||||
}
|
||||
aAllocator->DeallocShmem(mShmem);
|
||||
MOZ_ASSERT(aAllocator == mShmemHolder->mAllocator);
|
||||
mShmemHolder->SetDeallocShmem();
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue