diff options
author | ericrk <ericrk@chromium.org> | 2015-08-19 11:20:10 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-19 18:21:02 +0000 |
commit | 67dd0175cbb138c2846e2f36262f00c8be0ac5dd (patch) | |
tree | f54a16e8bc99ad60db03fb7c724bdc49fac30281 /cc/raster | |
parent | 64dff6deeae1788cdc60b5c02e82c527385dfe7a (diff) | |
download | chromium_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.cc | 9 |
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_; |