| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 696 |
| 697 // Exported resources are lost on shutdown. | 697 // Exported resources are lost on shutdown. |
| 698 bool exported_resource_lost = | 698 bool exported_resource_lost = |
| 699 style == FOR_SHUTDOWN && resource->exported_count > 0; | 699 style == FOR_SHUTDOWN && resource->exported_count > 0; |
| 700 // GPU resources are lost when output surface is lost. | 700 // GPU resources are lost when output surface is lost. |
| 701 bool gpu_resource_lost = | 701 bool gpu_resource_lost = |
| 702 IsGpuResourceType(resource->type) && lost_output_surface_; | 702 IsGpuResourceType(resource->type) && lost_output_surface_; |
| 703 bool lost_resource = | 703 bool lost_resource = |
| 704 resource->lost || exported_resource_lost || gpu_resource_lost; | 704 resource->lost || exported_resource_lost || gpu_resource_lost; |
| 705 | 705 |
| 706 if (!lost_resource && | 706 // Wait on sync token before deleting resources we own. |
| 707 if (!lost_resource && resource->origin == Resource::INTERNAL && |
| 707 resource->synchronization_state() == Resource::NEEDS_WAIT) { | 708 resource->synchronization_state() == Resource::NEEDS_WAIT) { |
| 708 DCHECK(resource->allocated); | 709 DCHECK(resource->allocated); |
| 709 DCHECK(IsGpuResourceType(resource->type)); | 710 DCHECK(IsGpuResourceType(resource->type)); |
| 710 GLES2Interface* gl = ContextGL(); | 711 GLES2Interface* gl = ContextGL(); |
| 711 DCHECK(gl); | 712 DCHECK(gl); |
| 712 resource->WaitSyncToken(gl); | 713 resource->WaitSyncToken(gl); |
| 713 } | 714 } |
| 714 | 715 |
| 715 if (resource->image_id) { | 716 if (resource->image_id) { |
| 716 DCHECK(resource->origin == Resource::INTERNAL); | 717 DCHECK(resource->origin == Resource::INTERNAL); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 737 gl->DeleteBuffers(1, &resource->gl_pixel_buffer_id); | 738 gl->DeleteBuffers(1, &resource->gl_pixel_buffer_id); |
| 738 } | 739 } |
| 739 if (resource->origin == Resource::EXTERNAL) { | 740 if (resource->origin == Resource::EXTERNAL) { |
| 740 DCHECK(resource->mailbox().IsValid()); | 741 DCHECK(resource->mailbox().IsValid()); |
| 741 gpu::SyncToken sync_token = resource->mailbox().sync_token(); | 742 gpu::SyncToken sync_token = resource->mailbox().sync_token(); |
| 742 if (IsGpuResourceType(resource->type)) { | 743 if (IsGpuResourceType(resource->type)) { |
| 743 DCHECK(resource->mailbox().IsTexture()); | 744 DCHECK(resource->mailbox().IsTexture()); |
| 744 GLES2Interface* gl = ContextGL(); | 745 GLES2Interface* gl = ContextGL(); |
| 745 DCHECK(gl); | 746 DCHECK(gl); |
| 746 if (resource->gl_id) { | 747 if (resource->gl_id) { |
| 748 DCHECK_NE(Resource::NEEDS_WAIT, resource->synchronization_state()); |
| 747 gl->DeleteTextures(1, &resource->gl_id); | 749 gl->DeleteTextures(1, &resource->gl_id); |
| 748 resource->gl_id = 0; | 750 resource->gl_id = 0; |
| 749 if (!lost_resource) { | 751 if (!lost_resource) { |
| 750 const GLuint64 fence_sync = gl->InsertFenceSyncCHROMIUM(); | 752 const GLuint64 fence_sync = gl->InsertFenceSyncCHROMIUM(); |
| 751 gl->ShallowFlushCHROMIUM(); | 753 gl->ShallowFlushCHROMIUM(); |
| 752 gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); | 754 gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
| 753 } | 755 } |
| 754 } | 756 } |
| 755 } else { | 757 } else { |
| 756 DCHECK(resource->mailbox().IsSharedMemory()); | 758 DCHECK(resource->mailbox().IsSharedMemory()); |
| (...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1973 | 1975 |
| 1974 const int kImportance = 2; | 1976 const int kImportance = 2; |
| 1975 pmd->CreateSharedGlobalAllocatorDump(guid); | 1977 pmd->CreateSharedGlobalAllocatorDump(guid); |
| 1976 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); | 1978 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); |
| 1977 } | 1979 } |
| 1978 | 1980 |
| 1979 return true; | 1981 return true; |
| 1980 } | 1982 } |
| 1981 | 1983 |
| 1982 } // namespace cc | 1984 } // namespace cc |
| OLD | NEW |