icecat: add release icecat-140.10.1-1gnu1 for ecne

This commit is contained in:
Ark74 2026-05-04 16:58:41 -06:00
parent a5f93cb214
commit ff85d7c623
1256 changed files with 63469 additions and 24141 deletions

View file

@ -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