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

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

Issue 454843002: cc: Do bitmap conversion for RasterBuffer in the worker thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code refactoring. Created 6 years, 4 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {} 114 explicit IdentityAllocator(void* buffer) : buffer_(buffer) {}
115 virtual bool allocPixelRef(SkBitmap* dst, SkColorTable*) OVERRIDE { 115 virtual bool allocPixelRef(SkBitmap* dst, SkColorTable*) OVERRIDE {
116 dst->setPixels(buffer_); 116 dst->setPixels(buffer_);
117 return true; 117 return true;
118 } 118 }
119 119
120 private: 120 private:
121 void* buffer_; 121 void* buffer_;
122 }; 122 };
123 123
124 void MakeBitmap(SkBitmap* bitmap,
125 uint8_t* buffer,
126 ResourceFormat format,
127 const gfx::Size& size,
128 int stride) {
129 switch (format) {
130 case RGBA_4444:
131 // Use the default stride if we will eventually convert this
132 // bitmap to 4444.
133 bitmap->allocN32Pixels(size.width(), size.height());
134 break;
135 case RGBA_8888:
136 case BGRA_8888: {
137 SkImageInfo info =
138 SkImageInfo::MakeN32Premul(size.width(), size.height());
139 if (0 == stride)
140 stride = info.minRowBytes();
141 bitmap->installPixels(info, buffer, stride);
142 break;
143 }
144 case LUMINANCE_8:
145 case RGB_565:
146 case ETC1:
147 NOTREACHED();
148 break;
149 }
150 }
151
124 void CopyBitmap(const SkBitmap& src, uint8_t* dst, SkColorType dst_colorType) { 152 void CopyBitmap(const SkBitmap& src, uint8_t* dst, SkColorType dst_colorType) {
125 SkBitmap dst_bitmap; 153 SkBitmap dst_bitmap;
126 IdentityAllocator allocator(dst); 154 IdentityAllocator allocator(dst);
127 src.copyTo(&dst_bitmap, dst_colorType, &allocator); 155 src.copyTo(&dst_bitmap, dst_colorType, &allocator);
128 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the 156 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the
129 // bitmap data. This check will be removed once crbug.com/293728 is fixed. 157 // bitmap data. This check will be removed once crbug.com/293728 is fixed.
130 CHECK_EQ(0u, dst_bitmap.rowBytes() % 4); 158 CHECK_EQ(0u, dst_bitmap.rowBytes() % 4);
131 } 159 }
132 160
133 class ScopedSetActiveTexture { 161 class ScopedSetActiveTexture {
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 shared_bitmap(NULL) { 423 shared_bitmap(NULL) {
396 DCHECK(wrap_mode == GL_CLAMP_TO_EDGE || wrap_mode == GL_REPEAT); 424 DCHECK(wrap_mode == GL_CLAMP_TO_EDGE || wrap_mode == GL_REPEAT);
397 } 425 }
398 426
399 ResourceProvider::GpuRasterBuffer::GpuRasterBuffer( 427 ResourceProvider::GpuRasterBuffer::GpuRasterBuffer(
400 const Resource* resource, 428 const Resource* resource,
401 ResourceProvider* resource_provider, 429 ResourceProvider* resource_provider,
402 bool use_distance_field_text) 430 bool use_distance_field_text)
403 : resource_(resource), 431 : resource_(resource),
404 resource_provider_(resource_provider), 432 resource_provider_(resource_provider),
405 locked_canvas_(NULL),
406 canvas_save_count_(0),
407 surface_generation_id_(0u), 433 surface_generation_id_(0u),
408 use_distance_field_text_(use_distance_field_text) { 434 use_distance_field_text_(use_distance_field_text) {
435 surface_ = CreateSurface();
436 surface_generation_id_ = surface_ ? surface_->generationID() : 0u;
409 } 437 }
410 438
411 ResourceProvider::GpuRasterBuffer::~GpuRasterBuffer() { 439 ResourceProvider::GpuRasterBuffer::~GpuRasterBuffer() {
412 } 440 }
413 441
414 void ResourceProvider::GpuRasterBuffer::LockForWrite() { 442 skia::RefPtr<SkCanvas> ResourceProvider::GpuRasterBuffer::AcquireSkCanvas() {
415 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
416 "ResourceProvider::GpuRasterBuffer::LockForWrite");
417
418 DCHECK(!locked_canvas_);
419
420 if (!surface_)
421 surface_ = CreateSurface();
422 surface_generation_id_ = surface_ ? surface_->generationID() : 0u;
423 }
424
425 bool ResourceProvider::GpuRasterBuffer::UnlockForWrite() {
426 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
427 "ResourceProvider::GpuRasterBuffer::UnlockForWrite");
428
429 DCHECK(!locked_canvas_);
430
431 // generationID returns a non-zero, unique value corresponding to the content
432 // of surface. Hence, a change since LockForWrite was called means the surface
433 // has changed.
434 return surface_ ? surface_generation_id_ != surface_->generationID() : false;
435 }
436
437 SkCanvas* ResourceProvider::GpuRasterBuffer::AcquireSkCanvas() {
438 // Note that this function is called from a worker thread. 443 // Note that this function is called from a worker thread.
439 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 444 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
440 "ResourceProvider::GpuRasterBuffer::AcquireSkCanvas"); 445 "ResourceProvider::GpuRasterBuffer::AcquireSkCanvas");
441 446
442 DCHECK(!locked_canvas_); 447 return surface_ ? skia::SharePtr(surface_->getCanvas())
443 locked_canvas_ = surface_ ? surface_->getCanvas() : NULL; 448 : skia::RefPtr<SkCanvas>();
444 canvas_save_count_ = locked_canvas_ ? locked_canvas_->save() : 0;
445 return locked_canvas_;
446 } 449 }
447 450
448 void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas() { 451 bool ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas(SkCanvas* canvas) {
449 // Note that this function is called from a worker thread. 452 // Note that this function is called from a worker thread.
450 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 453 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
451 "ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas"); 454 "ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas");
452 455
453 if (locked_canvas_) { 456 return surface_ ? surface_generation_id_ != surface_->generationID() : false;
454 locked_canvas_->restoreToCount(canvas_save_count_);
455 locked_canvas_ = NULL;
456 }
457 } 457 }
458 458
459 skia::RefPtr<SkSurface> ResourceProvider::GpuRasterBuffer::CreateSurface() { 459 skia::RefPtr<SkSurface> ResourceProvider::GpuRasterBuffer::CreateSurface() {
reveman 2014/08/13 19:19:50 Is it still worth having this function? Looks like
auygun 2014/08/14 10:35:42 Done.
460 DCHECK_EQ(GLTexture, resource()->type); 460 DCHECK_EQ(GLTexture, resource_->type);
461 DCHECK(resource()->gl_id); 461 DCHECK(resource_->gl_id);
462 462
463 class GrContext* gr_context = resource_provider()->GrContext(); 463 class GrContext* gr_context = resource_provider_->GrContext();
464 // TODO(alokp): Implement TestContextProvider::GrContext(). 464 // TODO(alokp): Implement TestContextProvider::GrContext().
465 if (!gr_context) 465 if (!gr_context)
466 return skia::RefPtr<SkSurface>(); 466 return skia::RefPtr<SkSurface>();
467 467
468 GrBackendTextureDesc desc; 468 GrBackendTextureDesc desc;
469 desc.fFlags = kRenderTarget_GrBackendTextureFlag; 469 desc.fFlags = kRenderTarget_GrBackendTextureFlag;
470 desc.fWidth = resource()->size.width(); 470 desc.fWidth = resource_->size.width();
471 desc.fHeight = resource()->size.height(); 471 desc.fHeight = resource_->size.height();
472 desc.fConfig = ToGrPixelConfig(resource()->format); 472 desc.fConfig = ToGrPixelConfig(resource_->format);
473 desc.fOrigin = kTopLeft_GrSurfaceOrigin; 473 desc.fOrigin = kTopLeft_GrSurfaceOrigin;
474 desc.fTextureHandle = resource()->gl_id; 474 desc.fTextureHandle = resource_->gl_id;
475 skia::RefPtr<GrTexture> gr_texture = 475 skia::RefPtr<GrTexture> gr_texture =
476 skia::AdoptRef(gr_context->wrapBackendTexture(desc)); 476 skia::AdoptRef(gr_context->wrapBackendTexture(desc));
477 SkSurface::TextRenderMode text_render_mode = 477 SkSurface::TextRenderMode text_render_mode =
478 use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode 478 use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
479 : SkSurface::kStandard_TextRenderMode; 479 : SkSurface::kStandard_TextRenderMode;
480 return skia::AdoptRef(SkSurface::NewRenderTargetDirect( 480 return skia::AdoptRef(SkSurface::NewRenderTargetDirect(
481 gr_texture->asRenderTarget(), text_render_mode)); 481 gr_texture->asRenderTarget(), text_render_mode));
482 } 482 }
483 483
484 ResourceProvider::BitmapRasterBuffer::BitmapRasterBuffer(
485 const Resource* resource,
486 ResourceProvider* resource_provider)
487 : resource_(resource),
488 resource_provider_(resource_provider),
489 canvas_save_count_(0),
490 mapped_buffer_(NULL),
491 raster_bitmap_generation_id_(0u),
492 raster_bitmap_changed_(false),
493 stride_(0) {
494 }
495
496 ResourceProvider::BitmapRasterBuffer::~BitmapRasterBuffer() {}
497
498 void ResourceProvider::BitmapRasterBuffer::LockForWrite() {
499 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
500 "ResourceProvider::BitmapRasterBuffer::LockForWrite");
501
502 DCHECK(!mapped_buffer_);
503 DCHECK(!raster_canvas_);
504
505 stride_ = 0;
506 mapped_buffer_ = MapBuffer(&stride_);
507 raster_bitmap_changed_ = false;
508 }
509
510 bool ResourceProvider::BitmapRasterBuffer::UnlockForWrite() {
511 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
512 "ResourceProvider::BitmapRasterBuffer::UnlockForWrite");
513
514 DCHECK(!raster_canvas_);
515
516 UnmapBuffer();
517 mapped_buffer_ = NULL;
518 return raster_bitmap_changed_;
519 }
520
521 SkCanvas* ResourceProvider::BitmapRasterBuffer::AcquireSkCanvas() {
522 // Note that this function is called from a worker thread.
523 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
524 "ResourceProvider::BitmapRasterBuffer::AcquireSkCanvas");
525
526 if (!mapped_buffer_)
527 return NULL;
528
529 switch (resource()->format) {
530 case RGBA_4444:
531 // Use the default stride if we will eventually convert this
532 // bitmap to 4444.
533 raster_bitmap_.allocN32Pixels(resource()->size.width(),
534 resource()->size.height());
535 break;
536 case RGBA_8888:
537 case BGRA_8888: {
538 SkImageInfo info = SkImageInfo::MakeN32Premul(resource()->size.width(),
539 resource()->size.height());
540 if (0 == stride_)
541 stride_ = info.minRowBytes();
542 raster_bitmap_.installPixels(info, mapped_buffer_, stride_);
543 break;
544 }
545 case LUMINANCE_8:
546 case RGB_565:
547 case ETC1:
548 NOTREACHED();
549 break;
550 }
551
552 raster_bitmap_generation_id_ = raster_bitmap_.getGenerationID();
553
554 DCHECK(!raster_canvas_);
555 raster_canvas_ = skia::AdoptRef(new SkCanvas(raster_bitmap_));
556 canvas_save_count_ = raster_canvas_->save();
557 return raster_canvas_.get();
558 }
559
560 void ResourceProvider::BitmapRasterBuffer::ReleaseSkCanvas() {
561 // Note that this function is called from a worker thread.
562 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
563 "ResourceProvider::BitmapRasterBuffer::ReleaseSkCanvas");
564
565 if (raster_canvas_) {
566 raster_canvas_->restoreToCount(canvas_save_count_);
567 raster_canvas_.clear();
568 }
569
570 // getGenerationID returns a non-zero, unique value corresponding to the
571 // pixels in bitmap. Hence, a change since LockForWrite was called means the
572 // bitmap has changed.
573 raster_bitmap_changed_ =
574 raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID();
575 if (raster_bitmap_changed_) {
576 SkColorType buffer_colorType =
577 ResourceFormatToSkColorType(resource()->format);
578 if (mapped_buffer_ && (buffer_colorType != raster_bitmap_.colorType()))
579 CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_colorType);
580 }
581 raster_bitmap_.reset();
582 }
583
584 ResourceProvider::ImageRasterBuffer::ImageRasterBuffer( 484 ResourceProvider::ImageRasterBuffer::ImageRasterBuffer(
585 const Resource* resource, 485 const Resource* resource,
586 ResourceProvider* resource_provider) 486 ResourceProvider* resource_provider)
587 : BitmapRasterBuffer(resource, resource_provider) {} 487 : resource_(resource),
588 488 resource_provider_(resource_provider),
589 ResourceProvider::ImageRasterBuffer::~ImageRasterBuffer() {} 489 mapped_buffer_(NULL),
590 490 raster_bitmap_generation_id_(0u),
591 uint8_t* ResourceProvider::ImageRasterBuffer::MapBuffer(int* stride) { 491 stride_(0) {
592 return resource_provider()->MapImage(resource(), stride);
593 } 492 }
594 493
595 void ResourceProvider::ImageRasterBuffer::UnmapBuffer() { 494 ResourceProvider::ImageRasterBuffer::~ImageRasterBuffer() {
596 resource_provider()->UnmapImage(resource()); 495 }
496
497 void ResourceProvider::ImageRasterBuffer::LockForWrite() {
498 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
499 "ResourceProvider::ImageRasterBuffer::LockForWrite");
500
501 DCHECK(!mapped_buffer_);
502
503 stride_ = 0;
504 mapped_buffer_ = resource_provider_->MapImage(resource_, &stride_);
505 }
506
507 void ResourceProvider::ImageRasterBuffer::UnlockForWrite() {
508 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
509 "ResourceProvider::ImageRasterBuffer::UnlockForWrite");
510
511 resource_provider_->UnmapImage(resource_);
512 mapped_buffer_ = NULL;
513 }
514
515 skia::RefPtr<SkCanvas> ResourceProvider::ImageRasterBuffer::AcquireSkCanvas() {
516 // Note that this function is called from a worker thread.
517 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
518 "ResourceProvider::ImageRasterBuffer::AcquireSkCanvas");
519
520 if (!mapped_buffer_)
521 return skia::RefPtr<SkCanvas>();
522
523 MakeBitmap(&raster_bitmap_,
524 mapped_buffer_,
525 resource_->format,
526 resource_->size,
527 stride_);
528 raster_bitmap_generation_id_ = raster_bitmap_.getGenerationID();
reveman 2014/08/13 19:19:49 Let's not bother with the generation Id anymore. T
auygun 2014/08/14 10:35:42 Done.
529 return skia::AdoptRef(new SkCanvas(raster_bitmap_));
530 }
531
532 bool ResourceProvider::ImageRasterBuffer::ReleaseSkCanvas(SkCanvas* canvas) {
533 // Note that this function is called from a worker thread.
534 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
535 "ResourceProvider::ImageRasterBuffer::ReleaseSkCanvas");
536
537 // getGenerationID returns a non-zero, unique value corresponding to the
538 // pixels in bitmap. Hence, a change since LockForWrite was called means the
539 // bitmap has changed.
540 bool raster_bitmap_changed =
541 raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID();
reveman 2014/08/13 19:19:50 Remove generation id related code. It can be assum
auygun 2014/08/14 10:35:42 Done.
542 if (raster_bitmap_changed) {
543 SkColorType buffer_colorType =
544 ResourceFormatToSkColorType(resource_->format);
545 if (mapped_buffer_ && (buffer_colorType != raster_bitmap_.colorType()))
546 CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_colorType);
547 }
548 raster_bitmap_.reset();
549 return raster_bitmap_changed;
597 } 550 }
598 551
599 ResourceProvider::PixelRasterBuffer::PixelRasterBuffer( 552 ResourceProvider::PixelRasterBuffer::PixelRasterBuffer(
600 const Resource* resource, 553 const Resource* resource,
601 ResourceProvider* resource_provider) 554 ResourceProvider* resource_provider)
602 : BitmapRasterBuffer(resource, resource_provider) {} 555 : resource_(resource),
603 556 resource_provider_(resource_provider),
604 ResourceProvider::PixelRasterBuffer::~PixelRasterBuffer() {} 557 mapped_buffer_(NULL),
605 558 raster_bitmap_generation_id_(0u),
606 uint8_t* ResourceProvider::PixelRasterBuffer::MapBuffer(int* stride) { 559 stride_(0) {
607 return resource_provider()->MapPixelBuffer(resource(), stride);
608 } 560 }
609 561
610 void ResourceProvider::PixelRasterBuffer::UnmapBuffer() { 562 ResourceProvider::PixelRasterBuffer::~PixelRasterBuffer() {
611 resource_provider()->UnmapPixelBuffer(resource()); 563 }
564
565 void ResourceProvider::PixelRasterBuffer::LockForWrite() {
566 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
567 "ResourceProvider::PixelRasterBuffer::LockForWrite");
568
569 DCHECK(!mapped_buffer_);
570
571 stride_ = 0;
572 mapped_buffer_ = resource_provider_->MapPixelBuffer(resource_, &stride_);
573 }
574
575 void ResourceProvider::PixelRasterBuffer::UnlockForWrite() {
576 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
577 "ResourceProvider::PixelRasterBuffer::UnlockForWrite");
578
579 resource_provider_->UnmapPixelBuffer(resource_);
580 mapped_buffer_ = NULL;
581 }
582
583 skia::RefPtr<SkCanvas> ResourceProvider::PixelRasterBuffer::AcquireSkCanvas() {
584 // Note that this function is called from a worker thread.
585 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
586 "ResourceProvider::PixelRasterBuffer::AcquireSkCanvas");
587
588 if (!mapped_buffer_)
589 return skia::RefPtr<SkCanvas>();
590
591 MakeBitmap(&raster_bitmap_,
592 mapped_buffer_,
593 resource_->format,
594 resource_->size,
595 stride_);
596 raster_bitmap_generation_id_ = raster_bitmap_.getGenerationID();
597 return skia::AdoptRef(new SkCanvas(raster_bitmap_));
598 }
599
600 bool ResourceProvider::PixelRasterBuffer::ReleaseSkCanvas(SkCanvas* canvas) {
601 // Note that this function is called from a worker thread.
602 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
603 "ResourceProvider::PixelRasterBuffer::ReleaseSkCanvas");
604
605 // getGenerationID returns a non-zero, unique value corresponding to the
606 // pixels in bitmap. Hence, a change since LockForWrite was called means the
607 // bitmap has changed.
608 bool raster_bitmap_changed =
609 raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID();
reveman 2014/08/13 19:19:49 Same here. Remove generation id related code.
auygun 2014/08/14 10:35:42 Done.
610 if (raster_bitmap_changed) {
611 SkColorType buffer_colorType =
612 ResourceFormatToSkColorType(resource_->format);
613 if (mapped_buffer_ && (buffer_colorType != raster_bitmap_.colorType()))
614 CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_colorType);
615 }
616 raster_bitmap_.reset();
617 return raster_bitmap_changed;
612 } 618 }
613 619
614 ResourceProvider::Child::Child() : marked_for_deletion(false) {} 620 ResourceProvider::Child::Child() : marked_for_deletion(false) {}
615 621
616 ResourceProvider::Child::~Child() {} 622 ResourceProvider::Child::~Child() {}
617 623
618 scoped_ptr<ResourceProvider> ResourceProvider::Create( 624 scoped_ptr<ResourceProvider> ResourceProvider::Create(
619 OutputSurface* output_surface, 625 OutputSurface* output_surface,
620 SharedBitmapManager* shared_bitmap_manager, 626 SharedBitmapManager* shared_bitmap_manager,
621 int highp_threshold_min, 627 int highp_threshold_min,
(...skipping 1139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 1767
1762 RasterBuffer* ResourceProvider::AcquireGpuRasterBuffer(ResourceId id) { 1768 RasterBuffer* ResourceProvider::AcquireGpuRasterBuffer(ResourceId id) {
1763 // Resource needs to be locked for write since GpuRasterBuffer writes 1769 // Resource needs to be locked for write since GpuRasterBuffer writes
1764 // directly to it. 1770 // directly to it.
1765 LockForWrite(id); 1771 LockForWrite(id);
1766 Resource* resource = GetResource(id); 1772 Resource* resource = GetResource(id);
1767 if (!resource->gpu_raster_buffer.get()) { 1773 if (!resource->gpu_raster_buffer.get()) {
1768 resource->gpu_raster_buffer.reset( 1774 resource->gpu_raster_buffer.reset(
1769 new GpuRasterBuffer(resource, this, use_distance_field_text_)); 1775 new GpuRasterBuffer(resource, this, use_distance_field_text_));
1770 } 1776 }
1771 resource->gpu_raster_buffer->LockForWrite();
1772 return resource->gpu_raster_buffer.get(); 1777 return resource->gpu_raster_buffer.get();
1773 } 1778 }
1774 1779
1775 void ResourceProvider::ReleaseGpuRasterBuffer(ResourceId id) { 1780 void ResourceProvider::ReleaseGpuRasterBuffer(ResourceId id) {
1776 Resource* resource = GetResource(id); 1781 Resource* resource = GetResource(id);
1777 DCHECK(resource->gpu_raster_buffer.get()); 1782 DCHECK(resource->gpu_raster_buffer.get());
1778 resource->gpu_raster_buffer->UnlockForWrite();
1779 UnlockForWrite(id); 1783 UnlockForWrite(id);
1780 } 1784 }
1781 1785
1782 RasterBuffer* ResourceProvider::AcquireImageRasterBuffer(ResourceId id) { 1786 RasterBuffer* ResourceProvider::AcquireImageRasterBuffer(ResourceId id) {
1783 Resource* resource = GetResource(id); 1787 Resource* resource = GetResource(id);
1784 AcquireImage(resource); 1788 AcquireImage(resource);
1785 if (!resource->image_raster_buffer.get()) 1789 if (!resource->image_raster_buffer.get())
1786 resource->image_raster_buffer.reset(new ImageRasterBuffer(resource, this)); 1790 resource->image_raster_buffer.reset(new ImageRasterBuffer(resource, this));
1787 resource->image_raster_buffer->LockForWrite(); 1791 resource->image_raster_buffer->LockForWrite();
1788 return resource->image_raster_buffer.get(); 1792 return resource->image_raster_buffer.get();
1789 } 1793 }
1790 1794
1791 bool ResourceProvider::ReleaseImageRasterBuffer(ResourceId id) { 1795 void ResourceProvider::ReleaseImageRasterBuffer(ResourceId id) {
1792 Resource* resource = GetResource(id); 1796 Resource* resource = GetResource(id);
1793 resource->dirty_image = true; 1797 resource->dirty_image = true;
1794 return resource->image_raster_buffer->UnlockForWrite(); 1798 resource->image_raster_buffer->UnlockForWrite();
1795 } 1799 }
1796 1800
1797 void ResourceProvider::AcquirePixelRasterBuffer(ResourceId id) { 1801 RasterBuffer* ResourceProvider::AcquirePixelRasterBuffer(ResourceId id) {
1798 Resource* resource = GetResource(id); 1802 Resource* resource = GetResource(id);
1799 AcquirePixelBuffer(resource); 1803 AcquirePixelBuffer(resource);
1800 resource->pixel_raster_buffer.reset(new PixelRasterBuffer(resource, this)); 1804 resource->pixel_raster_buffer.reset(new PixelRasterBuffer(resource, this));
1805 resource->pixel_raster_buffer->LockForWrite();
1806 return resource->pixel_raster_buffer.get();
1801 } 1807 }
1802 1808
1803 void ResourceProvider::ReleasePixelRasterBuffer(ResourceId id) { 1809 void ResourceProvider::ReleasePixelRasterBuffer(ResourceId id) {
1804 Resource* resource = GetResource(id); 1810 Resource* resource = GetResource(id);
1811 DCHECK(resource->pixel_raster_buffer.get());
1812 resource->pixel_raster_buffer->UnlockForWrite();
1805 resource->pixel_raster_buffer.reset(); 1813 resource->pixel_raster_buffer.reset();
1806 ReleasePixelBuffer(resource); 1814 ReleasePixelBuffer(resource);
1807 } 1815 }
1808 1816
1809 RasterBuffer* ResourceProvider::MapPixelRasterBuffer(ResourceId id) {
1810 Resource* resource = GetResource(id);
1811 DCHECK(resource->pixel_raster_buffer.get());
1812 resource->pixel_raster_buffer->LockForWrite();
1813 return resource->pixel_raster_buffer.get();
1814 }
1815
1816 bool ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) {
1817 Resource* resource = GetResource(id);
1818 DCHECK(resource->pixel_raster_buffer.get());
1819 return resource->pixel_raster_buffer->UnlockForWrite();
1820 }
1821
1822 void ResourceProvider::AcquirePixelBuffer(Resource* resource) { 1817 void ResourceProvider::AcquirePixelBuffer(Resource* resource) {
1823 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 1818 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1824 "ResourceProvider::AcquirePixelBuffer"); 1819 "ResourceProvider::AcquirePixelBuffer");
1825 1820
1826 DCHECK(resource->origin == Resource::Internal); 1821 DCHECK(resource->origin == Resource::Internal);
1827 DCHECK_EQ(resource->exported_count, 0); 1822 DCHECK_EQ(resource->exported_count, 0);
1828 DCHECK(!resource->image_id); 1823 DCHECK(!resource->image_id);
1829 DCHECK_NE(ETC1, resource->format); 1824 DCHECK_NE(ETC1, resource->format);
1830 1825
1831 DCHECK_EQ(GLTexture, resource->type); 1826 DCHECK_EQ(GLTexture, resource->type);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 return target; 1940 return target;
1946 } 1941 }
1947 1942
1948 void ResourceProvider::BeginSetPixels(ResourceId id) { 1943 void ResourceProvider::BeginSetPixels(ResourceId id) {
1949 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 1944 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1950 "ResourceProvider::BeginSetPixels"); 1945 "ResourceProvider::BeginSetPixels");
1951 1946
1952 Resource* resource = GetResource(id); 1947 Resource* resource = GetResource(id);
1953 DCHECK(!resource->pending_set_pixels); 1948 DCHECK(!resource->pending_set_pixels);
1954 1949
1950 DCHECK(resource->pixel_raster_buffer.get());
1951 resource->pixel_raster_buffer->UnlockForWrite();
1952
1955 LazyCreate(resource); 1953 LazyCreate(resource);
1956 DCHECK(resource->origin == Resource::Internal); 1954 DCHECK(resource->origin == Resource::Internal);
1957 DCHECK(resource->gl_id || resource->allocated); 1955 DCHECK(resource->gl_id || resource->allocated);
1958 DCHECK(ReadLockFenceHasPassed(resource)); 1956 DCHECK(ReadLockFenceHasPassed(resource));
1959 DCHECK(!resource->image_id); 1957 DCHECK(!resource->image_id);
1960 1958
1961 bool allocate = !resource->allocated; 1959 bool allocate = !resource->allocated;
1962 resource->allocated = true; 1960 resource->allocated = true;
1963 LockForWrite(id); 1961 LockForWrite(id);
1964 1962
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
2287 ContextProvider* context_provider = output_surface_->context_provider(); 2285 ContextProvider* context_provider = output_surface_->context_provider();
2288 return context_provider ? context_provider->ContextGL() : NULL; 2286 return context_provider ? context_provider->ContextGL() : NULL;
2289 } 2287 }
2290 2288
2291 class GrContext* ResourceProvider::GrContext() const { 2289 class GrContext* ResourceProvider::GrContext() const {
2292 ContextProvider* context_provider = output_surface_->context_provider(); 2290 ContextProvider* context_provider = output_surface_->context_provider();
2293 return context_provider ? context_provider->GrContext() : NULL; 2291 return context_provider ? context_provider->GrContext() : NULL;
2294 } 2292 }
2295 2293
2296 } // namespace cc 2294 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698