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

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

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Folded sync_point into sync_tokens Created 5 years, 1 month 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/atomic_sequence_num.h" 10 #include "base/atomic_sequence_num.h"
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 image_id(0), 305 image_id(0),
306 bound_image_id(0), 306 bound_image_id(0),
307 hint(TEXTURE_HINT_IMMUTABLE), 307 hint(TEXTURE_HINT_IMMUTABLE),
308 type(RESOURCE_TYPE_BITMAP), 308 type(RESOURCE_TYPE_BITMAP),
309 format(RGBA_8888), 309 format(RGBA_8888),
310 shared_bitmap_id(bitmap_id), 310 shared_bitmap_id(bitmap_id),
311 shared_bitmap(NULL), 311 shared_bitmap(NULL),
312 gpu_memory_buffer(NULL) {} 312 gpu_memory_buffer(NULL) {}
313 313
314 ResourceProvider::Child::Child() 314 ResourceProvider::Child::Child()
315 : marked_for_deletion(false), needs_sync_points(true) { 315 : marked_for_deletion(false), needs_sync_tokens(true) {}
316 }
317 316
318 ResourceProvider::Child::~Child() {} 317 ResourceProvider::Child::~Child() {}
319 318
320 scoped_ptr<ResourceProvider> ResourceProvider::Create( 319 scoped_ptr<ResourceProvider> ResourceProvider::Create(
321 OutputSurface* output_surface, 320 OutputSurface* output_surface,
322 SharedBitmapManager* shared_bitmap_manager, 321 SharedBitmapManager* shared_bitmap_manager,
323 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 322 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
324 BlockingTaskRunner* blocking_main_thread_task_runner, 323 BlockingTaskRunner* blocking_main_thread_task_runner,
325 int highp_threshold_min, 324 int highp_threshold_min,
326 size_t id_allocation_chunk_size, 325 size_t id_allocation_chunk_size,
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 gl->DeleteQueriesEXT(1, &resource->gl_read_lock_query_id); 556 gl->DeleteQueriesEXT(1, &resource->gl_read_lock_query_id);
558 } 557 }
559 if (resource->gl_pixel_buffer_id) { 558 if (resource->gl_pixel_buffer_id) {
560 DCHECK(resource->origin == Resource::INTERNAL); 559 DCHECK(resource->origin == Resource::INTERNAL);
561 GLES2Interface* gl = ContextGL(); 560 GLES2Interface* gl = ContextGL();
562 DCHECK(gl); 561 DCHECK(gl);
563 gl->DeleteBuffers(1, &resource->gl_pixel_buffer_id); 562 gl->DeleteBuffers(1, &resource->gl_pixel_buffer_id);
564 } 563 }
565 if (resource->origin == Resource::EXTERNAL) { 564 if (resource->origin == Resource::EXTERNAL) {
566 DCHECK(resource->mailbox.IsValid()); 565 DCHECK(resource->mailbox.IsValid());
567 GLuint sync_point = resource->mailbox.sync_point(); 566 gpu::SyncToken sync_token = resource->mailbox.sync_token();
568 if (resource->type == RESOURCE_TYPE_GL_TEXTURE) { 567 if (resource->type == RESOURCE_TYPE_GL_TEXTURE) {
569 DCHECK(resource->mailbox.IsTexture()); 568 DCHECK(resource->mailbox.IsTexture());
570 lost_resource |= lost_output_surface_; 569 lost_resource |= lost_output_surface_;
571 GLES2Interface* gl = ContextGL(); 570 GLES2Interface* gl = ContextGL();
572 DCHECK(gl); 571 DCHECK(gl);
573 if (resource->gl_id) { 572 if (resource->gl_id) {
574 gl->DeleteTextures(1, &resource->gl_id); 573 gl->DeleteTextures(1, &resource->gl_id);
575 resource->gl_id = 0; 574 resource->gl_id = 0;
576 if (!lost_resource) 575 if (!lost_resource)
577 sync_point = gl->InsertSyncPointCHROMIUM(); 576 sync_token = gpu::SyncToken(gl->InsertSyncPointCHROMIUM());
578 } 577 }
579 } else { 578 } else {
580 DCHECK(resource->mailbox.IsSharedMemory()); 579 DCHECK(resource->mailbox.IsSharedMemory());
581 resource->shared_bitmap = nullptr; 580 resource->shared_bitmap = nullptr;
582 resource->pixels = nullptr; 581 resource->pixels = nullptr;
583 } 582 }
584 resource->release_callback_impl.Run( 583 resource->release_callback_impl.Run(sync_token, lost_resource,
585 sync_point, lost_resource, blocking_main_thread_task_runner_); 584 blocking_main_thread_task_runner_);
586 } 585 }
587 if (resource->gl_id) { 586 if (resource->gl_id) {
588 GLES2Interface* gl = ContextGL(); 587 GLES2Interface* gl = ContextGL();
589 DCHECK(gl); 588 DCHECK(gl);
590 gl->DeleteTextures(1, &resource->gl_id); 589 gl->DeleteTextures(1, &resource->gl_id);
591 resource->gl_id = 0; 590 resource->gl_id = 0;
592 } 591 }
593 if (resource->shared_bitmap) { 592 if (resource->shared_bitmap) {
594 DCHECK(resource->origin != Resource::EXTERNAL); 593 DCHECK(resource->origin != Resource::EXTERNAL);
595 DCHECK_EQ(RESOURCE_TYPE_BITMAP, resource->type); 594 DCHECK_EQ(RESOURCE_TYPE_BITMAP, resource->type);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 DCHECK_EQ(resource->exported_count, 0); 682 DCHECK_EQ(resource->exported_count, 0);
684 // Uninitialized! Call SetPixels or LockForWrite first. 683 // Uninitialized! Call SetPixels or LockForWrite first.
685 DCHECK(resource->allocated); 684 DCHECK(resource->allocated);
686 685
687 LazyCreate(resource); 686 LazyCreate(resource);
688 687
689 if (resource->type == RESOURCE_TYPE_GL_TEXTURE && !resource->gl_id) { 688 if (resource->type == RESOURCE_TYPE_GL_TEXTURE && !resource->gl_id) {
690 DCHECK(resource->origin != Resource::INTERNAL); 689 DCHECK(resource->origin != Resource::INTERNAL);
691 DCHECK(resource->mailbox.IsTexture()); 690 DCHECK(resource->mailbox.IsTexture());
692 691
693 // Mailbox sync_points must be processed by a call to 692 // Mailbox sync_tokens must be processed by a call to
694 // WaitSyncPointIfNeeded() prior to calling LockForRead(). 693 // WaitSyncTokenIfNeeded() prior to calling LockForRead().
695 DCHECK(!resource->mailbox.sync_point()); 694 DCHECK(!resource->mailbox.sync_token().HasData());
696 695
697 GLES2Interface* gl = ContextGL(); 696 GLES2Interface* gl = ContextGL();
698 DCHECK(gl); 697 DCHECK(gl);
699 resource->gl_id = gl->CreateAndConsumeTextureCHROMIUM( 698 resource->gl_id = gl->CreateAndConsumeTextureCHROMIUM(
700 resource->mailbox.target(), resource->mailbox.name()); 699 resource->mailbox.target(), resource->mailbox.name());
701 } 700 }
702 701
703 if (!resource->pixels && resource->has_shared_bitmap_id && 702 if (!resource->pixels && resource->has_shared_bitmap_id &&
704 shared_bitmap_manager_) { 703 shared_bitmap_manager_) {
705 scoped_ptr<SharedBitmap> bitmap = 704 scoped_ptr<SharedBitmap> bitmap =
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 DCHECK(thread_checker_.CalledOnValidThread()); 1082 DCHECK(thread_checker_.CalledOnValidThread());
1084 1083
1085 Child child_info; 1084 Child child_info;
1086 child_info.return_callback = return_callback; 1085 child_info.return_callback = return_callback;
1087 1086
1088 int child = next_child_++; 1087 int child = next_child_++;
1089 children_[child] = child_info; 1088 children_[child] = child_info;
1090 return child; 1089 return child;
1091 } 1090 }
1092 1091
1093 void ResourceProvider::SetChildNeedsSyncPoints(int child_id, bool needs) { 1092 void ResourceProvider::SetChildNeedsSyncTokens(int child_id, bool needs) {
1094 ChildMap::iterator it = children_.find(child_id); 1093 ChildMap::iterator it = children_.find(child_id);
1095 DCHECK(it != children_.end()); 1094 DCHECK(it != children_.end());
1096 it->second.needs_sync_points = needs; 1095 it->second.needs_sync_tokens = needs;
1097 } 1096 }
1098 1097
1099 void ResourceProvider::DestroyChild(int child_id) { 1098 void ResourceProvider::DestroyChild(int child_id) {
1100 ChildMap::iterator it = children_.find(child_id); 1099 ChildMap::iterator it = children_.find(child_id);
1101 DCHECK(it != children_.end()); 1100 DCHECK(it != children_.end());
1102 DestroyChildInternal(it, NORMAL); 1101 DestroyChildInternal(it, NORMAL);
1103 } 1102 }
1104 1103
1105 void ResourceProvider::DestroyChildInternal(ChildMap::iterator it, 1104 void ResourceProvider::DestroyChildInternal(ChildMap::iterator it,
1106 DeleteStyle style) { 1105 DeleteStyle style) {
(...skipping 22 matching lines...) Expand all
1129 ChildMap::const_iterator it = children_.find(child); 1128 ChildMap::const_iterator it = children_.find(child);
1130 DCHECK(it != children_.end()); 1129 DCHECK(it != children_.end());
1131 DCHECK(!it->second.marked_for_deletion); 1130 DCHECK(!it->second.marked_for_deletion);
1132 return it->second.child_to_parent_map; 1131 return it->second.child_to_parent_map;
1133 } 1132 }
1134 1133
1135 void ResourceProvider::PrepareSendToParent(const ResourceIdArray& resources, 1134 void ResourceProvider::PrepareSendToParent(const ResourceIdArray& resources,
1136 TransferableResourceArray* list) { 1135 TransferableResourceArray* list) {
1137 DCHECK(thread_checker_.CalledOnValidThread()); 1136 DCHECK(thread_checker_.CalledOnValidThread());
1138 GLES2Interface* gl = ContextGL(); 1137 GLES2Interface* gl = ContextGL();
1139 bool need_sync_point = false; 1138 bool need_sync_token = false;
1140 for (ResourceIdArray::const_iterator it = resources.begin(); 1139 for (ResourceIdArray::const_iterator it = resources.begin();
1141 it != resources.end(); 1140 it != resources.end();
1142 ++it) { 1141 ++it) {
1143 TransferableResource resource; 1142 TransferableResource resource;
1144 TransferResource(gl, *it, &resource); 1143 TransferResource(gl, *it, &resource);
1145 if (!resource.mailbox_holder.sync_point && !resource.is_software) 1144 need_sync_token |= (!resource.mailbox_holder.sync_token.HasData() &&
1146 need_sync_point = true; 1145 !resource.is_software);
1147 ++resources_.find(*it)->second.exported_count; 1146 ++resources_.find(*it)->second.exported_count;
1148 list->push_back(resource); 1147 list->push_back(resource);
1149 } 1148 }
1150 if (need_sync_point && 1149 if (need_sync_token &&
1151 output_surface_->capabilities().delegated_sync_points_required) { 1150 output_surface_->capabilities().delegated_sync_points_required) {
1152 GLuint sync_point = gl->InsertSyncPointCHROMIUM(); 1151 gpu::SyncToken sync_token(gl->InsertSyncPointCHROMIUM());
1153 for (TransferableResourceArray::iterator it = list->begin(); 1152 for (TransferableResourceArray::iterator it = list->begin();
1154 it != list->end(); 1153 it != list->end();
1155 ++it) { 1154 ++it) {
1156 if (!it->mailbox_holder.sync_point) 1155 if (!it->mailbox_holder.sync_token.HasData())
1157 it->mailbox_holder.sync_point = sync_point; 1156 it->mailbox_holder.sync_token = sync_token;
1158 } 1157 }
1159 } 1158 }
1160 } 1159 }
1161 1160
1162 void ResourceProvider::ReceiveFromChild( 1161 void ResourceProvider::ReceiveFromChild(
1163 int child, const TransferableResourceArray& resources) { 1162 int child, const TransferableResourceArray& resources) {
1164 DCHECK(thread_checker_.CalledOnValidThread()); 1163 DCHECK(thread_checker_.CalledOnValidThread());
1165 GLES2Interface* gl = ContextGL(); 1164 GLES2Interface* gl = ContextGL();
1166 Child& child_info = children_.find(child)->second; 1165 Child& child_info = children_.find(child)->second;
1167 DCHECK(!child_info.marked_for_deletion); 1166 DCHECK(!child_info.marked_for_deletion);
(...skipping 24 matching lines...) Expand all
1192 if (it->is_software) { 1191 if (it->is_software) {
1193 resource = InsertResource(local_id, 1192 resource = InsertResource(local_id,
1194 Resource(it->mailbox_holder.mailbox, it->size, 1193 Resource(it->mailbox_holder.mailbox, it->size,
1195 Resource::DELEGATED, GL_LINEAR)); 1194 Resource::DELEGATED, GL_LINEAR));
1196 } else { 1195 } else {
1197 resource = InsertResource( 1196 resource = InsertResource(
1198 local_id, Resource(0, it->size, Resource::DELEGATED, 1197 local_id, Resource(0, it->size, Resource::DELEGATED,
1199 it->mailbox_holder.texture_target, it->filter, 1198 it->mailbox_holder.texture_target, it->filter,
1200 TEXTURE_HINT_IMMUTABLE, it->format)); 1199 TEXTURE_HINT_IMMUTABLE, it->format));
1201 resource->mailbox = TextureMailbox(it->mailbox_holder.mailbox, 1200 resource->mailbox = TextureMailbox(it->mailbox_holder.mailbox,
1202 it->mailbox_holder.texture_target, 1201 it->mailbox_holder.sync_token,
1203 it->mailbox_holder.sync_point); 1202 it->mailbox_holder.texture_target);
1204 resource->read_lock_fences_enabled = it->read_lock_fences_enabled; 1203 resource->read_lock_fences_enabled = it->read_lock_fences_enabled;
1205 resource->is_overlay_candidate = it->is_overlay_candidate; 1204 resource->is_overlay_candidate = it->is_overlay_candidate;
1206 } 1205 }
1207 resource->child_id = child; 1206 resource->child_id = child;
1208 // Don't allocate a texture for a child. 1207 // Don't allocate a texture for a child.
1209 resource->allocated = true; 1208 resource->allocated = true;
1210 resource->imported_count = 1; 1209 resource->imported_count = 1;
1211 child_info.parent_to_child_map[local_id] = it->id; 1210 child_info.parent_to_child_map[local_id] = it->id;
1212 child_info.child_to_parent_map[it->id] = local_id; 1211 child_info.child_to_parent_map[it->id] = local_id;
1213 } 1212 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 continue; 1250 continue;
1252 1251
1253 Resource* resource = &map_iterator->second; 1252 Resource* resource = &map_iterator->second;
1254 1253
1255 CHECK_GE(resource->exported_count, returned.count); 1254 CHECK_GE(resource->exported_count, returned.count);
1256 resource->exported_count -= returned.count; 1255 resource->exported_count -= returned.count;
1257 resource->lost |= returned.lost; 1256 resource->lost |= returned.lost;
1258 if (resource->exported_count) 1257 if (resource->exported_count)
1259 continue; 1258 continue;
1260 1259
1261 if (returned.sync_point) { 1260 if (returned.sync_token.HasData()) {
1262 DCHECK(!resource->has_shared_bitmap_id); 1261 DCHECK(!resource->has_shared_bitmap_id);
1263 if (resource->origin == Resource::INTERNAL) { 1262 if (resource->origin == Resource::INTERNAL) {
1264 DCHECK(resource->gl_id); 1263 DCHECK(resource->gl_id);
1265 gl->WaitSyncPointCHROMIUM(returned.sync_point); 1264 gl->WaitSyncTokenCHROMIUM(returned.sync_token.GetConstData());
1266 } else { 1265 } else {
1267 DCHECK(!resource->gl_id); 1266 DCHECK(!resource->gl_id);
1268 resource->mailbox.set_sync_point(returned.sync_point); 1267 resource->mailbox.set_sync_token(returned.sync_token);
1269 } 1268 }
1270 } 1269 }
1271 1270
1272 if (!resource->marked_for_deletion) 1271 if (!resource->marked_for_deletion)
1273 continue; 1272 continue;
1274 1273
1275 if (!resource->child_id) { 1274 if (!resource->child_id) {
1276 // The resource belongs to this ResourceProvider, so it can be destroyed. 1275 // The resource belongs to this ResourceProvider, so it can be destroyed.
1277 DeleteResourceInternal(map_iterator, NORMAL); 1276 DeleteResourceInternal(map_iterator, NORMAL);
1278 continue; 1277 continue;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 if (source->image_id && source->dirty_image) { 1329 if (source->image_id && source->dirty_image) {
1331 DCHECK(source->gl_id); 1330 DCHECK(source->gl_id);
1332 DCHECK(source->origin == Resource::INTERNAL); 1331 DCHECK(source->origin == Resource::INTERNAL);
1333 gl->BindTexture(resource->mailbox_holder.texture_target, source->gl_id); 1332 gl->BindTexture(resource->mailbox_holder.texture_target, source->gl_id);
1334 BindImageForSampling(source); 1333 BindImageForSampling(source);
1335 } 1334 }
1336 // This is either an external resource, or a compositor resource that we 1335 // This is either an external resource, or a compositor resource that we
1337 // already exported. Make sure to forward the sync point that we were given. 1336 // already exported. Make sure to forward the sync point that we were given.
1338 resource->mailbox_holder.mailbox = source->mailbox.mailbox(); 1337 resource->mailbox_holder.mailbox = source->mailbox.mailbox();
1339 resource->mailbox_holder.texture_target = source->mailbox.target(); 1338 resource->mailbox_holder.texture_target = source->mailbox.target();
1340 resource->mailbox_holder.sync_point = source->mailbox.sync_point(); 1339 resource->mailbox_holder.sync_token = source->mailbox.sync_token();
1341 source->mailbox.set_sync_point(0); 1340 source->mailbox.set_sync_token(gpu::SyncToken());
1342 } 1341 }
1343 } 1342 }
1344 1343
1345 void ResourceProvider::DeleteAndReturnUnusedResourcesToChild( 1344 void ResourceProvider::DeleteAndReturnUnusedResourcesToChild(
1346 ChildMap::iterator child_it, 1345 ChildMap::iterator child_it,
1347 DeleteStyle style, 1346 DeleteStyle style,
1348 const ResourceIdArray& unused) { 1347 const ResourceIdArray& unused) {
1349 DCHECK(thread_checker_.CalledOnValidThread()); 1348 DCHECK(thread_checker_.CalledOnValidThread());
1350 DCHECK(child_it != children_.end()); 1349 DCHECK(child_it != children_.end());
1351 Child* child_info = &child_it->second; 1350 Child* child_info = &child_it->second;
1352 1351
1353 if (unused.empty() && !child_info->marked_for_deletion) 1352 if (unused.empty() && !child_info->marked_for_deletion)
1354 return; 1353 return;
1355 1354
1356 ReturnedResourceArray to_return; 1355 ReturnedResourceArray to_return;
1357 1356
1358 GLES2Interface* gl = ContextGL(); 1357 GLES2Interface* gl = ContextGL();
1359 bool need_sync_point = false; 1358 bool need_sync_token = false;
1360 for (size_t i = 0; i < unused.size(); ++i) { 1359 for (size_t i = 0; i < unused.size(); ++i) {
1361 ResourceId local_id = unused[i]; 1360 ResourceId local_id = unused[i];
1362 1361
1363 ResourceMap::iterator it = resources_.find(local_id); 1362 ResourceMap::iterator it = resources_.find(local_id);
1364 CHECK(it != resources_.end()); 1363 CHECK(it != resources_.end());
1365 Resource& resource = it->second; 1364 Resource& resource = it->second;
1366 1365
1367 DCHECK(!resource.locked_for_write); 1366 DCHECK(!resource.locked_for_write);
1368 DCHECK(child_info->parent_to_child_map.count(local_id)); 1367 DCHECK(child_info->parent_to_child_map.count(local_id));
1369 1368
(...skipping 29 matching lines...) Expand all
1399 1398
1400 gl->BindTexture(resource.target, resource.gl_id); 1399 gl->BindTexture(resource.target, resource.gl_id);
1401 gl->TexParameteri(resource.target, GL_TEXTURE_MIN_FILTER, 1400 gl->TexParameteri(resource.target, GL_TEXTURE_MIN_FILTER,
1402 resource.original_filter); 1401 resource.original_filter);
1403 gl->TexParameteri(resource.target, GL_TEXTURE_MAG_FILTER, 1402 gl->TexParameteri(resource.target, GL_TEXTURE_MAG_FILTER,
1404 resource.original_filter); 1403 resource.original_filter);
1405 } 1404 }
1406 1405
1407 ReturnedResource returned; 1406 ReturnedResource returned;
1408 returned.id = child_id; 1407 returned.id = child_id;
1409 returned.sync_point = resource.mailbox.sync_point(); 1408 returned.sync_token = resource.mailbox.sync_token();
1410 if (!returned.sync_point && resource.type == RESOURCE_TYPE_GL_TEXTURE) 1409 need_sync_token |= (!returned.sync_token.HasData() &&
1411 need_sync_point = true; 1410 resource.type == RESOURCE_TYPE_GL_TEXTURE);
1412 returned.count = resource.imported_count; 1411 returned.count = resource.imported_count;
1413 returned.lost = is_lost; 1412 returned.lost = is_lost;
1414 to_return.push_back(returned); 1413 to_return.push_back(returned);
1415 1414
1416 child_info->parent_to_child_map.erase(local_id); 1415 child_info->parent_to_child_map.erase(local_id);
1417 child_info->child_to_parent_map.erase(child_id); 1416 child_info->child_to_parent_map.erase(child_id);
1418 resource.imported_count = 0; 1417 resource.imported_count = 0;
1419 DeleteResourceInternal(it, style); 1418 DeleteResourceInternal(it, style);
1420 } 1419 }
1421 if (need_sync_point && child_info->needs_sync_points) { 1420 if (need_sync_token && child_info->needs_sync_tokens) {
1422 DCHECK(gl); 1421 DCHECK(gl);
1423 GLuint sync_point = gl->InsertSyncPointCHROMIUM(); 1422 gpu::SyncToken sync_token(gl->InsertSyncPointCHROMIUM());
1424 for (size_t i = 0; i < to_return.size(); ++i) { 1423 for (size_t i = 0; i < to_return.size(); ++i) {
1425 if (!to_return[i].sync_point) 1424 if (!to_return[i].sync_token.HasData())
1426 to_return[i].sync_point = sync_point; 1425 to_return[i].sync_token = sync_token;
1427 } 1426 }
1428 } 1427 }
1429 1428
1430 if (!to_return.empty()) 1429 if (!to_return.empty())
1431 child_info->return_callback.Run(to_return, 1430 child_info->return_callback.Run(to_return,
1432 blocking_main_thread_task_runner_); 1431 blocking_main_thread_task_runner_);
1433 1432
1434 if (child_info->marked_for_deletion && 1433 if (child_info->marked_for_deletion &&
1435 child_info->parent_to_child_map.empty()) { 1434 child_info->parent_to_child_map.empty()) {
1436 DCHECK(child_info->child_to_parent_map.empty()); 1435 DCHECK(child_info->child_to_parent_map.empty());
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 DCHECK(resource->image_id); 1539 DCHECK(resource->image_id);
1541 1540
1542 // Release image currently bound to texture. 1541 // Release image currently bound to texture.
1543 if (resource->bound_image_id) 1542 if (resource->bound_image_id)
1544 gl->ReleaseTexImage2DCHROMIUM(resource->target, resource->bound_image_id); 1543 gl->ReleaseTexImage2DCHROMIUM(resource->target, resource->bound_image_id);
1545 gl->BindTexImage2DCHROMIUM(resource->target, resource->image_id); 1544 gl->BindTexImage2DCHROMIUM(resource->target, resource->image_id);
1546 resource->bound_image_id = resource->image_id; 1545 resource->bound_image_id = resource->image_id;
1547 resource->dirty_image = false; 1546 resource->dirty_image = false;
1548 } 1547 }
1549 1548
1550 void ResourceProvider::WaitSyncPointIfNeeded(ResourceId id) { 1549 void ResourceProvider::WaitSyncTokenIfNeeded(ResourceId id) {
1551 Resource* resource = GetResource(id); 1550 Resource* resource = GetResource(id);
1552 DCHECK_EQ(resource->exported_count, 0); 1551 DCHECK_EQ(resource->exported_count, 0);
1553 DCHECK(resource->allocated); 1552 DCHECK(resource->allocated);
1554 if (resource->type != RESOURCE_TYPE_GL_TEXTURE || resource->gl_id) 1553 if (resource->type != RESOURCE_TYPE_GL_TEXTURE || resource->gl_id)
1555 return; 1554 return;
1556 if (!resource->mailbox.sync_point()) 1555 if (resource->mailbox.sync_token().HasData()) {
1557 return; 1556 DCHECK(resource->mailbox.IsValid());
1558 DCHECK(resource->mailbox.IsValid()); 1557 GLES2Interface* gl = ContextGL();
1559 GLES2Interface* gl = ContextGL(); 1558 DCHECK(gl);
1560 DCHECK(gl); 1559 gl->WaitSyncTokenCHROMIUM(resource->mailbox.sync_token().GetConstData());
1561 gl->WaitSyncPointCHROMIUM(resource->mailbox.sync_point()); 1560 resource->mailbox.set_sync_token(gpu::SyncToken());
1562 resource->mailbox.set_sync_point(0); 1561 }
1563 } 1562 }
1564 1563
1565 GLint ResourceProvider::GetActiveTextureUnit(GLES2Interface* gl) { 1564 GLint ResourceProvider::GetActiveTextureUnit(GLES2Interface* gl) {
1566 GLint active_unit = 0; 1565 GLint active_unit = 0;
1567 gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit); 1566 gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit);
1568 return active_unit; 1567 return active_unit;
1569 } 1568 }
1570 1569
1571 GLenum ResourceProvider::GetImageTextureTarget(ResourceFormat format) { 1570 GLenum ResourceProvider::GetImageTextureTarget(ResourceFormat format) {
1572 gfx::BufferFormat buffer_format = BufferFormat(format); 1571 gfx::BufferFormat buffer_format = BufferFormat(format);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1640 const int kImportance = 2; 1639 const int kImportance = 2;
1641 pmd->CreateSharedGlobalAllocatorDump(guid); 1640 pmd->CreateSharedGlobalAllocatorDump(guid);
1642 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); 1641 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance);
1643 } 1642 }
1644 } 1643 }
1645 1644
1646 return true; 1645 return true;
1647 } 1646 }
1648 1647
1649 } // namespace cc 1648 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698