Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 71254c0350ba48c569db0efc0a363041bf5375ee..5340cd0b70268a49c04b10627ed058b890d3bf09 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -188,10 +188,7 @@ WebGraphicsContext3D* ResourceProvider::GraphicsContext3D() { |
} |
bool ResourceProvider::InUseByConsumer(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
return resource->lock_for_read_count > 0 || resource->exported_count > 0; |
} |
@@ -382,10 +379,7 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it, |
ResourceProvider::ResourceType ResourceProvider::GetResourceType( |
ResourceId id) { |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- return resource->type; |
+ return GetResource(id)->type; |
} |
void ResourceProvider::SetPixels(ResourceId id, |
@@ -393,10 +387,7 @@ void ResourceProvider::SetPixels(ResourceId id, |
gfx::Rect image_rect, |
gfx::Rect source_rect, |
gfx::Vector2d dest_offset) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->locked_for_write); |
DCHECK(!resource->lock_for_read_count); |
DCHECK(!resource->external); |
@@ -498,11 +489,15 @@ bool ResourceProvider::ShallowFlushIfSupported() { |
return true; |
} |
-const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) { |
+ResourceProvider::Resource* ResourceProvider::GetResource(ResourceId id) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
ResourceMap::iterator it = resources_.find(id); |
CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ return &it->second; |
+} |
+ |
+const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) { |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->locked_for_write || |
resource->set_pixels_completion_forced) << |
"locked for write: " << resource->locked_for_write << |
@@ -538,10 +533,7 @@ const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) { |
} |
void ResourceProvider::UnlockForRead(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK_GT(resource->lock_for_read_count, 0); |
DCHECK_EQ(resource->exported_count, 0); |
resource->lock_for_read_count--; |
@@ -549,10 +541,7 @@ void ResourceProvider::UnlockForRead(ResourceId id) { |
const ResourceProvider::Resource* ResourceProvider::LockForWrite( |
ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->locked_for_write); |
DCHECK(!resource->lock_for_read_count); |
DCHECK_EQ(resource->exported_count, 0); |
@@ -565,10 +554,7 @@ const ResourceProvider::Resource* ResourceProvider::LockForWrite( |
} |
bool ResourceProvider::CanLockForWrite(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
return !resource->locked_for_write && |
!resource->lock_for_read_count && |
!resource->exported_count && |
@@ -577,10 +563,7 @@ bool ResourceProvider::CanLockForWrite(ResourceId id) { |
} |
void ResourceProvider::UnlockForWrite(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(resource->locked_for_write); |
DCHECK_EQ(resource->exported_count, 0); |
DCHECK(!resource->external); |
@@ -825,7 +808,7 @@ void ResourceProvider::PrepareSendToParent(const ResourceIdArray& resources, |
void ResourceProvider::PrepareSendToChild(int child, |
danakj
2013/08/16 23:33:35
Maybe we could rename this to PrepareSendReturnsTo
piman
2013/08/17 01:54:31
Done.
|
const ResourceIdArray& resources, |
- TransferableResourceArray* list) { |
+ ReturnedResourceArray* list) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
WebGraphicsContext3D* context3d = output_surface_->context3d(); |
if (!context3d || !context3d->makeContextCurrent()) { |
@@ -835,27 +818,31 @@ void ResourceProvider::PrepareSendToChild(int child, |
Child& child_info = children_.find(child)->second; |
bool need_sync_point = false; |
for (ResourceIdArray::const_iterator it = resources.begin(); |
- it != resources.end(); |
- ++it) { |
- TransferableResource resource; |
- TransferResource(context3d, *it, &resource); |
- if (!resource.sync_point) |
- need_sync_point = true; |
+ it != resources.end(); ++it) { |
+ Resource* resource = GetResource(*it); |
+ DCHECK(!resource->locked_for_write); |
+ DCHECK(!resource->lock_for_read_count); |
DCHECK(child_info.parent_to_child_map.find(*it) != |
child_info.parent_to_child_map.end()); |
- resource.id = child_info.parent_to_child_map[*it]; |
+ |
+ ReturnedResource returned; |
+ returned.id = child_info.parent_to_child_map[*it]; |
+ returned.filter = resource->filter; |
+ returned.sync_point = resource->mailbox.sync_point(); |
+ if (!returned.sync_point) |
+ need_sync_point = true; |
+ returned.count = resource->imported_count; |
+ list->push_back(returned); |
+ |
child_info.parent_to_child_map.erase(*it); |
- child_info.child_to_parent_map.erase(resource.id); |
- for (int i = 0; i < resources_[*it].imported_count; ++i) |
- list->push_back(resource); |
+ child_info.child_to_parent_map.erase(returned.id); |
resources_[*it].imported_count = 0; |
DeleteResource(*it); |
} |
if (need_sync_point) { |
unsigned int sync_point = context3d->insertSyncPoint(); |
- for (TransferableResourceArray::iterator it = list->begin(); |
- it != list->end(); |
- ++it) { |
+ for (ReturnedResourceArray::iterator it = list->begin(); |
+ it != list->end(); ++it) { |
if (!it->sync_point) |
it->sync_point = sync_point; |
} |
@@ -907,25 +894,24 @@ void ResourceProvider::ReceiveFromChild( |
} |
void ResourceProvider::ReceiveFromParent( |
- const TransferableResourceArray& resources) { |
+ const ReturnedResourceArray& resources) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
WebGraphicsContext3D* context3d = output_surface_->context3d(); |
if (!context3d || !context3d->makeContextCurrent()) { |
// TODO(skaslev): Implement this path for software compositing. |
return; |
} |
- for (TransferableResourceArray::const_iterator it = resources.begin(); |
+ for (ReturnedResourceArray::const_iterator it = resources.begin(); |
it != resources.end(); |
++it) { |
ResourceMap::iterator map_iterator = resources_.find(it->id); |
DCHECK(map_iterator != resources_.end()); |
Resource* resource = &map_iterator->second; |
- DCHECK_GT(resource->exported_count, 0); |
- --resource->exported_count; |
+ CHECK_GE(resource->exported_count, it->count); |
+ resource->exported_count -= it->count; |
if (resource->exported_count) |
continue; |
resource->filter = it->filter; |
- DCHECK(resource->mailbox.ContainsMailbox(it->mailbox)); |
if (resource->gl_id) { |
if (it->sync_point) |
GLC(context3d, context3d->waitSyncPoint(it->sync_point)); |
@@ -942,10 +928,7 @@ void ResourceProvider::ReceiveFromParent( |
void ResourceProvider::TransferResource(WebGraphicsContext3D* context, |
ResourceId id, |
TransferableResource* resource) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* source = &it->second; |
+ Resource* source = GetResource(id); |
DCHECK(!source->locked_for_write); |
DCHECK(!source->lock_for_read_count); |
DCHECK(!source->external || (source->external && source->mailbox.IsValid())); |
@@ -977,10 +960,7 @@ void ResourceProvider::TransferResource(WebGraphicsContext3D* context, |
} |
void ResourceProvider::AcquirePixelBuffer(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
DCHECK(!resource->image_id); |
@@ -1010,10 +990,7 @@ void ResourceProvider::AcquirePixelBuffer(ResourceId id) { |
} |
void ResourceProvider::ReleasePixelBuffer(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
DCHECK(!resource->image_id); |
@@ -1055,10 +1032,7 @@ void ResourceProvider::ReleasePixelBuffer(ResourceId id) { |
} |
uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
DCHECK(!resource->image_id); |
@@ -1086,10 +1060,7 @@ uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id) { |
} |
void ResourceProvider::UnmapPixelBuffer(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
DCHECK(!resource->image_id); |
@@ -1161,10 +1132,7 @@ void ResourceProvider::UnbindForSampling( |
} |
void ResourceProvider::BeginSetPixels(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->pending_set_pixels); |
LazyCreate(resource); |
@@ -1229,10 +1197,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) { |
} |
void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(resource->locked_for_write); |
DCHECK(resource->pending_set_pixels); |
DCHECK(!resource->set_pixels_completion_forced); |
@@ -1248,10 +1213,7 @@ void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) { |
} |
bool ResourceProvider::DidSetPixelsComplete(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
DCHECK(resource->locked_for_write); |
DCHECK(resource->pending_set_pixels); |
@@ -1275,10 +1237,7 @@ bool ResourceProvider::DidSetPixelsComplete(ResourceId id) { |
} |
void ResourceProvider::CreateForTesting(ResourceId id) { |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- LazyCreate(resource); |
+ LazyCreate(GetResource(id)); |
} |
void ResourceProvider::LazyCreate(Resource* resource) { |
@@ -1304,10 +1263,7 @@ void ResourceProvider::LazyCreate(Resource* resource) { |
} |
void ResourceProvider::AllocateForTesting(ResourceId id) { |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- LazyAllocate(resource); |
+ LazyAllocate(GetResource(id)); |
} |
void ResourceProvider::LazyAllocate(Resource* resource) { |
@@ -1344,19 +1300,12 @@ void ResourceProvider::LazyAllocate(Resource* resource) { |
void ResourceProvider::EnableReadLockFences(ResourceProvider::ResourceId id, |
bool enable) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
+ Resource* resource = GetResource(id); |
resource->enable_read_lock_fences = enable; |
} |
void ResourceProvider::AcquireImage(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
@@ -1375,11 +1324,7 @@ void ResourceProvider::AcquireImage(ResourceId id) { |
} |
void ResourceProvider::ReleaseImage(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
@@ -1394,11 +1339,7 @@ void ResourceProvider::ReleaseImage(ResourceId id) { |
} |
uint8_t* ResourceProvider::MapImage(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- |
+ Resource* resource = GetResource(id); |
DCHECK(ReadLockFenceHasPassed(resource)); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
@@ -1417,11 +1358,7 @@ uint8_t* ResourceProvider::MapImage(ResourceId id) { |
} |
void ResourceProvider::UnmapImage(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |
@@ -1433,11 +1370,7 @@ void ResourceProvider::UnmapImage(ResourceId id) { |
} |
int ResourceProvider::GetImageStride(ResourceId id) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ResourceMap::iterator it = resources_.find(id); |
- CHECK(it != resources_.end()); |
- Resource* resource = &it->second; |
- |
+ Resource* resource = GetResource(id); |
DCHECK(!resource->external); |
DCHECK_EQ(resource->exported_count, 0); |