Chromium Code Reviews| 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 <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 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 266 exported_count(0), | 266 exported_count(0), |
| 267 dirty_image(false), | 267 dirty_image(false), |
| 268 locked_for_write(false), | 268 locked_for_write(false), |
| 269 lost(false), | 269 lost(false), |
| 270 marked_for_deletion(false), | 270 marked_for_deletion(false), |
| 271 pending_set_pixels(false), | 271 pending_set_pixels(false), |
| 272 set_pixels_completion_forced(false), | 272 set_pixels_completion_forced(false), |
| 273 allocated(false), | 273 allocated(false), |
| 274 read_lock_fences_enabled(false), | 274 read_lock_fences_enabled(false), |
| 275 has_shared_bitmap_id(false), | 275 has_shared_bitmap_id(false), |
| 276 allow_overlay(false), | |
| 277 read_lock_fence(NULL), | 276 read_lock_fence(NULL), |
| 278 size(size), | 277 size(size), |
| 279 origin(origin), | 278 origin(origin), |
| 280 target(target), | 279 target(target), |
| 281 original_filter(filter), | 280 original_filter(filter), |
| 282 filter(filter), | 281 filter(filter), |
| 283 image_id(0), | 282 image_id(0), |
| 284 bound_image_id(0), | 283 bound_image_id(0), |
| 285 texture_pool(texture_pool), | 284 texture_pool(texture_pool), |
| 286 wrap_mode(wrap_mode), | 285 wrap_mode(wrap_mode), |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 310 exported_count(0), | 309 exported_count(0), |
| 311 dirty_image(false), | 310 dirty_image(false), |
| 312 locked_for_write(false), | 311 locked_for_write(false), |
| 313 lost(false), | 312 lost(false), |
| 314 marked_for_deletion(false), | 313 marked_for_deletion(false), |
| 315 pending_set_pixels(false), | 314 pending_set_pixels(false), |
| 316 set_pixels_completion_forced(false), | 315 set_pixels_completion_forced(false), |
| 317 allocated(false), | 316 allocated(false), |
| 318 read_lock_fences_enabled(false), | 317 read_lock_fences_enabled(false), |
| 319 has_shared_bitmap_id(!!bitmap), | 318 has_shared_bitmap_id(!!bitmap), |
| 320 allow_overlay(false), | |
| 321 read_lock_fence(NULL), | 319 read_lock_fence(NULL), |
| 322 size(size), | 320 size(size), |
| 323 origin(origin), | 321 origin(origin), |
| 324 target(0), | 322 target(0), |
| 325 original_filter(filter), | 323 original_filter(filter), |
| 326 filter(filter), | 324 filter(filter), |
| 327 image_id(0), | 325 image_id(0), |
| 328 bound_image_id(0), | 326 bound_image_id(0), |
| 329 texture_pool(0), | 327 texture_pool(0), |
| 330 wrap_mode(wrap_mode), | 328 wrap_mode(wrap_mode), |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 355 exported_count(0), | 353 exported_count(0), |
| 356 dirty_image(false), | 354 dirty_image(false), |
| 357 locked_for_write(false), | 355 locked_for_write(false), |
| 358 lost(false), | 356 lost(false), |
| 359 marked_for_deletion(false), | 357 marked_for_deletion(false), |
| 360 pending_set_pixels(false), | 358 pending_set_pixels(false), |
| 361 set_pixels_completion_forced(false), | 359 set_pixels_completion_forced(false), |
| 362 allocated(false), | 360 allocated(false), |
| 363 read_lock_fences_enabled(false), | 361 read_lock_fences_enabled(false), |
| 364 has_shared_bitmap_id(true), | 362 has_shared_bitmap_id(true), |
| 365 allow_overlay(false), | |
| 366 read_lock_fence(NULL), | 363 read_lock_fence(NULL), |
| 367 size(size), | 364 size(size), |
| 368 origin(origin), | 365 origin(origin), |
| 369 target(0), | 366 target(0), |
| 370 original_filter(filter), | 367 original_filter(filter), |
| 371 filter(filter), | 368 filter(filter), |
| 372 image_id(0), | 369 image_id(0), |
| 373 bound_image_id(0), | 370 bound_image_id(0), |
| 374 texture_pool(0), | 371 texture_pool(0), |
| 375 wrap_mode(wrap_mode), | 372 wrap_mode(wrap_mode), |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 449 Resource* resource = GetResource(id); | 446 Resource* resource = GetResource(id); |
| 450 return resource->lock_for_read_count > 0 || resource->exported_count > 0 || | 447 return resource->lock_for_read_count > 0 || resource->exported_count > 0 || |
| 451 resource->lost; | 448 resource->lost; |
| 452 } | 449 } |
| 453 | 450 |
| 454 bool ResourceProvider::IsLost(ResourceId id) { | 451 bool ResourceProvider::IsLost(ResourceId id) { |
| 455 Resource* resource = GetResource(id); | 452 Resource* resource = GetResource(id); |
| 456 return resource->lost; | 453 return resource->lost; |
| 457 } | 454 } |
| 458 | 455 |
| 459 bool ResourceProvider::AllowOverlay(ResourceId id) { | |
| 460 Resource* resource = GetResource(id); | |
| 461 return resource->allow_overlay; | |
| 462 } | |
| 463 | |
| 464 ResourceId ResourceProvider::CreateResource(const gfx::Size& size, | 456 ResourceId ResourceProvider::CreateResource(const gfx::Size& size, |
| 465 GLint wrap_mode, | 457 GLint wrap_mode, |
| 466 TextureHint hint, | 458 TextureHint hint, |
| 467 ResourceFormat format) { | 459 ResourceFormat format) { |
| 468 DCHECK(!size.IsEmpty()); | 460 DCHECK(!size.IsEmpty()); |
| 469 switch (default_resource_type_) { | 461 switch (default_resource_type_) { |
| 470 case RESOURCE_TYPE_GL_TEXTURE: | 462 case RESOURCE_TYPE_GL_TEXTURE: |
| 471 return CreateGLTexture(size, | 463 return CreateGLTexture(size, |
| 472 GL_TEXTURE_2D, | 464 GL_TEXTURE_2D, |
| 473 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, | 465 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 564 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( | 556 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
| 565 const TextureMailbox& mailbox, | 557 const TextureMailbox& mailbox, |
| 566 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { | 558 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { |
| 567 DCHECK(thread_checker_.CalledOnValidThread()); | 559 DCHECK(thread_checker_.CalledOnValidThread()); |
| 568 // Just store the information. Mailbox will be consumed in LockForRead(). | 560 // Just store the information. Mailbox will be consumed in LockForRead(). |
| 569 ResourceId id = next_id_++; | 561 ResourceId id = next_id_++; |
| 570 DCHECK(mailbox.IsValid()); | 562 DCHECK(mailbox.IsValid()); |
| 571 Resource* resource = nullptr; | 563 Resource* resource = nullptr; |
| 572 if (mailbox.IsTexture()) { | 564 if (mailbox.IsTexture()) { |
| 573 resource = InsertResource( | 565 resource = InsertResource( |
| 574 id, Resource(0, gfx::Size(), Resource::EXTERNAL, mailbox.target(), | 566 id, Resource(0, mailbox.size(), Resource::EXTERNAL, mailbox.target(), |
|
danakj
2015/05/29 20:04:15
if we're not going to use the size maybe just leav
achaulk
2015/06/01 15:43:10
Done.
| |
| 575 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 0, | 567 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 0, |
| 576 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888)); | 568 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888)); |
| 577 } else { | 569 } else { |
| 578 DCHECK(mailbox.IsSharedMemory()); | 570 DCHECK(mailbox.IsSharedMemory()); |
| 579 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); | 571 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); |
| 580 uint8_t* pixels = shared_bitmap->pixels(); | 572 uint8_t* pixels = shared_bitmap->pixels(); |
| 581 DCHECK(pixels); | 573 DCHECK(pixels); |
| 582 resource = InsertResource( | 574 resource = InsertResource( |
| 583 id, Resource(pixels, shared_bitmap, mailbox.shared_memory_size(), | 575 id, Resource(pixels, shared_bitmap, mailbox.size(), Resource::EXTERNAL, |
| 584 Resource::EXTERNAL, GL_LINEAR, GL_CLAMP_TO_EDGE)); | 576 GL_LINEAR, GL_CLAMP_TO_EDGE)); |
| 585 } | 577 } |
| 586 resource->allocated = true; | 578 resource->allocated = true; |
| 587 resource->mailbox = mailbox; | 579 resource->mailbox = mailbox; |
| 588 resource->release_callback_impl = | 580 resource->release_callback_impl = |
| 589 base::Bind(&SingleReleaseCallbackImpl::Run, | 581 base::Bind(&SingleReleaseCallbackImpl::Run, |
| 590 base::Owned(release_callback_impl.release())); | 582 base::Owned(release_callback_impl.release())); |
| 591 resource->allow_overlay = mailbox.allow_overlay(); | |
| 592 return id; | 583 return id; |
| 593 } | 584 } |
| 594 | 585 |
| 595 void ResourceProvider::DeleteResource(ResourceId id) { | 586 void ResourceProvider::DeleteResource(ResourceId id) { |
| 596 DCHECK(thread_checker_.CalledOnValidThread()); | 587 DCHECK(thread_checker_.CalledOnValidThread()); |
| 597 ResourceMap::iterator it = resources_.find(id); | 588 ResourceMap::iterator it = resources_.find(id); |
| 598 CHECK(it != resources_.end()); | 589 CHECK(it != resources_.end()); |
| 599 Resource* resource = &it->second; | 590 Resource* resource = &it->second; |
| 600 DCHECK(!resource->marked_for_deletion); | 591 DCHECK(!resource->marked_for_deletion); |
| 601 DCHECK_EQ(resource->imported_count, 0); | 592 DCHECK_EQ(resource->imported_count, 0); |
| (...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1381 it->is_repeated ? GL_REPEAT : GL_CLAMP_TO_EDGE, | 1372 it->is_repeated ? GL_REPEAT : GL_CLAMP_TO_EDGE, |
| 1382 TEXTURE_HINT_IMMUTABLE, it->format)); | 1373 TEXTURE_HINT_IMMUTABLE, it->format)); |
| 1383 resource->mailbox = TextureMailbox(it->mailbox_holder.mailbox, | 1374 resource->mailbox = TextureMailbox(it->mailbox_holder.mailbox, |
| 1384 it->mailbox_holder.texture_target, | 1375 it->mailbox_holder.texture_target, |
| 1385 it->mailbox_holder.sync_point); | 1376 it->mailbox_holder.sync_point); |
| 1386 } | 1377 } |
| 1387 resource->child_id = child; | 1378 resource->child_id = child; |
| 1388 // Don't allocate a texture for a child. | 1379 // Don't allocate a texture for a child. |
| 1389 resource->allocated = true; | 1380 resource->allocated = true; |
| 1390 resource->imported_count = 1; | 1381 resource->imported_count = 1; |
| 1391 resource->allow_overlay = it->allow_overlay; | |
| 1392 child_info.parent_to_child_map[local_id] = it->id; | 1382 child_info.parent_to_child_map[local_id] = it->id; |
| 1393 child_info.child_to_parent_map[it->id] = local_id; | 1383 child_info.child_to_parent_map[it->id] = local_id; |
| 1394 } | 1384 } |
| 1395 } | 1385 } |
| 1396 | 1386 |
| 1397 void ResourceProvider::DeclareUsedResourcesFromChild( | 1387 void ResourceProvider::DeclareUsedResourcesFromChild( |
| 1398 int child, | 1388 int child, |
| 1399 const ResourceIdSet& resources_from_child) { | 1389 const ResourceIdSet& resources_from_child) { |
| 1400 DCHECK(thread_checker_.CalledOnValidThread()); | 1390 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1401 | 1391 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1485 DCHECK(!source->locked_for_write); | 1475 DCHECK(!source->locked_for_write); |
| 1486 DCHECK(!source->lock_for_read_count); | 1476 DCHECK(!source->lock_for_read_count); |
| 1487 DCHECK(source->origin != Resource::EXTERNAL || source->mailbox.IsValid()); | 1477 DCHECK(source->origin != Resource::EXTERNAL || source->mailbox.IsValid()); |
| 1488 DCHECK(source->allocated); | 1478 DCHECK(source->allocated); |
| 1489 resource->id = id; | 1479 resource->id = id; |
| 1490 resource->format = source->format; | 1480 resource->format = source->format; |
| 1491 resource->mailbox_holder.texture_target = source->target; | 1481 resource->mailbox_holder.texture_target = source->target; |
| 1492 resource->filter = source->filter; | 1482 resource->filter = source->filter; |
| 1493 resource->size = source->size; | 1483 resource->size = source->size; |
| 1494 resource->is_repeated = (source->wrap_mode == GL_REPEAT); | 1484 resource->is_repeated = (source->wrap_mode == GL_REPEAT); |
| 1495 resource->allow_overlay = source->allow_overlay; | |
| 1496 | 1485 |
| 1497 if (source->type == RESOURCE_TYPE_BITMAP) { | 1486 if (source->type == RESOURCE_TYPE_BITMAP) { |
| 1498 resource->mailbox_holder.mailbox = source->shared_bitmap_id; | 1487 resource->mailbox_holder.mailbox = source->shared_bitmap_id; |
| 1499 resource->is_software = true; | 1488 resource->is_software = true; |
| 1500 } else if (!source->mailbox.IsValid()) { | 1489 } else if (!source->mailbox.IsValid()) { |
| 1501 LazyCreate(source); | 1490 LazyCreate(source); |
| 1502 DCHECK(source->gl_id); | 1491 DCHECK(source->gl_id); |
| 1503 DCHECK(source->origin == Resource::INTERNAL); | 1492 DCHECK(source->origin == Resource::INTERNAL); |
| 1504 if (source->image_id) { | 1493 if (source->image_id) { |
| 1505 DCHECK(source->dirty_image); | 1494 DCHECK(source->dirty_image); |
| (...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2057 } | 2046 } |
| 2058 | 2047 |
| 2059 class GrContext* ResourceProvider::GrContext(bool worker_context) const { | 2048 class GrContext* ResourceProvider::GrContext(bool worker_context) const { |
| 2060 ContextProvider* context_provider = | 2049 ContextProvider* context_provider = |
| 2061 worker_context ? output_surface_->worker_context_provider() | 2050 worker_context ? output_surface_->worker_context_provider() |
| 2062 : output_surface_->context_provider(); | 2051 : output_surface_->context_provider(); |
| 2063 return context_provider ? context_provider->GrContext() : NULL; | 2052 return context_provider ? context_provider->GrContext() : NULL; |
| 2064 } | 2053 } |
| 2065 | 2054 |
| 2066 } // namespace cc | 2055 } // namespace cc |
| OLD | NEW |