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

Unified Diff: cc/output/skia_renderer.cc

Issue 2092913002: cc::SkiaRenderer hack prototype (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More generic resource provider funcs Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/skia_renderer.h ('k') | cc/output/software_renderer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/skia_renderer.cc
diff --git a/cc/output/software_renderer.cc b/cc/output/skia_renderer.cc
similarity index 70%
copy from cc/output/software_renderer.cc
copy to cc/output/skia_renderer.cc
index 13d13418b200149d5245614386e93e7c6cac619e..3de7f8f55fd332579f50137fcb327c115f064726 100644
--- a/cc/output/software_renderer.cc
+++ b/cc/output/skia_renderer.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "cc/output/software_renderer.h"
+#include "cc/output/skia_renderer.h"
#include "base/memory/ptr_util.h"
#include "base/trace_event/trace_event.h"
@@ -20,6 +20,7 @@
#include "cc/quads/solid_color_draw_quad.h"
#include "cc/quads/texture_draw_quad.h"
#include "cc/quads/tile_draw_quad.h"
+#include "gpu/command_buffer/client/gles2_interface.h"
#include "skia/ext/opacity_filter_canvas.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkColor.h"
@@ -29,6 +30,7 @@
#include "third_party/skia/include/core/SkPoint.h"
#include "third_party/skia/include/core/SkShader.h"
#include "third_party/skia/include/effects/SkLayerRasterizer.h"
+#include "third_party/skia/include/gpu/GrContext.h"
#include "ui/gfx/geometry/rect_conversions.h"
#include "ui/gfx/skia_util.h"
#include "ui/gfx/transform.h"
@@ -52,26 +54,25 @@ bool IsScaleAndIntegerTranslate(const SkMatrix& matrix) {
} // anonymous namespace
-std::unique_ptr<SoftwareRenderer> SoftwareRenderer::Create(
+std::unique_ptr<SkiaRenderer> SkiaRenderer::Create(
RendererClient* client,
const RendererSettings* settings,
OutputSurface* output_surface,
ResourceProvider* resource_provider,
bool use_image_hijack_canvas) {
- return base::WrapUnique(new SoftwareRenderer(client, settings, output_surface,
- resource_provider,
- use_image_hijack_canvas));
+ return base::WrapUnique(new SkiaRenderer(client, settings, output_surface,
+ resource_provider,
+ use_image_hijack_canvas));
}
-SoftwareRenderer::SoftwareRenderer(RendererClient* client,
- const RendererSettings* settings,
- OutputSurface* output_surface,
- ResourceProvider* resource_provider,
- bool use_image_hijack_canvas)
+SkiaRenderer::SkiaRenderer(RendererClient* client,
+ const RendererSettings* settings,
+ OutputSurface* output_surface,
+ ResourceProvider* resource_provider,
+ bool use_image_hijack_canvas)
: DirectRenderer(client, settings, output_surface, resource_provider),
is_scissor_enabled_(false),
is_backbuffer_discarded_(false),
- output_device_(output_surface->software_device()),
current_canvas_(nullptr),
use_image_hijack_canvas_(use_image_hijack_canvas) {
if (resource_provider_) {
@@ -79,7 +80,7 @@ SoftwareRenderer::SoftwareRenderer(RendererClient* client,
capabilities_.best_texture_format =
resource_provider_->best_texture_format();
}
- // The updater can access bitmaps while the SoftwareRenderer is using them.
+ // The updater can access bitmaps while the SkiaRenderer is using them.
capabilities_.allow_partial_texture_updates = true;
capabilities_.using_partial_swap = true;
@@ -88,44 +89,91 @@ SoftwareRenderer::SoftwareRenderer(RendererClient* client,
capabilities_.allow_rasterize_on_demand = true;
}
-SoftwareRenderer::~SoftwareRenderer() {}
+SkiaRenderer::~SkiaRenderer() {}
-const RendererCapabilitiesImpl& SoftwareRenderer::Capabilities() const {
+const RendererCapabilitiesImpl& SkiaRenderer::Capabilities() const {
return capabilities_;
}
-void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) {
- TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame");
- root_canvas_ = output_device_->BeginPaint(frame->root_damage_rect);
+void SkiaRenderer::BeginDrawingFrame(DrawingFrame* frame) {
+ TRACE_EVENT0("cc", "SkiaRenderer::BeginDrawingFrame");
+
+ // ----- BEGIN COPYPASTA FROM GL RENDERER
+ bool use_sync_query_ = false;
+ scoped_refptr<ResourceProvider::Fence> read_lock_fence;
+ if (use_sync_query_) {
+#if 0
+ // Block until oldest sync query has passed if the number of pending queries
+ // ever reach kMaxPendingSyncQueries.
+ if (pending_sync_queries_.size() >= kMaxPendingSyncQueries) {
+ LOG(ERROR) << "Reached limit of pending sync queries.";
+
+ pending_sync_queries_.front()->Wait();
+ DCHECK(!pending_sync_queries_.front()->IsPending());
+ }
+
+ while (!pending_sync_queries_.empty()) {
+ if (pending_sync_queries_.front()->IsPending())
+ break;
+
+ available_sync_queries_.push_back(PopFront(&pending_sync_queries_));
+ }
+
+ current_sync_query_ = available_sync_queries_.empty()
+ ? base::WrapUnique(new SyncQuery(gl_))
+ : PopFront(&available_sync_queries_);
+
+ read_lock_fence = current_sync_query_->Begin();
+#endif
+ } else {
+ read_lock_fence = make_scoped_refptr(new ResourceProvider::SynchronousFence(
+ output_surface_->context_provider()->ContextGL()));
+ }
+ resource_provider_->SetReadLockFence(read_lock_fence.get());
+
+ // Insert WaitSyncTokenCHROMIUM on quad resources prior to drawing the frame,
+ // so that drawing can proceed without GL context switching interruptions.
+ ResourceProvider* resource_provider = resource_provider_;
+ for (const auto& pass : *frame->render_passes_in_draw_order) {
+ for (const auto& quad : pass->quad_list) {
+ for (ResourceId resource_id : quad->resources)
+ resource_provider->WaitSyncTokenIfNeeded(resource_id);
+ }
+ }
+ // ----- END COPYPASTA FROM GL RENDERER
}
-void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) {
- TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame");
+void SkiaRenderer::FinishDrawingFrame(DrawingFrame* frame) {
+ TRACE_EVENT0("cc", "SkiaRenderer::FinishDrawingFrame");
+ current_framebuffer_surface_lock_ = nullptr;
current_framebuffer_lock_ = nullptr;
- current_framebuffer_canvas_.reset();
- current_canvas_ = NULL;
- root_canvas_ = NULL;
-
- output_device_->EndPaint();
+ current_canvas_ = nullptr;
}
-void SoftwareRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) {
- TRACE_EVENT0("cc,benchmark", "SoftwareRenderer::SwapBuffers");
+void SkiaRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) {
+ TRACE_EVENT0("cc,benchmark", "SkiaRenderer::SwapBuffers");
CompositorFrame compositor_frame;
compositor_frame.metadata = metadata;
+
+ compositor_frame.gl_frame_data = base::WrapUnique(new GLFrameData);
+ gfx::Size surface_size = output_surface_->SurfaceSize();
+ // TODO(enne): add in partial swap stuff here from gl renderer
+ compositor_frame.gl_frame_data->size = surface_size;
+ compositor_frame.gl_frame_data->sub_buffer_rect = gfx::Rect(surface_size);
+
output_surface_->SwapBuffers(&compositor_frame);
}
-bool SoftwareRenderer::FlippedFramebuffer(const DrawingFrame* frame) const {
+bool SkiaRenderer::FlippedFramebuffer(const DrawingFrame* frame) const {
return false;
}
-void SoftwareRenderer::EnsureScissorTestEnabled() {
+void SkiaRenderer::EnsureScissorTestEnabled() {
is_scissor_enabled_ = true;
SetClipRect(scissor_rect_);
}
-void SoftwareRenderer::EnsureScissorTestDisabled() {
+void SkiaRenderer::EnsureScissorTestDisabled() {
// There is no explicit notion of enabling/disabling scissoring in software
// rendering, but the underlying effect we want is to clear any existing
// clipRect on the current SkCanvas. This is done by setting clipRect to
@@ -137,39 +185,72 @@ void SoftwareRenderer::EnsureScissorTestDisabled() {
SetClipRect(gfx::Rect(size.width(), size.height()));
}
-void SoftwareRenderer::Finish() {}
+void SkiaRenderer::Finish() {}
-void SoftwareRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) {
+void SkiaRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) {
DCHECK(!output_surface_->HasExternalStencilTest());
current_framebuffer_lock_ = nullptr;
- current_framebuffer_canvas_.reset();
+
+ // TODO(enne): Probably don't need to recreate this every frame?
+ GrBackendRenderTargetDesc desc;
+ desc.fWidth = frame->device_viewport_rect.width();
+ desc.fHeight = frame->device_viewport_rect.height();
+ desc.fConfig = kRGBA_8888_GrPixelConfig;
+ desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+ desc.fSampleCnt = 1;
+ desc.fStencilBits = 8;
+ desc.fRenderTargetHandle = 0;
+
+ GrContext* gr_context = output_surface_->context_provider()->GrContext();
+
+ // Copypasta from resource_provider
+ // Use unknown pixel geometry to disable LCD text.
+ bool use_distance_field_text = false;
+ bool can_use_lcd_text = true;
+ uint32_t flags =
+ use_distance_field_text ? SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0;
+ SkSurfaceProps surface_props(flags, kUnknown_SkPixelGeometry);
+ if (can_use_lcd_text) {
+ // LegacyFontHost will get LCD text and skia figures out what type to use.
+ surface_props =
+ SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType);
+ }
+ root_surface_ =
+ SkSurface::MakeFromBackendRenderTarget(gr_context, desc, &surface_props);
+ root_canvas_ = root_surface_->getCanvas();
+
current_canvas_ = root_canvas_;
}
-bool SoftwareRenderer::BindFramebufferToTexture(
- DrawingFrame* frame,
- const ScopedResource* texture) {
+bool SkiaRenderer::BindFramebufferToTexture(DrawingFrame* frame,
+ const ScopedResource* texture) {
DCHECK(texture->id());
// Explicitly release lock, otherwise we can crash when try to lock
// same texture again.
+ current_framebuffer_surface_lock_ = nullptr;
current_framebuffer_lock_ = nullptr;
current_framebuffer_lock_ =
- base::WrapUnique(new ResourceProvider::ScopedWriteLockSoftware(
- resource_provider_, texture->id()));
- current_framebuffer_canvas_ =
- sk_make_sp<SkCanvas>(current_framebuffer_lock_->sk_bitmap());
- current_canvas_ = current_framebuffer_canvas_.get();
+ base::WrapUnique(new ResourceProvider::ScopedWriteLockGL(
+ resource_provider_, texture->id(), false));
+
+ current_framebuffer_surface_lock_ =
+ base::WrapUnique(new ResourceProvider::ScopedSkSurfaceProvider(
+ output_surface_->context_provider(), current_framebuffer_lock_.get(),
+ false, false, true, 0));
+
+ current_canvas_ =
+ current_framebuffer_surface_lock_->sk_surface()->getCanvas();
return true;
}
-void SoftwareRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) {
+void SkiaRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) {
is_scissor_enabled_ = true;
scissor_rect_ = scissor_rect;
SetClipRect(scissor_rect);
}
-void SoftwareRenderer::SetClipRect(const gfx::Rect& rect) {
+void SkiaRenderer::SetClipRect(const gfx::Rect& rect) {
if (!current_canvas_)
return;
// Skia applies the current matrix to clip rects so we reset it temporary.
@@ -179,7 +260,7 @@ void SoftwareRenderer::SetClipRect(const gfx::Rect& rect) {
current_canvas_->setMatrix(current_matrix);
}
-void SoftwareRenderer::ClearCanvas(SkColor color) {
+void SkiaRenderer::ClearCanvas(SkColor color) {
if (!current_canvas_)
return;
// SkCanvas::clear doesn't respect the current clipping region
@@ -190,7 +271,7 @@ void SoftwareRenderer::ClearCanvas(SkColor color) {
current_canvas_->clear(color);
}
-void SoftwareRenderer::ClearFramebuffer(DrawingFrame* frame) {
+void SkiaRenderer::ClearFramebuffer(DrawingFrame* frame) {
if (frame->current_render_pass->has_transparent_background) {
ClearCanvas(SkColorSetARGB(0, 0, 0, 0));
} else {
@@ -202,7 +283,7 @@ void SoftwareRenderer::ClearFramebuffer(DrawingFrame* frame) {
}
}
-void SoftwareRenderer::PrepareSurfaceForPass(
+void SkiaRenderer::PrepareSurfaceForPass(
DrawingFrame* frame,
SurfaceInitializationMode initialization_mode,
const gfx::Rect& render_pass_scissor) {
@@ -221,29 +302,30 @@ void SoftwareRenderer::PrepareSurfaceForPass(
}
}
-bool SoftwareRenderer::IsSoftwareResource(ResourceId resource_id) const {
+// TODO(enne): doot dee doo
+bool SkiaRenderer::IsSoftwareResource(ResourceId resource_id) const {
switch (resource_provider_->GetResourceType(resource_id)) {
case ResourceProvider::RESOURCE_TYPE_GPU_MEMORY_BUFFER:
case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE:
- return false;
- case ResourceProvider::RESOURCE_TYPE_BITMAP:
return true;
+ case ResourceProvider::RESOURCE_TYPE_BITMAP:
+ return false;
}
LOG(FATAL) << "Invalid resource type.";
return false;
}
-void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame,
- const DrawQuad* quad,
- const gfx::QuadF* draw_region) {
+void SkiaRenderer::DoDrawQuad(DrawingFrame* frame,
+ const DrawQuad* quad,
+ const gfx::QuadF* draw_region) {
if (!current_canvas_)
return;
if (draw_region) {
current_canvas_->save();
}
- TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad");
+ TRACE_EVENT0("cc", "SkiaRenderer::DoDrawQuad");
gfx::Transform quad_rect_matrix;
QuadRectTransform(&quad_rect_matrix,
quad->shared_quad_state->quad_to_target_transform,
@@ -261,10 +343,9 @@ void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame,
!IsScaleAndIntegerTranslate(sk_device_matrix)) {
// TODO(danakj): Until we can enable AA only on exterior edges of the
// layer, disable AA if any interior edges are present. crbug.com/248175
- bool all_four_edges_are_exterior = quad->IsTopEdge() &&
- quad->IsLeftEdge() &&
- quad->IsBottomEdge() &&
- quad->IsRightEdge();
+ bool all_four_edges_are_exterior =
+ quad->IsTopEdge() && quad->IsLeftEdge() && quad->IsBottomEdge() &&
+ quad->IsRightEdge();
if (settings_->allow_antialiasing &&
(settings_->force_antialiasing || all_four_edges_are_exterior))
current_paint_.setAntiAlias(true);
@@ -334,14 +415,13 @@ void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame,
}
}
-void SoftwareRenderer::DrawDebugBorderQuad(const DrawingFrame* frame,
- const DebugBorderDrawQuad* quad) {
+void SkiaRenderer::DrawDebugBorderQuad(const DrawingFrame* frame,
+ const DebugBorderDrawQuad* quad) {
// We need to apply the matrix manually to have pixel-sized stroke width.
SkPoint vertices[4];
gfx::RectFToSkRect(QuadVertexRect()).toQuad(vertices);
SkPoint transformed_vertices[4];
- current_canvas_->getTotalMatrix().mapPoints(transformed_vertices,
- vertices,
+ current_canvas_->getTotalMatrix().mapPoints(transformed_vertices, vertices,
4);
current_canvas_->resetMatrix();
@@ -350,17 +430,16 @@ void SoftwareRenderer::DrawDebugBorderQuad(const DrawingFrame* frame,
SkColorGetA(quad->color));
current_paint_.setStyle(SkPaint::kStroke_Style);
current_paint_.setStrokeWidth(quad->width);
- current_canvas_->drawPoints(SkCanvas::kPolygon_PointMode,
- 4, transformed_vertices, current_paint_);
+ current_canvas_->drawPoints(SkCanvas::kPolygon_PointMode, 4,
+ transformed_vertices, current_paint_);
}
-void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame,
- const PictureDrawQuad* quad) {
+void SkiaRenderer::DrawPictureQuad(const DrawingFrame* frame,
+ const PictureDrawQuad* quad) {
SkMatrix content_matrix;
- content_matrix.setRectToRect(
- gfx::RectFToSkRect(quad->tex_coord_rect),
- gfx::RectFToSkRect(QuadVertexRect()),
- SkMatrix::kFill_ScaleToFit);
+ content_matrix.setRectToRect(gfx::RectFToSkRect(quad->tex_coord_rect),
+ gfx::RectFToSkRect(QuadVertexRect()),
+ SkMatrix::kFill_ScaleToFit);
current_canvas_->concat(content_matrix);
const bool needs_transparency =
@@ -368,7 +447,7 @@ void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame,
const bool disable_image_filtering =
frame->disable_picture_quad_image_filtering || quad->nearest_neighbor;
- TRACE_EVENT0("cc", "SoftwareRenderer::DrawPictureQuad");
+ TRACE_EVENT0("cc", "SkiaRenderer::DrawPictureQuad");
RasterSource::PlaybackSettings playback_settings;
playback_settings.playback_to_shared_canvas = true;
@@ -393,8 +472,8 @@ void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame,
}
}
-void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
- const SolidColorDrawQuad* quad) {
+void SkiaRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
+ const SolidColorDrawQuad* quad) {
gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
current_paint_.setColor(quad->color);
@@ -404,23 +483,20 @@ void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
current_paint_);
}
-void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
- const TextureDrawQuad* quad) {
+void SkiaRenderer::DrawTextureQuad(const DrawingFrame* frame,
+ const TextureDrawQuad* quad) {
if (!IsSoftwareResource(quad->resource_id())) {
DrawUnsupportedQuad(frame, quad);
return;
}
// TODO(skaslev): Add support for non-premultiplied alpha.
- ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
- quad->resource_id());
- if (!lock.valid())
- return;
- const SkBitmap* bitmap = lock.sk_bitmap();
- gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left,
- quad->uv_bottom_right),
- bitmap->width(),
- bitmap->height());
+ ResourceProvider::ScopedReadLockSkImage lock(resource_provider_,
+ quad->resource_id());
+ const SkImage* image = lock.sk_image();
+ gfx::RectF uv_rect = gfx::ScaleRect(
+ gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right),
+ image->width(), image->height());
gfx::RectF visible_uv_rect = MathUtil::ScaleRectProportional(
uv_rect, gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
SkRect sk_uv_rect = gfx::RectFToSkRect(visible_uv_rect);
@@ -431,8 +507,8 @@ void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
if (quad->y_flipped)
current_canvas_->scale(1, -1);
- bool blend_background = quad->background_color != SK_ColorTRANSPARENT &&
- !bitmap->isOpaque();
+ bool blend_background =
+ quad->background_color != SK_ColorTRANSPARENT && !image->isOpaque();
bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF);
if (needs_layer) {
current_canvas_->saveLayerAlpha(&quad_rect, current_paint_.getAlpha());
@@ -445,23 +521,20 @@ void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
}
current_paint_.setFilterQuality(
quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality);
- current_canvas_->drawBitmapRect(*bitmap, sk_uv_rect, quad_rect,
- &current_paint_);
+ current_canvas_->drawImageRect(image, sk_uv_rect, quad_rect, &current_paint_);
if (needs_layer)
current_canvas_->restore();
}
-void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame,
- const TileDrawQuad* quad) {
+void SkiaRenderer::DrawTileQuad(const DrawingFrame* frame,
+ const TileDrawQuad* quad) {
// |resource_provider_| can be NULL in resourceless software draws, which
// should never produce tile quads in the first place.
DCHECK(resource_provider_);
DCHECK(IsSoftwareResource(quad->resource_id()));
- ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
- quad->resource_id());
- if (!lock.valid())
- return;
+ ResourceProvider::ScopedReadLockSkImage lock(resource_provider_,
+ quad->resource_id());
gfx::RectF visible_tex_coord_rect = MathUtil::ScaleRectProportional(
quad->tex_coord_rect, gfx::RectF(quad->rect),
@@ -472,20 +545,21 @@ void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame,
SkRect uv_rect = gfx::RectFToSkRect(visible_tex_coord_rect);
current_paint_.setFilterQuality(
quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality);
- current_canvas_->drawBitmapRect(*lock.sk_bitmap(), uv_rect,
- gfx::RectFToSkRect(visible_quad_vertex_rect),
- &current_paint_);
+ current_canvas_->drawImageRect(lock.sk_image(), uv_rect,
+ gfx::RectFToSkRect(visible_quad_vertex_rect),
+ &current_paint_);
}
-void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
- const RenderPassDrawQuad* quad) {
+void SkiaRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
+ const RenderPassDrawQuad* quad) {
+#if 0
ScopedResource* content_texture =
render_pass_textures_[quad->render_pass_id].get();
DCHECK(content_texture);
DCHECK(content_texture->id());
DCHECK(IsSoftwareResource(content_texture->id()));
- ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
+ ResourceProvider::ScopedReadLockGL lock(resource_provider_,
content_texture->id());
if (!lock.valid())
return;
@@ -536,10 +610,10 @@ void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
SkShader::kClamp_TileMode, &content_mat);
}
- std::unique_ptr<ResourceProvider::ScopedReadLockSoftware> mask_lock;
+ std::unique_ptr<ResourceProvider::ScopedReadLockGL> mask_lock;
if (quad->mask_resource_id()) {
- mask_lock = std::unique_ptr<ResourceProvider::ScopedReadLockSoftware>(
- new ResourceProvider::ScopedReadLockSoftware(resource_provider_,
+ mask_lock = std::unique_ptr<ResourceProvider::ScopedReadLockGL>(
+ new ResourceProvider::ScopedReadLockGL(resource_provider_,
quad->mask_resource_id()));
if (!mask_lock->valid())
@@ -578,10 +652,11 @@ void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
}
current_paint_.setShader(std::move(shader));
current_canvas_->drawRect(dest_visible_rect, current_paint_);
+#endif
}
-void SoftwareRenderer::DrawUnsupportedQuad(const DrawingFrame* frame,
- const DrawQuad* quad) {
+void SkiaRenderer::DrawUnsupportedQuad(const DrawingFrame* frame,
+ const DrawQuad* quad) {
#ifdef NDEBUG
current_paint_.setColor(SK_ColorWHITE);
#else
@@ -592,9 +667,10 @@ void SoftwareRenderer::DrawUnsupportedQuad(const DrawingFrame* frame,
current_paint_);
}
-void SoftwareRenderer::CopyCurrentRenderPassToBitmap(
+void SkiaRenderer::CopyCurrentRenderPassToBitmap(
DrawingFrame* frame,
std::unique_ptr<CopyOutputRequest> request) {
+#if 0
gfx::Rect copy_rect = frame->current_render_pass->output_rect;
if (request->has_area())
copy_rect.Intersect(request->area());
@@ -607,9 +683,10 @@ void SoftwareRenderer::CopyCurrentRenderPassToBitmap(
bitmap.get(), window_copy_rect.x(), window_copy_rect.y());
request->SendBitmapResult(std::move(bitmap));
+#endif
}
-void SoftwareRenderer::DiscardBackbuffer() {
+void SkiaRenderer::DiscardBackbuffer() {
if (is_backbuffer_discarded_)
return;
@@ -621,7 +698,7 @@ void SoftwareRenderer::DiscardBackbuffer() {
client_->SetFullRootLayerDamage();
}
-void SoftwareRenderer::EnsureBackbuffer() {
+void SkiaRenderer::EnsureBackbuffer() {
if (!is_backbuffer_discarded_)
return;
@@ -629,14 +706,18 @@ void SoftwareRenderer::EnsureBackbuffer() {
is_backbuffer_discarded_ = false;
}
-void SoftwareRenderer::DidChangeVisibility() {
+void SkiaRenderer::DidChangeVisibility() {
if (visible())
EnsureBackbuffer();
else
DiscardBackbuffer();
}
-bool SoftwareRenderer::ShouldApplyBackgroundFilters(
+void SkiaRenderer::FinishDrawingQuadList() {
+ current_canvas_->flush();
+}
+
+bool SkiaRenderer::ShouldApplyBackgroundFilters(
const RenderPassDrawQuad* quad) const {
if (quad->background_filters.IsEmpty())
return false;
@@ -650,11 +731,10 @@ bool SoftwareRenderer::ShouldApplyBackgroundFilters(
// If non-null, auto_bounds will be filled with the automatically-computed
// destination bounds. If null, the output will be the same size as the
// input bitmap.
-sk_sp<SkImage> SoftwareRenderer::ApplyImageFilter(
- SkImageFilter* filter,
- const RenderPassDrawQuad* quad,
- const SkBitmap& to_filter,
- SkIRect* auto_bounds) const {
+sk_sp<SkImage> SkiaRenderer::ApplyImageFilter(SkImageFilter* filter,
+ const RenderPassDrawQuad* quad,
+ const SkBitmap& to_filter,
+ SkIRect* auto_bounds) const {
if (!filter)
return nullptr;
@@ -687,8 +767,7 @@ sk_sp<SkImage> SoftwareRenderer::ApplyImageFilter(
return surface->makeImageSnapshot();
}
-SkBitmap SoftwareRenderer::GetBackdropBitmap(
- const gfx::Rect& bounding_rect) const {
+SkBitmap SkiaRenderer::GetBackdropBitmap(const gfx::Rect& bounding_rect) const {
SkBitmap bitmap;
bitmap.setInfo(SkImageInfo::MakeN32Premul(bounding_rect.width(),
bounding_rect.height()));
@@ -696,7 +775,7 @@ SkBitmap SoftwareRenderer::GetBackdropBitmap(
return bitmap;
}
-gfx::Rect SoftwareRenderer::GetBackdropBoundingBoxForRenderPassQuad(
+gfx::Rect SkiaRenderer::GetBackdropBoundingBoxForRenderPassQuad(
const DrawingFrame* frame,
const RenderPassDrawQuad* quad,
const gfx::Transform& contents_device_transform) const {
@@ -714,10 +793,11 @@ gfx::Rect SoftwareRenderer::GetBackdropBoundingBoxForRenderPassQuad(
return backdrop_rect;
}
-sk_sp<SkShader> SoftwareRenderer::GetBackgroundFilterShader(
+sk_sp<SkShader> SkiaRenderer::GetBackgroundFilterShader(
const DrawingFrame* frame,
const RenderPassDrawQuad* quad,
SkShader::TileMode content_tile_mode) const {
+#if 0
if (!ShouldApplyBackgroundFilters(quad))
return nullptr;
@@ -755,6 +835,9 @@ sk_sp<SkShader> SoftwareRenderer::GetBackgroundFilterShader(
return filter_backdrop_image->makeShader(content_tile_mode, content_tile_mode,
&filter_backdrop_transform);
+#else
+ return nullptr;
+#endif
}
} // namespace cc
« no previous file with comments | « cc/output/skia_renderer.h ('k') | cc/output/software_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698