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

Side by Side Diff: cc/resource_provider.cc

Issue 12321053: cc: Complete pending tile uploads if they are needed for tree activation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased after managed_tile_state refactoring. Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « cc/resource_provider.h ('k') | cc/resource_provider_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/resource_provider.h" 5 #include "cc/resource_provider.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 8
9 #include "base/debug/alias.h" 9 #include "base/debug/alias.h"
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 gl_pixel_buffer_id(0), 67 gl_pixel_buffer_id(0),
68 gl_upload_query_id(0), 68 gl_upload_query_id(0),
69 pixels(NULL), 69 pixels(NULL),
70 pixel_buffer(NULL), 70 pixel_buffer(NULL),
71 lock_for_read_count(0), 71 lock_for_read_count(0),
72 locked_for_write(false), 72 locked_for_write(false),
73 external(false), 73 external(false),
74 exported(false), 74 exported(false),
75 marked_for_deletion(false), 75 marked_for_deletion(false),
76 pending_set_pixels(false), 76 pending_set_pixels(false),
77 set_pixels_completion_forced(false),
77 allocated(false), 78 allocated(false),
78 enable_read_lock_fences(false), 79 enable_read_lock_fences(false),
79 read_lock_fence(NULL), 80 read_lock_fence(NULL),
80 size(), 81 size(),
81 format(0), 82 format(0),
82 filter(0), 83 filter(0),
83 type(static_cast<ResourceType>(0)) {} 84 type(static_cast<ResourceType>(0)) {}
84 85
85 ResourceProvider::Resource::~Resource() {} 86 ResourceProvider::Resource::~Resource() {}
86 87
87 ResourceProvider::Resource::Resource( 88 ResourceProvider::Resource::Resource(
88 unsigned texture_id, gfx::Size size, GLenum format, GLenum filter) 89 unsigned texture_id, gfx::Size size, GLenum format, GLenum filter)
89 : gl_id(texture_id), 90 : gl_id(texture_id),
90 gl_pixel_buffer_id(0), 91 gl_pixel_buffer_id(0),
91 gl_upload_query_id(0), 92 gl_upload_query_id(0),
92 pixels(NULL), 93 pixels(NULL),
93 pixel_buffer(NULL), 94 pixel_buffer(NULL),
94 lock_for_read_count(0), 95 lock_for_read_count(0),
95 locked_for_write(false), 96 locked_for_write(false),
96 external(false), 97 external(false),
97 exported(false), 98 exported(false),
98 marked_for_deletion(false), 99 marked_for_deletion(false),
99 pending_set_pixels(false), 100 pending_set_pixels(false),
101 set_pixels_completion_forced(false),
100 allocated(false), 102 allocated(false),
101 enable_read_lock_fences(false), 103 enable_read_lock_fences(false),
102 read_lock_fence(NULL), 104 read_lock_fence(NULL),
103 size(size), 105 size(size),
104 format(format), 106 format(format),
105 filter(filter), 107 filter(filter),
106 type(GLTexture) {} 108 type(GLTexture) {}
107 109
108 ResourceProvider::Resource::Resource( 110 ResourceProvider::Resource::Resource(
109 uint8_t* pixels, gfx::Size size, GLenum format, GLenum filter) 111 uint8_t* pixels, gfx::Size size, GLenum format, GLenum filter)
110 : gl_id(0), 112 : gl_id(0),
111 gl_pixel_buffer_id(0), 113 gl_pixel_buffer_id(0),
112 gl_upload_query_id(0), 114 gl_upload_query_id(0),
113 pixels(pixels), 115 pixels(pixels),
114 pixel_buffer(NULL), 116 pixel_buffer(NULL),
115 lock_for_read_count(0), 117 lock_for_read_count(0),
116 locked_for_write(false), 118 locked_for_write(false),
117 external(false), 119 external(false),
118 exported(false), 120 exported(false),
119 marked_for_deletion(false), 121 marked_for_deletion(false),
120 pending_set_pixels(false), 122 pending_set_pixels(false),
123 set_pixels_completion_forced(false),
121 allocated(false), 124 allocated(false),
122 enable_read_lock_fences(false), 125 enable_read_lock_fences(false),
123 read_lock_fence(NULL), 126 read_lock_fence(NULL),
124 size(size), 127 size(size),
125 format(format), 128 format(format),
126 filter(filter), 129 filter(filter),
127 type(Bitmap) {} 130 type(Bitmap) {}
128 131
129 ResourceProvider::Child::Child() {} 132 ResourceProvider::Child::Child() {}
130 133
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 434
432 context3d->shallowFlushCHROMIUM(); 435 context3d->shallowFlushCHROMIUM();
433 return true; 436 return true;
434 } 437 }
435 438
436 const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) { 439 const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
437 DCHECK(thread_checker_.CalledOnValidThread()); 440 DCHECK(thread_checker_.CalledOnValidThread());
438 ResourceMap::iterator it = resources_.find(id); 441 ResourceMap::iterator it = resources_.find(id);
439 CHECK(it != resources_.end()); 442 CHECK(it != resources_.end());
440 Resource* resource = &it->second; 443 Resource* resource = &it->second;
441 DCHECK(!resource->locked_for_write); 444 DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced);
442 DCHECK(!resource->exported); 445 DCHECK(!resource->exported);
443 // Uninitialized! Call SetPixels or LockForWrite first. 446 // Uninitialized! Call SetPixels or LockForWrite first.
444 DCHECK(resource->allocated); 447 DCHECK(resource->allocated);
445 448
446 if (!resource->gl_id && resource->external && !resource->mailbox.IsEmpty()) { 449 if (!resource->gl_id && resource->external && !resource->mailbox.IsEmpty()) {
447 WebGraphicsContext3D* context3d = output_surface_->context3d(); 450 WebGraphicsContext3D* context3d = output_surface_->context3d();
448 DCHECK(context3d); 451 DCHECK(context3d);
449 if (resource->mailbox.sync_point()) { 452 if (resource->mailbox.sync_point()) {
450 GLC(context3d, context3d->waitSyncPoint(resource->mailbox.sync_point())); 453 GLC(context3d, context3d->waitSyncPoint(resource->mailbox.sync_point()));
451 resource->mailbox.ResetSyncPoint(); 454 resource->mailbox.ResetSyncPoint();
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 } 1012 }
1010 1013
1011 void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id, 1014 void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id,
1012 GLenum target, GLenum filter) { 1015 GLenum target, GLenum filter) {
1013 DCHECK(thread_checker_.CalledOnValidThread()); 1016 DCHECK(thread_checker_.CalledOnValidThread());
1014 WebGraphicsContext3D* context3d = output_surface_->context3d(); 1017 WebGraphicsContext3D* context3d = output_surface_->context3d();
1015 ResourceMap::iterator it = resources_.find(resource_id); 1018 ResourceMap::iterator it = resources_.find(resource_id);
1016 DCHECK(it != resources_.end()); 1019 DCHECK(it != resources_.end());
1017 Resource* resource = &it->second; 1020 Resource* resource = &it->second;
1018 DCHECK(resource->lock_for_read_count); 1021 DCHECK(resource->lock_for_read_count);
1019 DCHECK(!resource->locked_for_write); 1022 DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced);
1020 1023
1021 GLC(context3d, context3d->bindTexture(target, resource->gl_id)); 1024 GLC(context3d, context3d->bindTexture(target, resource->gl_id));
1022 if (filter != resource->filter) { 1025 if (filter != resource->filter) {
1023 GLC(context3d, context3d->texParameteri(target, 1026 GLC(context3d, context3d->texParameteri(target,
1024 GL_TEXTURE_MIN_FILTER, 1027 GL_TEXTURE_MIN_FILTER,
1025 filter)); 1028 filter));
1026 GLC(context3d, context3d->texParameteri(target, 1029 GLC(context3d, context3d->texParameteri(target,
1027 GL_TEXTURE_MAG_FILTER, 1030 GL_TEXTURE_MAG_FILTER,
1028 filter)); 1031 filter));
1029 resource->filter = filter; 1032 resource->filter = filter;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 NULL); 1081 NULL);
1079 } 1082 }
1080 context3d->endQueryEXT(GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM); 1083 context3d->endQueryEXT(GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM);
1081 context3d->bindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0); 1084 context3d->bindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1082 } 1085 }
1083 1086
1084 if (resource->pixels) 1087 if (resource->pixels)
1085 SetPixelsFromBuffer(id); 1088 SetPixelsFromBuffer(id);
1086 1089
1087 resource->pending_set_pixels = true; 1090 resource->pending_set_pixels = true;
1091 resource->set_pixels_completion_forced = false;
1092 }
1093
1094 void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) {
1095 DCHECK(thread_checker_.CalledOnValidThread());
1096 ResourceMap::iterator it = resources_.find(id);
1097 CHECK(it != resources_.end());
1098 Resource* resource = &it->second;
1099 DCHECK(resource->locked_for_write);
1100 DCHECK(resource->pending_set_pixels);
1101 DCHECK(!resource->set_pixels_completion_forced);
1102
1103 if (resource->gl_id) {
1104 WebGraphicsContext3D* context3d = output_surface_->context3d();
1105 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id));
1106 GLC(context3d, context3d->waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D));
1107 GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, 0));
1108 }
1109
1110 resource->set_pixels_completion_forced = true;
1088 } 1111 }
1089 1112
1090 bool ResourceProvider::DidSetPixelsComplete(ResourceId id) { 1113 bool ResourceProvider::DidSetPixelsComplete(ResourceId id) {
1091 DCHECK(thread_checker_.CalledOnValidThread()); 1114 DCHECK(thread_checker_.CalledOnValidThread());
1092 ResourceMap::iterator it = resources_.find(id); 1115 ResourceMap::iterator it = resources_.find(id);
1093 CHECK(it != resources_.end()); 1116 CHECK(it != resources_.end());
1094 Resource* resource = &it->second; 1117 Resource* resource = &it->second;
1095 DCHECK(resource->locked_for_write); 1118 DCHECK(resource->locked_for_write);
1096 DCHECK(resource->pending_set_pixels); 1119 DCHECK(resource->pending_set_pixels);
1097 1120
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 } 1210 }
1188 1211
1189 void ResourceProvider::SetOffscreenContextProvider( 1212 void ResourceProvider::SetOffscreenContextProvider(
1190 scoped_refptr<cc::ContextProvider> offscreen_context_provider) { 1213 scoped_refptr<cc::ContextProvider> offscreen_context_provider) {
1191 if (offscreen_context_provider) 1214 if (offscreen_context_provider)
1192 offscreen_context_provider->BindToCurrentThread(); 1215 offscreen_context_provider->BindToCurrentThread();
1193 offscreen_context_provider_ = offscreen_context_provider; 1216 offscreen_context_provider_ = offscreen_context_provider;
1194 } 1217 }
1195 1218
1196 } // namespace cc 1219 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resource_provider.h ('k') | cc/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698