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

Side by Side Diff: cc/output/software_renderer.cc

Issue 1869753003: Replace many skia::RefPtr with sk_sp<> in cc/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Florin's nits Created 4 years, 7 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/output/software_renderer.h ('k') | cc/playback/compositing_display_item.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/output/software_renderer.h" 5 #include "cc/output/software_renderer.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 } 91 }
92 92
93 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) { 93 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) {
94 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame"); 94 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame");
95 root_canvas_ = output_device_->BeginPaint(frame->root_damage_rect); 95 root_canvas_ = output_device_->BeginPaint(frame->root_damage_rect);
96 } 96 }
97 97
98 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) { 98 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) {
99 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame"); 99 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame");
100 current_framebuffer_lock_ = nullptr; 100 current_framebuffer_lock_ = nullptr;
101 current_framebuffer_canvas_.clear(); 101 current_framebuffer_canvas_.reset();
102 current_canvas_ = NULL; 102 current_canvas_ = NULL;
103 root_canvas_ = NULL; 103 root_canvas_ = NULL;
104 104
105 output_device_->EndPaint(); 105 output_device_->EndPaint();
106 } 106 }
107 107
108 void SoftwareRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) { 108 void SoftwareRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) {
109 TRACE_EVENT0("cc,benchmark", "SoftwareRenderer::SwapBuffers"); 109 TRACE_EVENT0("cc,benchmark", "SoftwareRenderer::SwapBuffers");
110 CompositorFrame compositor_frame; 110 CompositorFrame compositor_frame;
111 compositor_frame.metadata = metadata; 111 compositor_frame.metadata = metadata;
(...skipping 19 matching lines...) Expand all
131 is_scissor_enabled_ = false; 131 is_scissor_enabled_ = false;
132 SkISize size = current_canvas_->getBaseLayerSize(); 132 SkISize size = current_canvas_->getBaseLayerSize();
133 SetClipRect(gfx::Rect(size.width(), size.height())); 133 SetClipRect(gfx::Rect(size.width(), size.height()));
134 } 134 }
135 135
136 void SoftwareRenderer::Finish() {} 136 void SoftwareRenderer::Finish() {}
137 137
138 void SoftwareRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) { 138 void SoftwareRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) {
139 DCHECK(!output_surface_->HasExternalStencilTest()); 139 DCHECK(!output_surface_->HasExternalStencilTest());
140 current_framebuffer_lock_ = nullptr; 140 current_framebuffer_lock_ = nullptr;
141 current_framebuffer_canvas_.clear(); 141 current_framebuffer_canvas_.reset();
142 current_canvas_ = root_canvas_; 142 current_canvas_ = root_canvas_;
143 } 143 }
144 144
145 bool SoftwareRenderer::BindFramebufferToTexture( 145 bool SoftwareRenderer::BindFramebufferToTexture(
146 DrawingFrame* frame, 146 DrawingFrame* frame,
147 const ScopedResource* texture) { 147 const ScopedResource* texture) {
148 DCHECK(texture->id()); 148 DCHECK(texture->id());
149 149
150 // Explicitly release lock, otherwise we can crash when try to lock 150 // Explicitly release lock, otherwise we can crash when try to lock
151 // same texture again. 151 // same texture again.
152 current_framebuffer_lock_ = nullptr; 152 current_framebuffer_lock_ = nullptr;
153 current_framebuffer_lock_ = 153 current_framebuffer_lock_ =
154 base::WrapUnique(new ResourceProvider::ScopedWriteLockSoftware( 154 base::WrapUnique(new ResourceProvider::ScopedWriteLockSoftware(
155 resource_provider_, texture->id())); 155 resource_provider_, texture->id()));
156 current_framebuffer_canvas_ = 156 current_framebuffer_canvas_ =
157 skia::AdoptRef(new SkCanvas(current_framebuffer_lock_->sk_bitmap())); 157 sk_make_sp<SkCanvas>(current_framebuffer_lock_->sk_bitmap());
158 current_canvas_ = current_framebuffer_canvas_.get(); 158 current_canvas_ = current_framebuffer_canvas_.get();
159 return true; 159 return true;
160 } 160 }
161 161
162 void SoftwareRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) { 162 void SoftwareRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) {
163 is_scissor_enabled_ = true; 163 is_scissor_enabled_ = true;
164 scissor_rect_ = scissor_rect; 164 scissor_rect_ = scissor_rect;
165 SetClipRect(scissor_rect); 165 SetClipRect(scissor_rect);
166 } 166 }
167 167
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 MathUtil::ScaleRectProportional(QuadVertexRect(), gfx::RectF(quad->rect), 491 MathUtil::ScaleRectProportional(QuadVertexRect(), gfx::RectF(quad->rect),
492 gfx::RectF(quad->visible_rect))); 492 gfx::RectF(quad->visible_rect)));
493 SkRect content_rect = SkRect::MakeWH(quad->rect.width(), quad->rect.height()); 493 SkRect content_rect = SkRect::MakeWH(quad->rect.width(), quad->rect.height());
494 494
495 SkMatrix content_mat; 495 SkMatrix content_mat;
496 content_mat.setRectToRect(content_rect, dest_rect, 496 content_mat.setRectToRect(content_rect, dest_rect,
497 SkMatrix::kFill_ScaleToFit); 497 SkMatrix::kFill_ScaleToFit);
498 498
499 const SkBitmap* content = lock.sk_bitmap(); 499 const SkBitmap* content = lock.sk_bitmap();
500 500
501 skia::RefPtr<SkImage> filter_image; 501 sk_sp<SkImage> filter_image;
502 if (!quad->filters.IsEmpty()) { 502 if (!quad->filters.IsEmpty()) {
503 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( 503 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
504 quad->filters, gfx::SizeF(content_texture->size())); 504 quad->filters, gfx::SizeF(content_texture->size()));
505 // TODO(ajuma): Apply the filter in the same pass as the content where 505 // TODO(ajuma): Apply the filter in the same pass as the content where
506 // possible (e.g. when there's no origin offset). See crbug.com/308201. 506 // possible (e.g. when there's no origin offset). See crbug.com/308201.
507 filter_image = ApplyImageFilter(filter.get(), quad, content); 507 filter_image = ApplyImageFilter(filter.get(), quad, content);
508 } 508 }
509 509
510 sk_sp<SkShader> shader; 510 sk_sp<SkShader> shader;
511 if (!filter_image) { 511 if (!filter_image) {
512 shader = 512 shader =
513 SkShader::MakeBitmapShader(*content, SkShader::kClamp_TileMode, 513 SkShader::MakeBitmapShader(*content, SkShader::kClamp_TileMode,
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 const RenderPassDrawQuad* quad) const { 621 const RenderPassDrawQuad* quad) const {
622 if (quad->background_filters.IsEmpty()) 622 if (quad->background_filters.IsEmpty())
623 return false; 623 return false;
624 624
625 // TODO(hendrikw): Look into allowing background filters to see pixels from 625 // TODO(hendrikw): Look into allowing background filters to see pixels from
626 // other render targets. See crbug.com/314867. 626 // other render targets. See crbug.com/314867.
627 627
628 return true; 628 return true;
629 } 629 }
630 630
631 skia::RefPtr<SkImage> SoftwareRenderer::ApplyImageFilter( 631 sk_sp<SkImage> SoftwareRenderer::ApplyImageFilter(
632 SkImageFilter* filter, 632 SkImageFilter* filter,
633 const RenderPassDrawQuad* quad, 633 const RenderPassDrawQuad* quad,
634 const SkBitmap* to_filter) const { 634 const SkBitmap* to_filter) const {
635 if (!filter) 635 if (!filter)
636 return nullptr; 636 return nullptr;
637 637
638 SkImageInfo dst_info = 638 SkImageInfo dst_info =
639 SkImageInfo::MakeN32Premul(to_filter->width(), to_filter->height()); 639 SkImageInfo::MakeN32Premul(to_filter->width(), to_filter->height());
640 sk_sp<SkSurface> surface = SkSurface::MakeRaster(dst_info); 640 sk_sp<SkSurface> surface = SkSurface::MakeRaster(dst_info);
641 641
642 SkMatrix localM; 642 SkMatrix localM;
643 localM.setTranslate(SkIntToScalar(-quad->rect.origin().x()), 643 localM.setTranslate(SkIntToScalar(-quad->rect.origin().x()),
644 SkIntToScalar(-quad->rect.origin().y())); 644 SkIntToScalar(-quad->rect.origin().y()));
645 localM.preScale(quad->filters_scale.x(), quad->filters_scale.y()); 645 localM.preScale(quad->filters_scale.x(), quad->filters_scale.y());
646 646
647 SkPaint paint; 647 SkPaint paint;
648 paint.setImageFilter(filter->makeWithLocalMatrix(localM)); 648 paint.setImageFilter(filter->makeWithLocalMatrix(localM));
649 surface->getCanvas()->drawBitmap(*to_filter, 0, 0, &paint); 649 surface->getCanvas()->drawBitmap(*to_filter, 0, 0, &paint);
650 650
651 return skia::AdoptRef(surface->newImageSnapshot()); 651 return surface->makeImageSnapshot();
652 } 652 }
653 653
654 SkBitmap SoftwareRenderer::GetBackdropBitmap( 654 SkBitmap SoftwareRenderer::GetBackdropBitmap(
655 const gfx::Rect& bounding_rect) const { 655 const gfx::Rect& bounding_rect) const {
656 SkBitmap bitmap; 656 SkBitmap bitmap;
657 bitmap.setInfo(SkImageInfo::MakeN32Premul(bounding_rect.width(), 657 bitmap.setInfo(SkImageInfo::MakeN32Premul(bounding_rect.width(),
658 bounding_rect.height())); 658 bounding_rect.height()));
659 current_canvas_->readPixels(&bitmap, bounding_rect.x(), bounding_rect.y()); 659 current_canvas_->readPixels(&bitmap, bounding_rect.x(), bounding_rect.y());
660 return bitmap; 660 return bitmap;
661 } 661 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 if (!contents_device_transform.GetInverse(&contents_device_transform_inverse)) 701 if (!contents_device_transform.GetInverse(&contents_device_transform_inverse))
702 return nullptr; 702 return nullptr;
703 703
704 SkMatrix filter_backdrop_transform = 704 SkMatrix filter_backdrop_transform =
705 contents_device_transform_inverse.matrix(); 705 contents_device_transform_inverse.matrix();
706 filter_backdrop_transform.preTranslate(backdrop_rect.x(), backdrop_rect.y()); 706 filter_backdrop_transform.preTranslate(backdrop_rect.x(), backdrop_rect.y());
707 707
708 // Draw what's behind, and apply the filter to it. 708 // Draw what's behind, and apply the filter to it.
709 SkBitmap backdrop_bitmap = GetBackdropBitmap(backdrop_rect); 709 SkBitmap backdrop_bitmap = GetBackdropBitmap(backdrop_rect);
710 710
711 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( 711 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
712 quad->background_filters, 712 quad->background_filters,
713 gfx::SizeF(backdrop_bitmap.width(), backdrop_bitmap.height())); 713 gfx::SizeF(backdrop_bitmap.width(), backdrop_bitmap.height()));
714 skia::RefPtr<SkImage> filter_backdrop_image = 714 sk_sp<SkImage> filter_backdrop_image =
715 ApplyImageFilter(filter.get(), quad, &backdrop_bitmap); 715 ApplyImageFilter(filter.get(), quad, &backdrop_bitmap);
716 716
717 if (!filter_backdrop_image) 717 if (!filter_backdrop_image)
718 return nullptr; 718 return nullptr;
719 719
720 return filter_backdrop_image->makeShader(content_tile_mode, content_tile_mode, 720 return filter_backdrop_image->makeShader(content_tile_mode, content_tile_mode,
721 &filter_backdrop_transform); 721 &filter_backdrop_transform);
722 } 722 }
723 723
724 } // namespace cc 724 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/software_renderer.h ('k') | cc/playback/compositing_display_item.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698