Commit b3f6dcc5 authored by Xu Xing's avatar Xu Xing Committed by Commit Bot

Cache SkRect of QuadVertexRect to avoid calculate it every draw

Also move more GLRenderer API from protected into private.

BUG=None

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel
Change-Id: I56a923febc502ab68cda4680d6f006f2f6ebd121
Reviewed-on: https://chromium-review.googlesource.com/1235341
Commit-Queue: Xing Xu <xing.xu@intel.com>
Reviewed-by: default avatarweiliangc <weiliangc@chromium.org>
Reviewed-by: default avatarenne <enne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594990}
parent 3007d0de
......@@ -76,23 +76,7 @@ class VIZ_SERVICE_EXPORT GLRenderer : public DirectRenderer {
protected:
void DidChangeVisibility() override;
const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; }
const StaticGeometryBinding* SharedGeometry() const {
return shared_geometry_.get();
}
// Returns the format to use for storage if copying from the current
// framebuffer. If the root renderpass is current, it uses the best matching
// format from the OutputSurface, otherwise it uses the best matching format
// from the texture being drawn to as the backbuffer.
GLenum GetFramebufferCopyTextureFormat();
void ReleaseRenderPassTextures();
enum BoundGeometry { NO_BINDING, SHARED_BINDING, CLIPPED_BINDING };
void PrepareGeometry(BoundGeometry geometry_to_bind);
void SetStencilEnabled(bool enabled);
bool stencil_enabled() const { return stencil_shadow_; }
void SetBlendEnabled(bool enabled);
bool blend_enabled() const { return blend_shadow_; }
bool CanPartialSwap() override;
void UpdateRenderPassTextures(
......@@ -169,6 +153,18 @@ class VIZ_SERVICE_EXPORT GLRenderer : public DirectRenderer {
struct DrawRenderPassDrawQuadParams;
// Returns the format to use for storage if copying from the current
// framebuffer. If the root renderpass is current, it uses the best matching
// format from the OutputSurface, otherwise it uses the best matching format
// from the texture being drawn to as the backbuffer.
GLenum GetFramebufferCopyTextureFormat();
void ReleaseRenderPassTextures();
enum BoundGeometry { NO_BINDING, SHARED_BINDING, CLIPPED_BINDING };
void PrepareGeometry(BoundGeometry geometry_to_bind);
void SetStencilEnabled(bool enabled);
void SetBlendEnabled(bool enabled);
bool blend_enabled() const { return blend_shadow_; }
// If any of the following functions returns false, then it means that drawing
// is not possible.
bool InitializeRPDQParameters(DrawRenderPassDrawQuadParams* params);
......@@ -259,6 +255,11 @@ class VIZ_SERVICE_EXPORT GLRenderer : public DirectRenderer {
gfx::QuadF* local_quad,
const gfx::Rect& tile_rect);
const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; }
const StaticGeometryBinding* SharedGeometry() const {
return shared_geometry_.get();
}
// If |dst_color_space| is invalid, then no color conversion (apart from
// YUV to RGB conversion) is performed. This explicit argument is available
// so that video color conversion can be enabled separately from general color
......
......@@ -182,6 +182,7 @@ SkiaRenderer::SkiaRenderer(const RendererSettings* settings,
SkiaOutputSurface* skia_output_surface)
: DirectRenderer(settings, output_surface, resource_provider),
skia_output_surface_(skia_output_surface),
quad_vertex_skrect_(gfx::RectFToSkRect(QuadVertexRect())),
lock_set_for_external_use_(resource_provider) {
if (auto* context_provider = output_surface_->context_provider()) {
const auto& context_caps = context_provider->ContextCapabilities();
......@@ -562,7 +563,7 @@ void SkiaRenderer::DoDrawQuad(const DrawQuad* quad,
void SkiaRenderer::DrawDebugBorderQuad(const DebugBorderDrawQuad* quad) {
// We need to apply the matrix manually to have pixel-sized stroke width.
SkPoint vertices[4];
gfx::RectFToSkRect(QuadVertexRect()).toQuad(vertices);
QuadVertexSkRect().toQuad(vertices);
SkPoint transformed_vertices[4];
current_canvas_->getTotalMatrix().mapPoints(transformed_vertices, vertices,
4);
......@@ -580,8 +581,7 @@ void SkiaRenderer::DrawDebugBorderQuad(const DebugBorderDrawQuad* quad) {
void SkiaRenderer::DrawPictureQuad(const PictureDrawQuad* quad) {
SkMatrix content_matrix;
content_matrix.setRectToRect(gfx::RectFToSkRect(quad->tex_coord_rect),
gfx::RectFToSkRect(QuadVertexRect()),
SkMatrix::kFill_ScaleToFit);
QuadVertexSkRect(), SkMatrix::kFill_ScaleToFit);
current_canvas_->concat(content_matrix);
const bool needs_transparency =
......@@ -815,7 +815,6 @@ void SkiaRenderer::DrawRenderPassQuadInternal(const RenderPassDrawQuad* quad,
if (!can_draw)
return;
const auto dest_rect = gfx::RectFToSkRect(QuadVertexRect());
SkRect content_rect;
SkRect dest_visible_rect;
if (params.filter_image) {
......@@ -841,7 +840,7 @@ void SkiaRenderer::DrawRenderPassQuadInternal(const RenderPassDrawQuad* quad,
SkRect mask_rect = gfx::RectFToSkRect(
gfx::ScaleRect(quad->mask_uv_rect, quad->mask_texture_size.width(),
quad->mask_texture_size.height()));
mask_to_dest_matrix.setRectToRect(mask_rect, dest_rect,
mask_to_dest_matrix.setRectToRect(mask_rect, QuadVertexSkRect(),
SkMatrix::kFill_ScaleToFit);
mask_filter =
SkShaderMaskFilter::Make(mask_image->makeShader(&mask_to_dest_matrix));
......@@ -865,7 +864,7 @@ void SkiaRenderer::DrawRenderPassQuadInternal(const RenderPassDrawQuad* quad,
// Convert the content_image to a shader, and use drawRect() with the
// shader.
SkMatrix content_to_dest_matrix;
content_to_dest_matrix.setRectToRect(content_rect, dest_rect,
content_to_dest_matrix.setRectToRect(content_rect, QuadVertexSkRect(),
SkMatrix::kFill_ScaleToFit);
auto shader = content_image->makeShader(&content_to_dest_matrix);
current_paint_.setShader(std::move(shader));
......@@ -882,7 +881,7 @@ void SkiaRenderer::DrawRenderPassQuadInternal(const RenderPassDrawQuad* quad,
: nullptr;
DCHECK(background_image_filter);
SkMatrix content_to_dest_matrix;
content_to_dest_matrix.setRectToRect(content_rect, dest_rect,
content_to_dest_matrix.setRectToRect(content_rect, QuadVertexSkRect(),
SkMatrix::kFill_ScaleToFit);
SkMatrix local_matrix;
local_matrix.setTranslate(quad->filters_origin.x(), quad->filters_origin.y());
......@@ -892,7 +891,7 @@ void SkiaRenderer::DrawRenderPassQuadInternal(const RenderPassDrawQuad* quad,
background_image_filter->makeWithLocalMatrix(local_matrix);
SkAutoCanvasRestore auto_canvas_restore(current_canvas_, true /* do_save */);
current_canvas_->clipRect(dest_rect);
current_canvas_->clipRect(QuadVertexSkRect());
SkPaint paint;
paint.setMaskFilter(mask_filter);
......@@ -919,8 +918,7 @@ void SkiaRenderer::DrawUnsupportedQuad(const DrawQuad* quad) {
current_paint_.setColor(SK_ColorMAGENTA);
#endif
current_paint_.setAlpha(quad->shared_quad_state->opacity * 255);
current_canvas_->drawRect(gfx::RectFToSkRect(QuadVertexRect()),
current_paint_);
current_canvas_->drawRect(QuadVertexSkRect(), current_paint_);
}
void SkiaRenderer::CopyDrawnRenderPass(
......
......@@ -104,6 +104,7 @@ class VIZ_SERVICE_EXPORT SkiaRenderer : public DirectRenderer {
GrContext* GetGrContext();
bool is_using_ddl() const { return !!skia_output_surface_; }
const TileDrawQuad* CanPassBeDrawnDirectly(const RenderPass* pass) override;
const SkRect& QuadVertexSkRect() const { return quad_vertex_skrect_; }
// A map from RenderPass id to the texture used to draw the RenderPass from.
struct RenderPassBacking {
......@@ -138,6 +139,7 @@ class VIZ_SERVICE_EXPORT SkiaRenderer : public DirectRenderer {
SkCanvas* current_canvas_ = nullptr;
SkSurface* current_surface_ = nullptr;
SkPaint current_paint_;
const SkRect quad_vertex_skrect_;
base::Optional<SyncQueryCollection> sync_queries_;
bool use_swap_with_bounds_ = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment