forked from mirrors/gecko-dev
Bug 1875528 - Part 2: Break the strong reference cycle between WebGPUChild and CanvasManagerChild, r=webgpu-reviewers,nical
The strong reference from CanvasManagerChild to WebGPUChild was never cleared when the WebGPUChild dies, meaning that it would form a strong cycle through the `Manager()` reference. Under the new system, the WebGPUChild actor is kept alive by the IPC connection, and will be torn down when the IPC connection dies. Differential Revision: https://phabricator.services.mozilla.com/D198625
This commit is contained in:
parent
1b28f9f085
commit
f3ebfed97b
2 changed files with 7 additions and 7 deletions
|
|
@ -207,14 +207,15 @@ RefPtr<layers::CanvasChild> CanvasManagerChild::GetCanvasChild() {
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<webgpu::WebGPUChild> CanvasManagerChild::GetWebGPUChild() {
|
RefPtr<webgpu::WebGPUChild> CanvasManagerChild::GetWebGPUChild() {
|
||||||
if (!mWebGPUChild) {
|
if (PWebGPUChild* actor = LoneManagedOrNullAsserts(ManagedPWebGPUChild())) {
|
||||||
mWebGPUChild = MakeAndAddRef<webgpu::WebGPUChild>();
|
return static_cast<webgpu::WebGPUChild*>(actor);
|
||||||
if (!SendPWebGPUConstructor(mWebGPUChild)) {
|
|
||||||
mWebGPUChild = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mWebGPUChild;
|
auto actor = MakeRefPtr<webgpu::WebGPUChild>();
|
||||||
|
if (!SendPWebGPUConstructor(actor)) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
layers::ActiveResourceTracker* CanvasManagerChild::GetActiveResourceTracker() {
|
layers::ActiveResourceTracker* CanvasManagerChild::GetActiveResourceTracker() {
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,6 @@ class CanvasManagerChild final : public PCanvasManagerChild {
|
||||||
|
|
||||||
RefPtr<mozilla::dom::ThreadSafeWorkerRef> mWorkerRef;
|
RefPtr<mozilla::dom::ThreadSafeWorkerRef> mWorkerRef;
|
||||||
RefPtr<layers::CanvasChild> mCanvasChild;
|
RefPtr<layers::CanvasChild> mCanvasChild;
|
||||||
RefPtr<webgpu::WebGPUChild> mWebGPUChild;
|
|
||||||
UniquePtr<layers::ActiveResourceTracker> mActiveResourceTracker;
|
UniquePtr<layers::ActiveResourceTracker> mActiveResourceTracker;
|
||||||
const uint32_t mId;
|
const uint32_t mId;
|
||||||
bool mActive = true;
|
bool mActive = true;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue