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

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

Issue 1186393004: gpu: Remove async texture uploads. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 3 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
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/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/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 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 gl_upload_query_id(0), 210 gl_upload_query_id(0),
211 gl_read_lock_query_id(0), 211 gl_read_lock_query_id(0),
212 pixels(NULL), 212 pixels(NULL),
213 lock_for_read_count(0), 213 lock_for_read_count(0),
214 imported_count(0), 214 imported_count(0),
215 exported_count(0), 215 exported_count(0),
216 dirty_image(false), 216 dirty_image(false),
217 locked_for_write(false), 217 locked_for_write(false),
218 lost(false), 218 lost(false),
219 marked_for_deletion(false), 219 marked_for_deletion(false),
220 pending_set_pixels(false),
221 set_pixels_completion_forced(false),
222 allocated(false), 220 allocated(false),
223 read_lock_fences_enabled(false), 221 read_lock_fences_enabled(false),
224 has_shared_bitmap_id(false), 222 has_shared_bitmap_id(false),
225 read_lock_fence(NULL), 223 read_lock_fence(NULL),
226 size(size), 224 size(size),
227 origin(origin), 225 origin(origin),
228 target(target), 226 target(target),
229 original_filter(filter), 227 original_filter(filter),
230 filter(filter), 228 filter(filter),
231 image_id(0), 229 image_id(0),
(...skipping 21 matching lines...) Expand all
253 gl_upload_query_id(0), 251 gl_upload_query_id(0),
254 gl_read_lock_query_id(0), 252 gl_read_lock_query_id(0),
255 pixels(pixels), 253 pixels(pixels),
256 lock_for_read_count(0), 254 lock_for_read_count(0),
257 imported_count(0), 255 imported_count(0),
258 exported_count(0), 256 exported_count(0),
259 dirty_image(false), 257 dirty_image(false),
260 locked_for_write(false), 258 locked_for_write(false),
261 lost(false), 259 lost(false),
262 marked_for_deletion(false), 260 marked_for_deletion(false),
263 pending_set_pixels(false),
264 set_pixels_completion_forced(false),
265 allocated(false), 261 allocated(false),
266 read_lock_fences_enabled(false), 262 read_lock_fences_enabled(false),
267 has_shared_bitmap_id(!!bitmap), 263 has_shared_bitmap_id(!!bitmap),
268 read_lock_fence(NULL), 264 read_lock_fence(NULL),
269 size(size), 265 size(size),
270 origin(origin), 266 origin(origin),
271 target(0), 267 target(0),
272 original_filter(filter), 268 original_filter(filter),
273 filter(filter), 269 filter(filter),
274 image_id(0), 270 image_id(0),
(...skipping 22 matching lines...) Expand all
297 gl_upload_query_id(0), 293 gl_upload_query_id(0),
298 gl_read_lock_query_id(0), 294 gl_read_lock_query_id(0),
299 pixels(NULL), 295 pixels(NULL),
300 lock_for_read_count(0), 296 lock_for_read_count(0),
301 imported_count(0), 297 imported_count(0),
302 exported_count(0), 298 exported_count(0),
303 dirty_image(false), 299 dirty_image(false),
304 locked_for_write(false), 300 locked_for_write(false),
305 lost(false), 301 lost(false),
306 marked_for_deletion(false), 302 marked_for_deletion(false),
307 pending_set_pixels(false),
308 set_pixels_completion_forced(false),
309 allocated(false), 303 allocated(false),
310 read_lock_fences_enabled(false), 304 read_lock_fences_enabled(false),
311 has_shared_bitmap_id(true), 305 has_shared_bitmap_id(true),
312 read_lock_fence(NULL), 306 read_lock_fence(NULL),
313 size(size), 307 size(size),
314 origin(origin), 308 origin(origin),
315 target(0), 309 target(0),
316 original_filter(filter), 310 original_filter(filter),
317 filter(filter), 311 filter(filter),
318 image_id(0), 312 image_id(0),
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 false); 532 false);
539 } 533 }
540 534
541 void ResourceProvider::DeleteResource(ResourceId id) { 535 void ResourceProvider::DeleteResource(ResourceId id) {
542 DCHECK(thread_checker_.CalledOnValidThread()); 536 DCHECK(thread_checker_.CalledOnValidThread());
543 ResourceMap::iterator it = resources_.find(id); 537 ResourceMap::iterator it = resources_.find(id);
544 CHECK(it != resources_.end()); 538 CHECK(it != resources_.end());
545 Resource* resource = &it->second; 539 Resource* resource = &it->second;
546 DCHECK(!resource->marked_for_deletion); 540 DCHECK(!resource->marked_for_deletion);
547 DCHECK_EQ(resource->imported_count, 0); 541 DCHECK_EQ(resource->imported_count, 0);
548 DCHECK(resource->pending_set_pixels || !resource->locked_for_write); 542 DCHECK(!resource->locked_for_write);
549 543
550 if (resource->exported_count > 0 || resource->lock_for_read_count > 0 || 544 if (resource->exported_count > 0 || resource->lock_for_read_count > 0 ||
551 !ReadLockFenceHasPassed(resource)) { 545 !ReadLockFenceHasPassed(resource)) {
552 resource->marked_for_deletion = true; 546 resource->marked_for_deletion = true;
553 return; 547 return;
554 } else { 548 } else {
555 DeleteResourceInternal(it, NORMAL); 549 DeleteResourceInternal(it, NORMAL);
556 } 550 }
557 } 551 }
558 552
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 DCHECK_EQ(RGBA_8888, resource->format); 656 DCHECK_EQ(RGBA_8888, resource->format);
663 SkImageInfo source_info = 657 SkImageInfo source_info =
664 SkImageInfo::MakeN32Premul(image_size.width(), image_size.height()); 658 SkImageInfo::MakeN32Premul(image_size.width(), image_size.height());
665 size_t image_stride = image_size.width() * 4; 659 size_t image_stride = image_size.width() * 4;
666 660
667 ScopedWriteLockSoftware lock(this, id); 661 ScopedWriteLockSoftware lock(this, id);
668 SkCanvas dest(lock.sk_bitmap()); 662 SkCanvas dest(lock.sk_bitmap());
669 dest.writePixels(source_info, image, image_stride, 0, 0); 663 dest.writePixels(source_info, image, image_stride, 0, 0);
670 } else { 664 } else {
671 DCHECK(resource->gl_id); 665 DCHECK(resource->gl_id);
672 DCHECK(!resource->pending_set_pixels);
673 DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D)); 666 DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D));
674 GLES2Interface* gl = ContextGL(); 667 GLES2Interface* gl = ContextGL();
675 DCHECK(gl); 668 DCHECK(gl);
676 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id); 669 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id);
677 670
678 if (resource->format == ETC1) { 671 if (resource->format == ETC1) {
679 int image_bytes = ResourceUtil::CheckedSizeInBytes<int>(image_size, ETC1); 672 int image_bytes = ResourceUtil::CheckedSizeInBytes<int>(image_size, ETC1);
680 gl->CompressedTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(ETC1), 673 gl->CompressedTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(ETC1),
681 image_size.width(), image_size.height(), 0, 674 image_size.width(), image_size.height(), 0,
682 image_bytes, image); 675 image_bytes, image);
(...skipping 17 matching lines...) Expand all
700 ResourceProvider::Resource* ResourceProvider::GetResource(ResourceId id) { 693 ResourceProvider::Resource* ResourceProvider::GetResource(ResourceId id) {
701 DCHECK(thread_checker_.CalledOnValidThread()); 694 DCHECK(thread_checker_.CalledOnValidThread());
702 DCHECK(id); 695 DCHECK(id);
703 ResourceMap::iterator it = resources_.find(id); 696 ResourceMap::iterator it = resources_.find(id);
704 DCHECK(it != resources_.end()); 697 DCHECK(it != resources_.end());
705 return &it->second; 698 return &it->second;
706 } 699 }
707 700
708 const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) { 701 const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
709 Resource* resource = GetResource(id); 702 Resource* resource = GetResource(id);
710 DCHECK(!resource->locked_for_write || 703 DCHECK(!resource->locked_for_write) << "locked for write: "
711 resource->set_pixels_completion_forced) << 704 << resource->locked_for_write;
712 "locked for write: " << resource->locked_for_write <<
713 " pixels completion forced: " << resource->set_pixels_completion_forced;
714 DCHECK_EQ(resource->exported_count, 0); 705 DCHECK_EQ(resource->exported_count, 0);
715 // Uninitialized! Call SetPixels or LockForWrite first. 706 // Uninitialized! Call SetPixels or LockForWrite first.
716 DCHECK(resource->allocated); 707 DCHECK(resource->allocated);
717 708
718 LazyCreate(resource); 709 LazyCreate(resource);
719 710
720 if (resource->type == RESOURCE_TYPE_GL_TEXTURE && !resource->gl_id) { 711 if (resource->type == RESOURCE_TYPE_GL_TEXTURE && !resource->gl_id) {
721 DCHECK(resource->origin != Resource::INTERNAL); 712 DCHECK(resource->origin != Resource::INTERNAL);
722 DCHECK(resource->mailbox.IsTexture()); 713 DCHECK(resource->mailbox.IsTexture());
723 714
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 child_info->return_callback.Run(to_return, 1451 child_info->return_callback.Run(to_return,
1461 blocking_main_thread_task_runner_); 1452 blocking_main_thread_task_runner_);
1462 1453
1463 if (child_info->marked_for_deletion && 1454 if (child_info->marked_for_deletion &&
1464 child_info->parent_to_child_map.empty()) { 1455 child_info->parent_to_child_map.empty()) {
1465 DCHECK(child_info->child_to_parent_map.empty()); 1456 DCHECK(child_info->child_to_parent_map.empty());
1466 children_.erase(child_it); 1457 children_.erase(child_it);
1467 } 1458 }
1468 } 1459 }
1469 1460
1470 void ResourceProvider::AcquirePixelBuffer(ResourceId id) {
1471 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1472 "ResourceProvider::AcquirePixelBuffer");
1473
1474 Resource* resource = GetResource(id);
1475 DCHECK(resource->origin == Resource::INTERNAL);
1476 DCHECK_EQ(resource->exported_count, 0);
1477 DCHECK(!resource->image_id);
1478 DCHECK_NE(ETC1, resource->format);
1479
1480 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
1481 GLES2Interface* gl = ContextGL();
1482 DCHECK(gl);
1483 if (!resource->gl_pixel_buffer_id)
1484 resource->gl_pixel_buffer_id = buffer_id_allocator_->NextId();
1485 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
1486 resource->gl_pixel_buffer_id);
1487 size_t resource_bytes = ResourceUtil::UncheckedSizeInBytesAligned<size_t>(
1488 resource->size, resource->format);
1489 gl->BufferData(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, resource_bytes, NULL,
1490 GL_DYNAMIC_DRAW);
1491 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1492 }
1493
1494 void ResourceProvider::ReleasePixelBuffer(ResourceId id) {
1495 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1496 "ResourceProvider::ReleasePixelBuffer");
1497
1498 Resource* resource = GetResource(id);
1499 DCHECK(resource->origin == Resource::INTERNAL);
1500 DCHECK_EQ(resource->exported_count, 0);
1501 DCHECK(!resource->image_id);
1502
1503 // The pixel buffer can be released while there is a pending "set pixels"
1504 // if completion has been forced. Any shared memory associated with this
1505 // pixel buffer will not be freed until the waitAsyncTexImage2DCHROMIUM
1506 // command has been processed on the service side. It is also safe to
1507 // reuse any query id associated with this resource before they complete
1508 // as each new query has a unique submit count.
1509 if (resource->pending_set_pixels) {
1510 DCHECK(resource->set_pixels_completion_forced);
1511 resource->pending_set_pixels = false;
1512 resource->locked_for_write = false;
1513 }
1514
1515 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
1516 if (!resource->gl_pixel_buffer_id)
1517 return;
1518 GLES2Interface* gl = ContextGL();
1519 DCHECK(gl);
1520 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
1521 resource->gl_pixel_buffer_id);
1522 gl->BufferData(
1523 GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0, NULL, GL_DYNAMIC_DRAW);
1524 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1525 }
1526
1527 uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id, int* stride) {
1528 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1529 "ResourceProvider::MapPixelBuffer");
1530
1531 Resource* resource = GetResource(id);
1532 DCHECK(resource->origin == Resource::INTERNAL);
1533 DCHECK_EQ(resource->exported_count, 0);
1534 DCHECK(!resource->image_id);
1535
1536 *stride = 0;
1537 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
1538 GLES2Interface* gl = ContextGL();
1539 DCHECK(gl);
1540 DCHECK(resource->gl_pixel_buffer_id);
1541 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
1542 resource->gl_pixel_buffer_id);
1543 uint8_t* image = static_cast<uint8_t*>(gl->MapBufferCHROMIUM(
1544 GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, GL_WRITE_ONLY));
1545 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1546 // Buffer is required to be 4-byte aligned.
1547 CHECK(!(reinterpret_cast<intptr_t>(image) & 3));
1548 return image;
1549 }
1550
1551 void ResourceProvider::UnmapPixelBuffer(ResourceId id) {
1552 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1553 "ResourceProvider::UnmapPixelBuffer");
1554
1555 Resource* resource = GetResource(id);
1556 DCHECK(resource->origin == Resource::INTERNAL);
1557 DCHECK_EQ(resource->exported_count, 0);
1558 DCHECK(!resource->image_id);
1559
1560 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
1561 GLES2Interface* gl = ContextGL();
1562 DCHECK(gl);
1563 DCHECK(resource->gl_pixel_buffer_id);
1564 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
1565 resource->gl_pixel_buffer_id);
1566 gl->UnmapBufferCHROMIUM(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM);
1567 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1568 }
1569
1570 GLenum ResourceProvider::BindForSampling(ResourceId resource_id, 1461 GLenum ResourceProvider::BindForSampling(ResourceId resource_id,
1571 GLenum unit, 1462 GLenum unit,
1572 GLenum filter) { 1463 GLenum filter) {
1573 DCHECK(thread_checker_.CalledOnValidThread()); 1464 DCHECK(thread_checker_.CalledOnValidThread());
1574 GLES2Interface* gl = ContextGL(); 1465 GLES2Interface* gl = ContextGL();
1575 ResourceMap::iterator it = resources_.find(resource_id); 1466 ResourceMap::iterator it = resources_.find(resource_id);
1576 DCHECK(it != resources_.end()); 1467 DCHECK(it != resources_.end());
1577 Resource* resource = &it->second; 1468 Resource* resource = &it->second;
1578 DCHECK(resource->lock_for_read_count); 1469 DCHECK(resource->lock_for_read_count);
1579 DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced); 1470 DCHECK(!resource->locked_for_write);
1580 1471
1581 ScopedSetActiveTexture scoped_active_tex(gl, unit); 1472 ScopedSetActiveTexture scoped_active_tex(gl, unit);
1582 GLenum target = resource->target; 1473 GLenum target = resource->target;
1583 gl->BindTexture(target, resource->gl_id); 1474 gl->BindTexture(target, resource->gl_id);
1584 if (filter != resource->filter) { 1475 if (filter != resource->filter) {
1585 gl->TexParameteri(target, GL_TEXTURE_MIN_FILTER, filter); 1476 gl->TexParameteri(target, GL_TEXTURE_MIN_FILTER, filter);
1586 gl->TexParameteri(target, GL_TEXTURE_MAG_FILTER, filter); 1477 gl->TexParameteri(target, GL_TEXTURE_MAG_FILTER, filter);
1587 resource->filter = filter; 1478 resource->filter = filter;
1588 } 1479 }
1589 1480
1590 if (resource->image_id && resource->dirty_image) 1481 if (resource->image_id && resource->dirty_image)
1591 BindImageForSampling(resource); 1482 BindImageForSampling(resource);
1592 1483
1593 return target; 1484 return target;
1594 } 1485 }
1595 1486
1596 void ResourceProvider::BeginSetPixels(ResourceId id) {
1597 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1598 "ResourceProvider::BeginSetPixels");
1599
1600 Resource* resource = GetResource(id);
1601 DCHECK(!resource->pending_set_pixels);
1602
1603 LazyCreate(resource);
1604 DCHECK(resource->origin == Resource::INTERNAL);
1605 DCHECK(resource->gl_id || resource->allocated);
1606 DCHECK(ReadLockFenceHasPassed(resource));
1607 DCHECK(!resource->image_id);
1608
1609 bool allocate = !resource->allocated;
1610 resource->allocated = true;
1611 LockForWrite(id);
1612
1613 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
1614 DCHECK(resource->gl_id);
1615 GLES2Interface* gl = ContextGL();
1616 DCHECK(gl);
1617 DCHECK(resource->gl_pixel_buffer_id);
1618 DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D));
1619 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id);
1620 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
1621 resource->gl_pixel_buffer_id);
1622 if (!resource->gl_upload_query_id)
1623 gl->GenQueriesEXT(1, &resource->gl_upload_query_id);
1624 gl->BeginQueryEXT(GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
1625 resource->gl_upload_query_id);
1626 if (allocate) {
1627 gl->AsyncTexImage2DCHROMIUM(GL_TEXTURE_2D,
1628 0, /* level */
1629 GLInternalFormat(resource->format),
1630 resource->size.width(),
1631 resource->size.height(),
1632 0, /* border */
1633 GLDataFormat(resource->format),
1634 GLDataType(resource->format),
1635 NULL);
1636 } else {
1637 gl->AsyncTexSubImage2DCHROMIUM(GL_TEXTURE_2D,
1638 0, /* level */
1639 0, /* x */
1640 0, /* y */
1641 resource->size.width(),
1642 resource->size.height(),
1643 GLDataFormat(resource->format),
1644 GLDataType(resource->format),
1645 NULL);
1646 }
1647 gl->EndQueryEXT(GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM);
1648 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
1649
1650 resource->pending_set_pixels = true;
1651 resource->set_pixels_completion_forced = false;
1652 }
1653
1654 void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) {
1655 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1656 "ResourceProvider::ForceSetPixelsToComplete");
1657
1658 Resource* resource = GetResource(id);
1659
1660 DCHECK(resource->locked_for_write);
1661 DCHECK(resource->pending_set_pixels);
1662 DCHECK(!resource->set_pixels_completion_forced);
1663
1664 if (resource->gl_id) {
1665 GLES2Interface* gl = ContextGL();
1666 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id);
1667 gl->WaitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D);
1668 gl->BindTexture(GL_TEXTURE_2D, 0);
1669 }
1670
1671 resource->set_pixels_completion_forced = true;
1672 }
1673
1674 bool ResourceProvider::DidSetPixelsComplete(ResourceId id) {
1675 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1676 "ResourceProvider::DidSetPixelsComplete");
1677
1678 Resource* resource = GetResource(id);
1679
1680 DCHECK(resource->locked_for_write);
1681 DCHECK(resource->pending_set_pixels);
1682
1683 if (resource->gl_id) {
1684 GLES2Interface* gl = ContextGL();
1685 DCHECK(gl);
1686 DCHECK(resource->gl_upload_query_id);
1687 GLuint complete = 1;
1688 gl->GetQueryObjectuivEXT(
1689 resource->gl_upload_query_id, GL_QUERY_RESULT_AVAILABLE_EXT, &complete);
1690 if (!complete)
1691 return false;
1692 }
1693
1694 resource->pending_set_pixels = false;
1695 UnlockForWrite(resource);
1696
1697 // Async set pixels commands are not necessarily processed in-sequence with
1698 // drawing commands. Read lock fences are required to ensure that async
1699 // commands don't access the resource while used for drawing.
1700 resource->read_lock_fences_enabled = true;
1701
1702 return true;
1703 }
1704
1705 void ResourceProvider::CreateForTesting(ResourceId id) { 1487 void ResourceProvider::CreateForTesting(ResourceId id) {
1706 LazyCreate(GetResource(id)); 1488 LazyCreate(GetResource(id));
1707 } 1489 }
1708 1490
1709 GLenum ResourceProvider::TargetForTesting(ResourceId id) { 1491 GLenum ResourceProvider::TargetForTesting(ResourceId id) {
1710 Resource* resource = GetResource(id); 1492 Resource* resource = GetResource(id);
1711 return resource->target; 1493 return resource->target;
1712 } 1494 }
1713 1495
1714 void ResourceProvider::LazyCreate(Resource* resource) { 1496 void ResourceProvider::LazyCreate(Resource* resource) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 const int kImportance = 2; 1660 const int kImportance = 2;
1879 pmd->CreateSharedGlobalAllocatorDump(guid); 1661 pmd->CreateSharedGlobalAllocatorDump(guid);
1880 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); 1662 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance);
1881 } 1663 }
1882 } 1664 }
1883 1665
1884 return true; 1666 return true;
1885 } 1667 }
1886 1668
1887 } // namespace cc 1669 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698