summaryrefslogtreecommitdiffstats
path: root/cc/raster
diff options
context:
space:
mode:
authorericrk <ericrk@chromium.org>2015-08-19 11:20:10 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-19 18:21:02 +0000
commit67dd0175cbb138c2846e2f36262f00c8be0ac5dd (patch)
treef54a16e8bc99ad60db03fb7c724bdc49fac30281 /cc/raster
parent64dff6deeae1788cdc60b5c02e82c527385dfe7a (diff)
downloadchromium_src-67dd0175cbb138c2846e2f36262f00c8be0ac5dd.zip
chromium_src-67dd0175cbb138c2846e2f36262f00c8be0ac5dd.tar.gz
chromium_src-67dd0175cbb138c2846e2f36262f00c8be0ac5dd.tar.bz2
Currently ResourcePool does not maintain ownership of its resources
after handing them out to consumers like TileManager. In order to improve memory handling (and ensure proper use of the ResourcePool, which assumes that resources will be returned to it), this causes the ResourcePool to maintain ownership of its resources, only handing out unowned Resource*. If all resources are not returned to the pool before destruction, we will DCHECK. This was always the case, but is now more explicit. BUG= CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1269133002 Cr-Commit-Position: refs/heads/master@{#344276}
Diffstat (limited to 'cc/raster')
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/cc/raster/one_copy_tile_task_worker_pool.cc b/cc/raster/one_copy_tile_task_worker_pool.cc
index 2d6f644..9907414 100644
--- a/cc/raster/one_copy_tile_task_worker_pool.cc
+++ b/cc/raster/one_copy_tile_task_worker_pool.cc
@@ -36,6 +36,7 @@ class RasterBufferImpl : public RasterBuffer {
resource_pool_(resource_pool),
output_resource_(output_resource),
raster_content_id_(0),
+ raster_resource_(nullptr),
sequence_(0) {
if (worker_pool->have_persistent_gpu_memory_buffers() &&
previous_content_id) {
@@ -67,8 +68,8 @@ class RasterBufferImpl : public RasterBuffer {
// Return resources to pool so they can be used by another RasterBuffer
// instance.
- resource_pool_->ReleaseResource(raster_resource_.Pass(),
- raster_content_id_);
+ resource_pool_->ReleaseResource(raster_resource_, raster_content_id_);
+ raster_resource_ = nullptr;
}
// Overridden from RasterBuffer:
@@ -82,7 +83,7 @@ class RasterBufferImpl : public RasterBuffer {
// content id.
bool reusing_raster_resource = raster_content_id_ != 0;
sequence_ = worker_pool_->PlaybackAndScheduleCopyOnWorkerThread(
- reusing_raster_resource, lock_.Pass(), raster_resource_.get(),
+ reusing_raster_resource, lock_.Pass(), raster_resource_,
output_resource_, raster_source, raster_full_rect, raster_dirty_rect,
scale, include_images);
// Store the content id of the resource to return to the pool.
@@ -95,7 +96,7 @@ class RasterBufferImpl : public RasterBuffer {
ResourcePool* resource_pool_;
const Resource* output_resource_;
uint64_t raster_content_id_;
- scoped_ptr<ScopedResource> raster_resource_;
+ Resource* raster_resource_;
scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> lock_;
CopySequenceNumber sequence_;