Commit 337f4112 authored by Antoine Labour's avatar Antoine Labour Committed by Commit Bot

Flush after destroying staging buffers

This is to ensure the memory is properly released on the GPU process side.

Bug: 905495
Change-Id: I152494878a602e748eefb29f0f91f364e6752e42
Reviewed-on: https://chromium-review.googlesource.com/c/1347355
Commit-Queue: Jonathan Backer <backer@chromium.org>
Reviewed-by: default avatarJonathan Backer <backer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611318}
parent 17f95119
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "cc/base/container_util.h" #include "cc/base/container_util.h"
#include "components/viz/common/gpu/raster_context_provider.h" #include "components/viz/common/gpu/raster_context_provider.h"
#include "components/viz/common/resources/resource_sizes.h" #include "components/viz/common/resources/resource_sizes.h"
#include "gpu/command_buffer/client/context_support.h"
#include "gpu/command_buffer/client/raster_interface.h" #include "gpu/command_buffer/client/raster_interface.h"
#include "gpu/command_buffer/client/shared_image_interface.h" #include "gpu/command_buffer/client/shared_image_interface.h"
#include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2.h"
...@@ -398,12 +399,14 @@ void StagingBufferPool::ReleaseBuffersNotUsedSince(base::TimeTicks time) { ...@@ -398,12 +399,14 @@ void StagingBufferPool::ReleaseBuffersNotUsedSince(base::TimeTicks time) {
worker_context_provider_->SharedImageInterface(); worker_context_provider_->SharedImageInterface();
DCHECK(sii); DCHECK(sii);
bool destroyed_buffers = false;
// Note: Front buffer is guaranteed to be LRU so we can stop releasing // Note: Front buffer is guaranteed to be LRU so we can stop releasing
// buffers as soon as we find a buffer that has been used since |time|. // buffers as soon as we find a buffer that has been used since |time|.
while (!free_buffers_.empty()) { while (!free_buffers_.empty()) {
if (free_buffers_.front()->last_usage > time) if (free_buffers_.front()->last_usage > time)
return; return;
destroyed_buffers = true;
free_buffers_.front()->DestroyGLResources(ri, sii); free_buffers_.front()->DestroyGLResources(ri, sii);
MarkStagingBufferAsBusy(free_buffers_.front().get()); MarkStagingBufferAsBusy(free_buffers_.front().get());
RemoveStagingBuffer(free_buffers_.front().get()); RemoveStagingBuffer(free_buffers_.front().get());
...@@ -414,10 +417,16 @@ void StagingBufferPool::ReleaseBuffersNotUsedSince(base::TimeTicks time) { ...@@ -414,10 +417,16 @@ void StagingBufferPool::ReleaseBuffersNotUsedSince(base::TimeTicks time) {
if (busy_buffers_.front()->last_usage > time) if (busy_buffers_.front()->last_usage > time)
return; return;
destroyed_buffers = true;
busy_buffers_.front()->DestroyGLResources(ri, sii); busy_buffers_.front()->DestroyGLResources(ri, sii);
RemoveStagingBuffer(busy_buffers_.front().get()); RemoveStagingBuffer(busy_buffers_.front().get());
busy_buffers_.pop_front(); busy_buffers_.pop_front();
} }
if (destroyed_buffers) {
ri->OrderingBarrierCHROMIUM();
worker_context_provider_->ContextSupport()->FlushPendingWork();
}
} }
} }
......
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