Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: cc/resources/resource_provider.cc

Issue 43753002: cc: Keep track of busy resources in ResourcePool (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 Resource* resource = GetResource(id); 251 Resource* resource = GetResource(id);
252 return resource->lock_for_read_count > 0 || resource->exported_count > 0 || 252 return resource->lock_for_read_count > 0 || resource->exported_count > 0 ||
253 resource->lost; 253 resource->lost;
254 } 254 }
255 255
256 bool ResourceProvider::IsLost(ResourceId id) { 256 bool ResourceProvider::IsLost(ResourceId id) {
257 Resource* resource = GetResource(id); 257 Resource* resource = GetResource(id);
258 return resource->lost; 258 return resource->lost;
259 } 259 }
260 260
261 bool ResourceProvider::IsExported(ResourceId id) {
262 Resource* resource = GetResource(id);
263 return resource->exported_count > 0;
264 }
265
261 ResourceProvider::ResourceId ResourceProvider::CreateResource( 266 ResourceProvider::ResourceId ResourceProvider::CreateResource(
262 gfx::Size size, 267 gfx::Size size,
263 GLint wrap_mode, 268 GLint wrap_mode,
264 TextureUsageHint hint, 269 TextureUsageHint hint,
265 ResourceFormat format) { 270 ResourceFormat format) {
266 DCHECK(!size.IsEmpty()); 271 DCHECK(!size.IsEmpty());
267 switch (default_resource_type_) { 272 switch (default_resource_type_) {
268 case GLTexture: 273 case GLTexture:
269 return CreateGLTexture( 274 return CreateGLTexture(
270 size, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, wrap_mode, hint, format); 275 size, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, wrap_mode, hint, format);
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 } 790 }
786 791
787 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { 792 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() {
788 resource_provider_->UnlockForWrite(resource_id_); 793 resource_provider_->UnlockForWrite(resource_id_);
789 } 794 }
790 795
791 ResourceProvider::ResourceProvider(OutputSurface* output_surface, 796 ResourceProvider::ResourceProvider(OutputSurface* output_surface,
792 SharedBitmapManager* shared_bitmap_manager, 797 SharedBitmapManager* shared_bitmap_manager,
793 int highp_threshold_min, 798 int highp_threshold_min,
794 bool use_rgba_4444_texture_format) 799 bool use_rgba_4444_texture_format)
795 : output_surface_(output_surface), 800 : client_(NULL),
801 output_surface_(output_surface),
796 shared_bitmap_manager_(shared_bitmap_manager), 802 shared_bitmap_manager_(shared_bitmap_manager),
797 lost_output_surface_(false), 803 lost_output_surface_(false),
798 highp_threshold_min_(highp_threshold_min), 804 highp_threshold_min_(highp_threshold_min),
799 next_id_(1), 805 next_id_(1),
800 next_child_(1), 806 next_child_(1),
801 default_resource_type_(InvalidType), 807 default_resource_type_(InvalidType),
802 use_texture_storage_ext_(false), 808 use_texture_storage_ext_(false),
803 use_texture_usage_hint_(false), 809 use_texture_usage_hint_(false),
804 use_shallow_flush_(false), 810 use_shallow_flush_(false),
805 max_texture_size_(0), 811 max_texture_size_(0),
806 best_texture_format_(RGBA_8888), 812 best_texture_format_(RGBA_8888),
807 use_rgba_4444_texture_format_(use_rgba_4444_texture_format) { 813 use_rgba_4444_texture_format_(use_rgba_4444_texture_format) {
808 DCHECK(output_surface_->HasClient()); 814 DCHECK(output_surface_->HasClient());
809 } 815 }
810 816
817 void ResourceProvider::SetClient(ResourceProviderClient* client) {
818 client_ = client;
819 }
820
811 void ResourceProvider::InitializeSoftware() { 821 void ResourceProvider::InitializeSoftware() {
812 DCHECK(thread_checker_.CalledOnValidThread()); 822 DCHECK(thread_checker_.CalledOnValidThread());
813 DCHECK_NE(Bitmap, default_resource_type_); 823 DCHECK_NE(Bitmap, default_resource_type_);
814 824
815 CleanUpGLIfNeeded(); 825 CleanUpGLIfNeeded();
816 826
817 default_resource_type_ = Bitmap; 827 default_resource_type_ = Bitmap;
818 max_texture_size_ = INT_MAX / 2; 828 max_texture_size_ = INT_MAX / 2;
819 best_texture_format_ = RGBA_8888; 829 best_texture_format_ = RGBA_8888;
820 } 830 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 if (context3d) 927 if (context3d)
918 context3d->makeContextCurrent(); 928 context3d->makeContextCurrent();
919 bool need_sync_point = false; 929 bool need_sync_point = false;
920 for (ResourceIdArray::const_iterator it = resources.begin(); 930 for (ResourceIdArray::const_iterator it = resources.begin();
921 it != resources.end(); 931 it != resources.end();
922 ++it) { 932 ++it) {
923 TransferableResource resource; 933 TransferableResource resource;
924 TransferResource(context3d, *it, &resource); 934 TransferResource(context3d, *it, &resource);
925 if (!resource.sync_point && !resource.is_software) 935 if (!resource.sync_point && !resource.is_software)
926 need_sync_point = true; 936 need_sync_point = true;
927 ++resources_.find(*it)->second.exported_count; 937 ResourceMap::iterator resource_it = resources_.find(*it);
938 if (resource_it->second.exported_count == 0) {
939 if (client_)
940 client_->ResourceExported(*it);
941 }
942 ++resource_it->second.exported_count;
928 list->push_back(resource); 943 list->push_back(resource);
929 } 944 }
930 if (need_sync_point) { 945 if (need_sync_point) {
931 unsigned int sync_point = context3d->insertSyncPoint(); 946 unsigned int sync_point = context3d->insertSyncPoint();
932 for (TransferableResourceArray::iterator it = list->begin(); 947 for (TransferableResourceArray::iterator it = list->begin();
933 it != list->end(); 948 it != list->end();
934 ++it) { 949 ++it) {
935 if (!it->sync_point) 950 if (!it->sync_point)
936 it->sync_point = sync_point; 951 it->sync_point = sync_point;
937 } 952 }
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 CompareResourceMapIteratorsByChildId); 1100 CompareResourceMapIteratorsByChildId);
1086 1101
1087 for (size_t i = 0; i < sorted_resources.size(); ++i) { 1102 for (size_t i = 0; i < sorted_resources.size(); ++i) {
1088 ReturnedResource& returned = sorted_resources[i].first; 1103 ReturnedResource& returned = sorted_resources[i].first;
1089 ResourceMap::iterator& map_iterator = sorted_resources[i].second; 1104 ResourceMap::iterator& map_iterator = sorted_resources[i].second;
1090 ResourceId local_id = map_iterator->first; 1105 ResourceId local_id = map_iterator->first;
1091 Resource* resource = &map_iterator->second; 1106 Resource* resource = &map_iterator->second;
1092 1107
1093 CHECK_GE(resource->exported_count, returned.count); 1108 CHECK_GE(resource->exported_count, returned.count);
1094 resource->exported_count -= returned.count; 1109 resource->exported_count -= returned.count;
1110 if (resource->exported_count == 0) {
1111 if (client_)
1112 client_->ResourceReturned(local_id);
1113 }
1095 resource->lost |= returned.lost; 1114 resource->lost |= returned.lost;
1096 if (resource->exported_count) 1115 if (resource->exported_count)
1097 continue; 1116 continue;
1098 1117
1099 if (resource->gl_id) { 1118 if (resource->gl_id) {
1100 if (returned.sync_point) 1119 if (returned.sync_point)
1101 GLC(context3d, context3d->waitSyncPoint(returned.sync_point)); 1120 GLC(context3d, context3d->waitSyncPoint(returned.sync_point));
1102 } else if (!resource->shared_bitmap) { 1121 } else if (!resource->shared_bitmap) {
1103 resource->mailbox = 1122 resource->mailbox =
1104 TextureMailbox(resource->mailbox.name(), returned.sync_point); 1123 TextureMailbox(resource->mailbox.name(), returned.sync_point);
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 context->getIntegerv(GL_ACTIVE_TEXTURE, &active_unit); 1742 context->getIntegerv(GL_ACTIVE_TEXTURE, &active_unit);
1724 return active_unit; 1743 return active_unit;
1725 } 1744 }
1726 1745
1727 WebKit::WebGraphicsContext3D* ResourceProvider::Context3d() const { 1746 WebKit::WebGraphicsContext3D* ResourceProvider::Context3d() const {
1728 ContextProvider* context_provider = output_surface_->context_provider(); 1747 ContextProvider* context_provider = output_surface_->context_provider();
1729 return context_provider ? context_provider->Context3d() : NULL; 1748 return context_provider ? context_provider->Context3d() : NULL;
1730 } 1749 }
1731 1750
1732 } // namespace cc 1751 } // namespace cc
OLDNEW
« cc/resources/resource_provider.h ('K') | « cc/resources/resource_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698