Commit b016481d authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

Fix resource leak on macOS

Bug: 1143042
Change-Id: I70e3c4757e7f1e48a0df30495bffc99b2a9336f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2505675
Commit-Queue: Peng Huang <penghuang@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Auto-Submit: Peng Huang <penghuang@chromium.org>
Reviewed-by: default avatarVasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821871}
parent 9335cb1c
...@@ -966,16 +966,13 @@ DisplayResourceProvider::ScopedReadLockSharedImage::ScopedReadLockSharedImage( ...@@ -966,16 +966,13 @@ DisplayResourceProvider::ScopedReadLockSharedImage::ScopedReadLockSharedImage(
DisplayResourceProvider::ScopedReadLockSharedImage:: DisplayResourceProvider::ScopedReadLockSharedImage::
~ScopedReadLockSharedImage() { ~ScopedReadLockSharedImage() {
if (!resource_provider_) Reset();
return;
DCHECK(resource_->lock_for_overlay_count);
resource_->lock_for_overlay_count--;
resource_provider_->TryReleaseResource(resource_id_, resource_);
} }
DisplayResourceProvider::ScopedReadLockSharedImage& DisplayResourceProvider::ScopedReadLockSharedImage&
DisplayResourceProvider::ScopedReadLockSharedImage::operator=( DisplayResourceProvider::ScopedReadLockSharedImage::operator=(
ScopedReadLockSharedImage&& other) { ScopedReadLockSharedImage&& other) {
Reset();
resource_provider_ = other.resource_provider_; resource_provider_ = other.resource_provider_;
resource_id_ = other.resource_id_; resource_id_ = other.resource_id_;
resource_ = other.resource_; resource_ = other.resource_;
...@@ -985,6 +982,17 @@ DisplayResourceProvider::ScopedReadLockSharedImage::operator=( ...@@ -985,6 +982,17 @@ DisplayResourceProvider::ScopedReadLockSharedImage::operator=(
return *this; return *this;
} }
void DisplayResourceProvider::ScopedReadLockSharedImage::Reset() {
if (!resource_provider_)
return;
DCHECK(resource_->lock_for_overlay_count);
resource_->lock_for_overlay_count--;
resource_provider_->TryReleaseResource(resource_id_, resource_);
resource_provider_ = nullptr;
resource_id_ = kInvalidResourceId;
resource_ = nullptr;
}
DisplayResourceProvider::LockSetForExternalUse::LockSetForExternalUse( DisplayResourceProvider::LockSetForExternalUse::LockSetForExternalUse(
DisplayResourceProvider* resource_provider, DisplayResourceProvider* resource_provider,
ExternalUseClient* client) ExternalUseClient* client)
......
...@@ -237,9 +237,11 @@ class VIZ_SERVICE_EXPORT DisplayResourceProvider ...@@ -237,9 +237,11 @@ class VIZ_SERVICE_EXPORT DisplayResourceProvider
} }
private: private:
DisplayResourceProvider* resource_provider_; void Reset();
ResourceId resource_id_;
ChildResource* resource_; DisplayResourceProvider* resource_provider_ = nullptr;
ResourceId resource_id_ = kInvalidResourceId;
ChildResource* resource_ = nullptr;
}; };
// Maintains set of resources locked for external use by SkiaRenderer. // Maintains set of resources locked for external use by SkiaRenderer.
......
...@@ -756,7 +756,7 @@ void SkiaRenderer::SwapBuffersSkipped() { ...@@ -756,7 +756,7 @@ void SkiaRenderer::SwapBuffersSkipped() {
} }
void SkiaRenderer::SwapBuffersComplete() { void SkiaRenderer::SwapBuffersComplete() {
// Right now, only macOS needs to return maliboxes of released overlays, so // Right now, only macOS needs to return mailboxes of released overlays, so
// we should not release |committed_overlay_locks_| here. The resources in it // we should not release |committed_overlay_locks_| here. The resources in it
// will be released by DidReceiveReleasedOverlays() later. // will be released by DidReceiveReleasedOverlays() later.
#if defined(OS_APPLE) #if defined(OS_APPLE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment