Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 1b2cad6b5da4ee70def98df7a183eccc9b914fe9..a5dd32087be166636a0451d2efeb9e6b4c7957c1 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -601,6 +601,7 @@ ResourceProvider::Child::~Child() {} |
scoped_ptr<ResourceProvider> ResourceProvider::Create( |
OutputSurface* output_surface, |
SharedBitmapManager* shared_bitmap_manager, |
+ BlockingTaskRunner* blocking_main_thread_task_runner, |
int highp_threshold_min, |
bool use_rgba_4444_texture_format, |
size_t id_allocation_chunk_size, |
@@ -608,6 +609,7 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create( |
scoped_ptr<ResourceProvider> resource_provider( |
new ResourceProvider(output_surface, |
shared_bitmap_manager, |
+ blocking_main_thread_task_runner, |
highp_threshold_min, |
use_rgba_4444_texture_format, |
id_allocation_chunk_size, |
@@ -777,7 +779,7 @@ ResourceProvider::ResourceId ResourceProvider::CreateResourceFromIOSurface( |
ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
const TextureMailbox& mailbox, |
- scoped_ptr<SingleReleaseCallback> release_callback) { |
+ scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// Just store the information. Mailbox will be consumed in LockForRead(). |
ResourceId id = next_id_++; |
@@ -813,9 +815,9 @@ ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
} |
resource.allocated = true; |
resource.mailbox = mailbox; |
- resource.release_callback = |
- base::Bind(&SingleReleaseCallback::Run, |
- base::Owned(release_callback.release())); |
+ resource.release_callback_impl = |
+ base::Bind(&SingleReleaseCallbackImpl::Run, |
+ base::Owned(release_callback_impl.release())); |
resource.allow_overlay = mailbox.allow_overlay(); |
return id; |
} |
@@ -899,7 +901,8 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it, |
resource->shared_bitmap = NULL; |
} |
} |
- resource->release_callback.Run(sync_point, lost_resource); |
+ resource->release_callback_impl.Run( |
+ sync_point, lost_resource, blocking_main_thread_task_runner_); |
} |
if (resource->gl_id) { |
GLES2Interface* gl = ContextGL(); |
@@ -1226,14 +1229,17 @@ ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { |
resource_provider_->UnlockForWrite(resource_id_); |
} |
-ResourceProvider::ResourceProvider(OutputSurface* output_surface, |
- SharedBitmapManager* shared_bitmap_manager, |
- int highp_threshold_min, |
- bool use_rgba_4444_texture_format, |
- size_t id_allocation_chunk_size, |
- bool use_distance_field_text) |
+ResourceProvider::ResourceProvider( |
+ OutputSurface* output_surface, |
+ SharedBitmapManager* shared_bitmap_manager, |
+ BlockingTaskRunner* blocking_main_thread_task_runner, |
+ int highp_threshold_min, |
+ bool use_rgba_4444_texture_format, |
+ size_t id_allocation_chunk_size, |
+ bool use_distance_field_text) |
: output_surface_(output_surface), |
shared_bitmap_manager_(shared_bitmap_manager), |
+ blocking_main_thread_task_runner_(blocking_main_thread_task_runner), |
lost_output_surface_(false), |
highp_threshold_min_(highp_threshold_min), |
next_id_(1), |
@@ -1421,7 +1427,8 @@ void ResourceProvider::ReceiveFromChild( |
TRACE_EVENT0("cc", "ResourceProvider::ReceiveFromChild dropping invalid"); |
ReturnedResourceArray to_return; |
to_return.push_back(it->ToReturnedResource()); |
- child_info.return_callback.Run(to_return); |
+ child_info.return_callback.Run(to_return, |
+ blocking_main_thread_task_runner_); |
continue; |
} |
@@ -1736,7 +1743,8 @@ void ResourceProvider::DeleteAndReturnUnusedResourcesToChild( |
} |
if (!to_return.empty()) |
- child_info->return_callback.Run(to_return); |
+ child_info->return_callback.Run(to_return, |
+ blocking_main_thread_task_runner_); |
if (child_info->marked_for_deletion && |
child_info->parent_to_child_map.empty()) { |