Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 54411aa1853e3ffbec18d1ce93cb664b444e2d0d..898bc81c102abbcb1b73fd72e1ab06a2b3350a42 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -787,8 +787,10 @@ void ResourceProvider::UnlockForRead(ResourceId id) { |
ResourceProvider::Resource* ResourceProvider::LockForWrite(ResourceId id) { |
Resource* resource = GetResource(id); |
- DCHECK(CanLockForWrite(id)); |
- |
+ // TODO(ccameron): The allowance for IsInUseByMacOSWindowServer should not |
+ // be needed. |
+ // http://crbug.com/577121 |
+ DCHECK(CanLockForWrite(id) || IsInUseByMacOSWindowServer(id)); |
resource->locked_for_write = true; |
return resource; |
} |
@@ -807,6 +809,12 @@ bool ResourceProvider::IsOverlayCandidate(ResourceId id) { |
return resource->is_overlay_candidate; |
} |
+bool ResourceProvider::IsInUseByMacOSWindowServer(ResourceId id) { |
+ Resource* resource = GetResource(id); |
+ return resource->gpu_memory_buffer && |
+ resource->gpu_memory_buffer->IsInUseByMacOSWindowServer(); |
+} |
+ |
void ResourceProvider::UnlockForWrite(ResourceProvider::Resource* resource) { |
DCHECK(resource->locked_for_write); |
DCHECK_EQ(resource->exported_count, 0); |