diff options
-rw-r--r-- | cc/layers/delegated_renderer_layer_impl_unittest.cc | 39 | ||||
-rw-r--r-- | cc/layers/solid_color_layer_impl_unittest.cc | 2 | ||||
-rw-r--r-- | cc/layers/video_layer_impl_unittest.cc | 32 | ||||
-rw-r--r-- | cc/output/bsp_walk_action.cc | 4 | ||||
-rw-r--r-- | cc/output/direct_renderer.cc | 18 | ||||
-rw-r--r-- | cc/output/gl_renderer.cc | 113 | ||||
-rw-r--r-- | cc/output/overlay_strategy_common.cc | 11 | ||||
-rw-r--r-- | cc/output/overlay_strategy_single_on_top.cc | 6 | ||||
-rw-r--r-- | cc/output/software_renderer.cc | 24 | ||||
-rw-r--r-- | cc/quads/draw_quad.h | 11 | ||||
-rw-r--r-- | cc/surfaces/surface_aggregator.cc | 37 | ||||
-rw-r--r-- | cc/surfaces/surface_aggregator_unittest.cc | 2 | ||||
-rw-r--r-- | cc/test/layer_test_common.cc | 27 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl_unittest.cc | 2 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_unittest.cc | 10 |
15 files changed, 198 insertions, 140 deletions
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc index d5ab06b..cc5f03d 100644 --- a/cc/layers/delegated_renderer_layer_impl_unittest.cc +++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc @@ -407,21 +407,26 @@ TEST_F(DelegatedRendererLayerImplTestSimple, gfx::Transform transform; transform.Translate(4.0, 4.0); EXPECT_TRANSFORMATION_MATRIX_EQ( - transform, frame.render_passes[3]->quad_list.front()->quadTransform()); + transform, frame.render_passes[3] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); // Quads from non-root RenderPasses should not be shifted though. ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[2]->quad_list.front()->quadTransform()); + gfx::Transform(), frame.render_passes[2] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[2]->quad_list.ElementAt(1)->quadTransform()); + gfx::Transform(), frame.render_passes[2] + ->quad_list.ElementAt(1) + ->shared_quad_state->content_to_target_transform); ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[1]->quad_list.front()->quadTransform()); + gfx::Transform(), frame.render_passes[1] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); host_impl_->DrawLayers(&frame); host_impl_->DidDrawAllLayers(frame); @@ -582,22 +587,26 @@ TEST_F(DelegatedRendererLayerImplTestOwnSurface, // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root // RenderPass' quads do not need to be translated at all. EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[3]->quad_list.front()->quadTransform()); + gfx::Transform(), frame.render_passes[3] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); // Quads from non-root RenderPasses should not be shifted either. ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[2]->quad_list.front()->quadTransform()); + gfx::Transform(), frame.render_passes[2] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[2]->quad_list.ElementAt(1)->quadTransform()); + gfx::Transform(), frame.render_passes[2] + ->quad_list.ElementAt(1) + ->shared_quad_state->content_to_target_transform); ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), - frame.render_passes[1]->quad_list.front()->quadTransform()); + gfx::Transform(), frame.render_passes[1] + ->quad_list.front() + ->shared_quad_state->content_to_target_transform); host_impl_->DrawLayers(&frame); host_impl_->DidDrawAllLayers(frame); diff --git a/cc/layers/solid_color_layer_impl_unittest.cc b/cc/layers/solid_color_layer_impl_unittest.cc index 5035ec7..9cfd2ef 100644 --- a/cc/layers/solid_color_layer_impl_unittest.cc +++ b/cc/layers/solid_color_layer_impl_unittest.cc @@ -99,7 +99,7 @@ TEST(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) { ASSERT_EQ(render_pass->quad_list.size(), 1U); EXPECT_EQ(opacity, SolidColorDrawQuad::MaterialCast(render_pass->quad_list.front()) - ->opacity()); + ->shared_quad_state->opacity); } TEST(SolidColorLayerImplTest, VerifyCorrectBlendModeInQuad) { diff --git a/cc/layers/video_layer_impl_unittest.cc b/cc/layers/video_layer_impl_unittest.cc index 088560c..56d43a7 100644 --- a/cc/layers/video_layer_impl_unittest.cc +++ b/cc/layers/video_layer_impl_unittest.cc @@ -178,8 +178,12 @@ TEST(VideoLayerImplTest, Rotated0) { gfx::Point3F p1(0, impl.quad_list().front()->rect.height(), 0); gfx::Point3F p2(impl.quad_list().front()->rect.width(), 0, 0); - impl.quad_list().front()->quadTransform().TransformPoint(&p1); - impl.quad_list().front()->quadTransform().TransformPoint(&p2); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p1); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p2); EXPECT_EQ(gfx::Point3F(0, 50, 0), p1); EXPECT_EQ(gfx::Point3F(100, 0, 0), p2); } @@ -214,8 +218,12 @@ TEST(VideoLayerImplTest, Rotated90) { gfx::Point3F p1(0, impl.quad_list().front()->rect.height(), 0); gfx::Point3F p2(impl.quad_list().front()->rect.width(), 0, 0); - impl.quad_list().front()->quadTransform().TransformPoint(&p1); - impl.quad_list().front()->quadTransform().TransformPoint(&p2); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p1); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p2); EXPECT_EQ(gfx::Point3F(0, 0, 0), p1); EXPECT_EQ(gfx::Point3F(100, 50, 0), p2); } @@ -250,8 +258,12 @@ TEST(VideoLayerImplTest, Rotated180) { gfx::Point3F p1(0, impl.quad_list().front()->rect.height(), 0); gfx::Point3F p2(impl.quad_list().front()->rect.width(), 0, 0); - impl.quad_list().front()->quadTransform().TransformPoint(&p1); - impl.quad_list().front()->quadTransform().TransformPoint(&p2); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p1); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p2); EXPECT_EQ(gfx::Point3F(100, 0, 0), p1); EXPECT_EQ(gfx::Point3F(0, 50, 0), p2); } @@ -286,8 +298,12 @@ TEST(VideoLayerImplTest, Rotated270) { gfx::Point3F p1(0, impl.quad_list().front()->rect.height(), 0); gfx::Point3F p2(impl.quad_list().front()->rect.width(), 0, 0); - impl.quad_list().front()->quadTransform().TransformPoint(&p1); - impl.quad_list().front()->quadTransform().TransformPoint(&p2); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p1); + impl.quad_list() + .front() + ->shared_quad_state->content_to_target_transform.TransformPoint(&p2); EXPECT_EQ(gfx::Point3F(100, 50, 0), p1); EXPECT_EQ(gfx::Point3F(0, 0, 0), p2); } diff --git a/cc/output/bsp_walk_action.cc b/cc/output/bsp_walk_action.cc index 9ffc299..ddf39f3 100644 --- a/cc/output/bsp_walk_action.cc +++ b/cc/output/bsp_walk_action.cc @@ -27,7 +27,9 @@ BspWalkActionDrawPolygon::BspWalkActionDrawPolygon( void BspWalkActionDrawPolygon::operator()(DrawPolygon* item) { gfx::Transform inverse_transform; bool invertible = - item->original_ref()->quadTransform().GetInverse(&inverse_transform); + item->original_ref() + ->shared_quad_state->content_to_target_transform.GetInverse( + &inverse_transform); DCHECK(invertible); item->TransformToLayerSpace(inverse_transform); renderer_->DoDrawPolygon(*item, frame_, render_pass_scissor_, diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc index 10bba29..3915816 100644 --- a/cc/output/direct_renderer.cc +++ b/cc/output/direct_renderer.cc @@ -309,8 +309,8 @@ bool DirectRenderer::ShouldSkipQuad(const DrawQuad& quad, if (render_pass_scissor.IsEmpty()) return true; - if (quad.isClipped()) { - gfx::Rect r = quad.clipRect(); + if (quad.shared_quad_state->is_clipped) { + gfx::Rect r = quad.shared_quad_state->clip_rect; r.Intersect(render_pass_scissor); return r.IsEmpty(); } @@ -325,12 +325,12 @@ void DirectRenderer::SetScissorStateForQuad( bool use_render_pass_scissor) { if (use_render_pass_scissor) { gfx::Rect quad_scissor_rect = render_pass_scissor; - if (quad.isClipped()) - quad_scissor_rect.Intersect(quad.clipRect()); + if (quad.shared_quad_state->is_clipped) + quad_scissor_rect.Intersect(quad.shared_quad_state->clip_rect); SetScissorTestRectInDrawSpace(frame, quad_scissor_rect); return; - } else if (quad.isClipped()) { - SetScissorTestRectInDrawSpace(frame, quad.clipRect()); + } else if (quad.shared_quad_state->is_clipped) { + SetScissorTestRectInDrawSpace(frame, quad.shared_quad_state->clip_rect); return; } @@ -460,8 +460,10 @@ void DirectRenderer::DrawRenderPass(DrawingFrame* frame, // This layer is in a 3D sorting context so we add it to the list of // polygons to go into the BSP tree. if (quad.shared_quad_state->sorting_context_id != 0) { - scoped_ptr<DrawPolygon> new_polygon(new DrawPolygon( - *it, quad.visible_rect, quad.quadTransform(), next_polygon_id++)); + scoped_ptr<DrawPolygon> new_polygon( + new DrawPolygon(*it, quad.visible_rect, + quad.shared_quad_state->content_to_target_transform, + next_polygon_id++)); if (new_polygon->points().size() > 2u) { poly_list.push_back(new_polygon.Pass()); } diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 50dac6c..faf6bbb 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc @@ -597,12 +597,10 @@ void GLRenderer::DrawCheckerboardQuad(const DrawingFrame* frame, gl_->Uniform1f(program->fragment_shader().frequency_location(), frequency); - SetShaderOpacity(quad->opacity(), + SetShaderOpacity(quad->shared_quad_state->opacity, program->fragment_shader().alpha_location()); - DrawQuadGeometry(frame, - quad->quadTransform(), - quad->rect, - program->vertex_shader().matrix_location()); + DrawQuadGeometry(frame, quad->shared_quad_state->content_to_target_transform, + quad->rect, program->vertex_shader().matrix_location()); } // This function does not handle 3D sorting right now, since the debug border @@ -621,7 +619,9 @@ void GLRenderer::DrawDebugBorderQuad(const DrawingFrame* frame, // partial swaps. gfx::Rect layer_rect = quad->rect; gfx::Transform render_matrix; - QuadRectTransform(&render_matrix, quad->quadTransform(), layer_rect); + QuadRectTransform(&render_matrix, + quad->shared_quad_state->content_to_target_transform, + layer_rect); GLRenderer::ToGLMatrix(&gl_matrix[0], frame->projection_matrix * render_matrix); gl_->UniformMatrix4fv(program->vertex_shader().matrix_location(), 1, false, @@ -931,7 +931,9 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, DCHECK(contents_texture->id()); gfx::Transform quad_rect_matrix; - QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect); + QuadRectTransform(&quad_rect_matrix, + quad->shared_quad_state->content_to_target_transform, + quad->rect); gfx::Transform contents_device_transform = frame->window_matrix * frame->projection_matrix * quad_rect_matrix; contents_device_transform.FlattenTo2d(); @@ -1242,10 +1244,10 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, } } - SetShaderOpacity(quad->opacity(), locations.alpha); + SetShaderOpacity(quad->shared_quad_state->opacity, locations.alpha); SetShaderQuadF(surface_quad, locations.quad); - DrawQuadGeometry( - frame, quad->quadTransform(), quad->rect, locations.matrix); + DrawQuadGeometry(frame, quad->shared_quad_state->content_to_target_transform, + quad->rect, locations.matrix); // Flush the compositor context before the filter bitmap goes out of // scope, so the draw gets processed before the filter texture gets deleted. @@ -1429,8 +1431,9 @@ bool GLRenderer::ShouldAntialiasQuad(const gfx::Transform& device_transform, // crbug.com/429702 if (!is_render_pass_quad && !quad->IsEdge()) return false; - gfx::RectF content_rect = - is_render_pass_quad ? QuadVertexRect() : quad->visibleContentRect(); + gfx::RectF content_rect = is_render_pass_quad + ? QuadVertexRect() + : quad->shared_quad_state->visible_content_rect; bool clipped = false; gfx::QuadF device_layer_quad = @@ -1466,9 +1469,10 @@ void GLRenderer::SetupQuadForClippingAndAntialiasing( local_clip_region = &rotated_clip; } - gfx::QuadF content_rect = is_render_pass_quad - ? gfx::QuadF(QuadVertexRect()) - : gfx::QuadF(quad->visibleContentRect()); + gfx::QuadF content_rect = + is_render_pass_quad + ? gfx::QuadF(QuadVertexRect()) + : gfx::QuadF(quad->shared_quad_state->visible_content_rect); if (!use_aa) { if (local_clip_region) { if (!is_render_pass_quad) { @@ -1532,7 +1536,7 @@ void GLRenderer::DrawSolidColorQuad(const DrawingFrame* frame, gfx::Rect tile_rect = quad->visible_rect; SkColor color = quad->color; - float opacity = quad->opacity(); + float opacity = quad->shared_quad_state->opacity; float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; // Early out if alpha is small enough that quad doesn't contribute to output. @@ -1541,7 +1545,8 @@ void GLRenderer::DrawSolidColorQuad(const DrawingFrame* frame, return; gfx::Transform device_transform = - frame->window_matrix * frame->projection_matrix * quad->quadTransform(); + frame->window_matrix * frame->projection_matrix * + quad->shared_quad_state->content_to_target_transform; device_transform.FlattenTo2d(); if (!device_transform.IsInvertible()) return; @@ -1594,8 +1599,8 @@ void GLRenderer::DrawSolidColorQuad(const DrawingFrame* frame, gfx::RectF centered_rect( gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), tile_rect.size()); - DrawQuadGeometry( - frame, quad->quadTransform(), centered_rect, uniforms.matrix_location); + DrawQuadGeometry(frame, quad->shared_quad_state->content_to_target_transform, + centered_rect, uniforms.matrix_location); } struct TileProgramUniforms { @@ -1637,7 +1642,8 @@ void GLRenderer::DrawContentQuad(const DrawingFrame* frame, ResourceId resource_id, const gfx::QuadF* clip_region) { gfx::Transform device_transform = - frame->window_matrix * frame->projection_matrix * quad->quadTransform(); + frame->window_matrix * frame->projection_matrix * + quad->shared_quad_state->content_to_target_transform; device_transform.FlattenTo2d(); bool use_aa = settings_->allow_antialiasing && @@ -1758,7 +1764,7 @@ void GLRenderer::DrawContentQuadAA(const DrawingFrame* frame, // Normalize to tile_rect. local_quad.Scale(1.0f / tile_rect.width(), 1.0f / tile_rect.height()); - SetShaderOpacity(quad->opacity(), uniforms.alpha_location); + SetShaderOpacity(quad->shared_quad_state->opacity, uniforms.alpha_location); SetShaderQuadF(local_quad, uniforms.quad_location); // The transform and vertex data are used to figure out the extents that the @@ -1768,8 +1774,8 @@ void GLRenderer::DrawContentQuadAA(const DrawingFrame* frame, gfx::RectF centered_rect( gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), tile_rect.size()); - DrawQuadGeometry( - frame, quad->quadTransform(), centered_rect, uniforms.matrix_location); + DrawQuadGeometry(frame, quad->shared_quad_state->content_to_target_transform, + centered_rect, uniforms.matrix_location); } void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, @@ -1783,11 +1789,12 @@ void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, quad->rect.height() / quad->tex_coord_rect.height(); bool scaled = (tex_to_geom_scale_x != 1.f || tex_to_geom_scale_y != 1.f); - GLenum filter = - (scaled || !quad->quadTransform().IsIdentityOrIntegerTranslation()) && - !quad->nearest_neighbor - ? GL_LINEAR - : GL_NEAREST; + GLenum filter = (scaled || + !quad->shared_quad_state->content_to_target_transform + .IsIdentityOrIntegerTranslation()) && + !quad->nearest_neighbor + ? GL_LINEAR + : GL_NEAREST; ResourceProvider::ScopedSamplerGL quad_resource_lock( resource_provider_, resource_id, filter); @@ -1840,7 +1847,7 @@ void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, SetBlendEnabled(quad->ShouldDrawWithBlending()); - SetShaderOpacity(quad->opacity(), uniforms.alpha_location); + SetShaderOpacity(quad->shared_quad_state->opacity, uniforms.alpha_location); // Pass quad coordinates to the uniform in the same order as GeometryBinding // does, then vertices will match the texture mapping in the vertex buffer. @@ -1881,7 +1888,9 @@ void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, gl_->Uniform2fv(uniforms.quad_location, 4, gl_quad); static float gl_matrix[16]; - ToGLMatrix(&gl_matrix[0], frame->projection_matrix * quad->quadTransform()); + ToGLMatrix(&gl_matrix[0], + frame->projection_matrix * + quad->shared_quad_state->content_to_target_transform); gl_->UniformMatrix4fv(uniforms.matrix_location, 1, false, &gl_matrix[0]); gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); @@ -2087,17 +2096,20 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame, gl_->UniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb); gl_->Uniform3fv(yuv_adj_location, 1, yuv_adjust); - SetShaderOpacity(quad->opacity(), alpha_location); + SetShaderOpacity(quad->shared_quad_state->opacity, alpha_location); if (!clip_region) { - DrawQuadGeometry(frame, quad->quadTransform(), tile_rect, matrix_location); + DrawQuadGeometry(frame, + quad->shared_quad_state->content_to_target_transform, + tile_rect, matrix_location); } else { float uvs[8] = {0}; GetScaledUVs(quad->visible_rect, clip_region, uvs); gfx::QuadF region_quad = *clip_region; region_quad.Scale(1.0f / tile_rect.width(), 1.0f / tile_rect.height()); region_quad -= gfx::Vector2dF(0.5f, 0.5f); - DrawQuadGeometryClippedByQuadF(frame, quad->quadTransform(), tile_rect, - region_quad, matrix_location, uvs); + DrawQuadGeometryClippedByQuadF( + frame, quad->shared_quad_state->content_to_target_transform, tile_rect, + region_quad, matrix_location, uvs); } } @@ -2131,11 +2143,12 @@ void GLRenderer::DrawStreamVideoQuad(const DrawingFrame* frame, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0); - SetShaderOpacity(quad->opacity(), + SetShaderOpacity(quad->shared_quad_state->opacity, program->fragment_shader().alpha_location()); if (!clip_region) { - DrawQuadGeometry(frame, quad->quadTransform(), quad->rect, - program->vertex_shader().matrix_location()); + DrawQuadGeometry(frame, + quad->shared_quad_state->content_to_target_transform, + quad->rect, program->vertex_shader().matrix_location()); } else { gfx::QuadF region_quad(*clip_region); region_quad.Scale(1.0f / quad->rect.width(), 1.0f / quad->rect.height()); @@ -2143,8 +2156,8 @@ void GLRenderer::DrawStreamVideoQuad(const DrawingFrame* frame, float uvs[8] = {0}; GetScaledUVs(quad->visible_rect, clip_region, uvs); DrawQuadGeometryClippedByQuadF( - frame, quad->quadTransform(), quad->rect, region_quad, - program->vertex_shader().matrix_location(), uvs); + frame, quad->shared_quad_state->content_to_target_transform, quad->rect, + region_quad, program->vertex_shader().matrix_location(), uvs); } } @@ -2313,7 +2326,7 @@ void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame, } // Generate the vertex opacity - const float opacity = quad->opacity(); + const float opacity = quad->shared_quad_state->opacity; draw_cache_.vertex_opacity_data.push_back(quad->vertex_opacity[0] * opacity); draw_cache_.vertex_opacity_data.push_back(quad->vertex_opacity[1] * opacity); draw_cache_.vertex_opacity_data.push_back(quad->vertex_opacity[2] * opacity); @@ -2321,7 +2334,9 @@ void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame, // Generate the transform matrix gfx::Transform quad_rect_matrix; - QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect); + QuadRectTransform(&quad_rect_matrix, + quad->shared_quad_state->content_to_target_transform, + quad->rect); quad_rect_matrix = frame->projection_matrix * quad_rect_matrix; Float16 m; @@ -2376,8 +2391,10 @@ void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame, quad->io_surface_size.height()); } - const float vertex_opacity[] = {quad->opacity(), quad->opacity(), - quad->opacity(), quad->opacity()}; + const float vertex_opacity[] = {quad->shared_quad_state->opacity, + quad->shared_quad_state->opacity, + quad->shared_quad_state->opacity, + quad->shared_quad_state->opacity}; gl_->Uniform1fv(binding.vertex_opacity_location, 4, vertex_opacity); ResourceProvider::ScopedReadLockGL lock(resource_provider_, @@ -2386,13 +2403,15 @@ void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame, gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, lock.texture_id()); if (!clip_region) { - DrawQuadGeometry(frame, quad->quadTransform(), quad->rect, - binding.matrix_location); + DrawQuadGeometry(frame, + quad->shared_quad_state->content_to_target_transform, + quad->rect, binding.matrix_location); } else { float uvs[8] = {0}; GetScaledUVs(quad->visible_rect, clip_region, uvs); - DrawQuadGeometryClippedByQuadF(frame, quad->quadTransform(), quad->rect, - *clip_region, binding.matrix_location, uvs); + DrawQuadGeometryClippedByQuadF( + frame, quad->shared_quad_state->content_to_target_transform, quad->rect, + *clip_region, binding.matrix_location, uvs); } gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); diff --git a/cc/output/overlay_strategy_common.cc b/cc/output/overlay_strategy_common.cc index 93bd15c..6fa778a 100644 --- a/cc/output/overlay_strategy_common.cc +++ b/cc/output/overlay_strategy_common.cc @@ -46,7 +46,7 @@ bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) { const SolidColorDrawQuad* solid_quad = SolidColorDrawQuad::MaterialCast(draw_quad); SkColor color = solid_quad->color; - float opacity = solid_quad->opacity(); + float opacity = solid_quad->shared_quad_state->opacity; float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; return solid_quad->ShouldDrawWithBlending() && alpha < std::numeric_limits<float>::epsilon(); @@ -57,8 +57,8 @@ bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) { bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad, OverlayCandidate* quad_info) { gfx::OverlayTransform overlay_transform = - OverlayCandidate::GetOverlayTransform(quad.quadTransform(), - quad.y_flipped); + OverlayCandidate::GetOverlayTransform( + quad.shared_quad_state->content_to_target_transform, quad.y_flipped); if (quad.background_color != SK_ColorTRANSPARENT || quad.premultiplied_alpha || overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) @@ -72,7 +72,8 @@ bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad, bool OverlayStrategyCommon::GetVideoQuadInfo(const StreamVideoDrawQuad& quad, OverlayCandidate* quad_info) { gfx::OverlayTransform overlay_transform = - OverlayCandidate::GetOverlayTransform(quad.quadTransform(), false); + OverlayCandidate::GetOverlayTransform( + quad.shared_quad_state->content_to_target_transform, false); if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) return false; if (!quad.matrix.IsScaleOrTranslation()) { @@ -130,7 +131,7 @@ bool OverlayStrategyCommon::GetCandidateQuadInfo(const DrawQuad& draw_quad, quad_info->format = RGBA_8888; quad_info->display_rect = OverlayCandidate::GetOverlayRect( - draw_quad.quadTransform(), draw_quad.rect); + draw_quad.shared_quad_state->content_to_target_transform, draw_quad.rect); return true; } diff --git a/cc/output/overlay_strategy_single_on_top.cc b/cc/output/overlay_strategy_single_on_top.cc index 7cb0dca..921dba7 100644 --- a/cc/output/overlay_strategy_single_on_top.cc +++ b/cc/output/overlay_strategy_single_on_top.cc @@ -36,11 +36,13 @@ bool OverlayStrategySingleOnTop::Attempt( // Check that no prior quads overlap it. bool intersects = false; gfx::RectF rect = draw_quad->rect; - draw_quad->quadTransform().TransformRect(&rect); + draw_quad->shared_quad_state->content_to_target_transform.TransformRect( + &rect); for (auto overlap_iter = quad_list.cbegin(); overlap_iter != it; ++overlap_iter) { gfx::RectF overlap_rect = overlap_iter->rect; - overlap_iter->quadTransform().TransformRect(&overlap_rect); + overlap_iter->shared_quad_state->content_to_target_transform + .TransformRect(&overlap_rect); if (rect.Intersects(overlap_rect) && !IsInvisibleQuad(*overlap_iter)) { intersects = true; break; diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc index 992dbc9..e7540ccb 100644 --- a/cc/output/software_renderer.cc +++ b/cc/output/software_renderer.cc @@ -250,7 +250,9 @@ void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad"); gfx::Transform quad_rect_matrix; - QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect); + QuadRectTransform(&quad_rect_matrix, + quad->shared_quad_state->content_to_target_transform, + quad->rect); gfx::Transform contents_device_transform = frame->window_matrix * frame->projection_matrix * quad_rect_matrix; contents_device_transform.FlattenTo2d(); @@ -276,7 +278,7 @@ void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, if (quad->ShouldDrawWithBlending() || quad->shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode) { - current_paint_.setAlpha(quad->opacity() * 255); + current_paint_.setAlpha(quad->shared_quad_state->opacity * 255); current_paint_.setXfermodeMode(quad->shared_quad_state->blend_mode); } else { current_paint_.setXfermodeMode(SkXfermode::kSrc_Mode); @@ -351,7 +353,7 @@ void SoftwareRenderer::DrawCheckerboardQuad(const DrawingFrame* frame, gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( QuadVertexRect(), quad->rect, quad->visible_rect); current_paint_.setColor(quad->color); - current_paint_.setAlpha(quad->opacity()); + current_paint_.setAlpha(quad->shared_quad_state->opacity); current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect), current_paint_); } @@ -368,7 +370,8 @@ void SoftwareRenderer::DrawDebugBorderQuad(const DrawingFrame* frame, current_canvas_->resetMatrix(); current_paint_.setColor(quad->color); - current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color)); + current_paint_.setAlpha(quad->shared_quad_state->opacity * + SkColorGetA(quad->color)); current_paint_.setStyle(SkPaint::kStroke_Style); current_paint_.setStrokeWidth(quad->width); current_canvas_->drawPoints(SkCanvas::kPolygon_PointMode, @@ -387,10 +390,10 @@ void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame, // TODO(aelias): This isn't correct in all cases. We should detect these // cases and fall back to a persistent bitmap backing // (http://crbug.com/280374). - skia::RefPtr<SkDrawFilter> opacity_filter = - skia::AdoptRef(new skia::OpacityDrawFilter( - quad->opacity(), frame->disable_picture_quad_image_filtering || - quad->nearest_neighbor)); + skia::RefPtr<SkDrawFilter> opacity_filter = skia::AdoptRef( + new skia::OpacityDrawFilter(quad->shared_quad_state->opacity, + frame->disable_picture_quad_image_filtering || + quad->nearest_neighbor)); DCHECK(!current_canvas_->getDrawFilter()); current_canvas_->setDrawFilter(opacity_filter.get()); @@ -408,7 +411,8 @@ void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame, gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( QuadVertexRect(), quad->rect, quad->visible_rect); current_paint_.setColor(quad->color); - current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color)); + current_paint_.setAlpha(quad->shared_quad_state->opacity * + SkColorGetA(quad->color)); current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect), current_paint_); } @@ -607,7 +611,7 @@ void SoftwareRenderer::DrawUnsupportedQuad(const DrawingFrame* frame, #else current_paint_.setColor(SK_ColorMAGENTA); #endif - current_paint_.setAlpha(quad->opacity() * 255); + current_paint_.setAlpha(quad->shared_quad_state->opacity * 255); current_canvas_->drawRect(gfx::RectFToSkRect(QuadVertexRect()), current_paint_); } diff --git a/cc/quads/draw_quad.h b/cc/quads/draw_quad.h index fa1959b..07bf177 100644 --- a/cc/quads/draw_quad.h +++ b/cc/quads/draw_quad.h @@ -51,17 +51,6 @@ class CC_EXPORT DrawQuad { virtual ~DrawQuad(); - // TODO(danakj): Chromify or remove these SharedQuadState helpers. - const gfx::Transform& quadTransform() const { - return shared_quad_state->content_to_target_transform; - } - gfx::Rect visibleContentRect() const { - return shared_quad_state->visible_content_rect; - } - gfx::Rect clipRect() const { return shared_quad_state->clip_rect; } - bool isClipped() const { return shared_quad_state->is_clipped; } - float opacity() const { return shared_quad_state->opacity; } - Material material; // This rect, after applying the quad_transform(), gives the geometry that diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc index 531e2d2..16f91da 100644 --- a/cc/surfaces/surface_aggregator.cc +++ b/cc/surfaces/surface_aggregator.cc @@ -231,7 +231,8 @@ void SurfaceAggregator::HandleSurfaceQuad( const ResourceProvider::ResourceIdMap& child_to_parent_map = provider_ ? provider_->GetChildToParentMap(ChildIdForSurface(surface)) : ResourceProvider::ResourceIdMap(); - bool merge_pass = surface_quad->opacity() == 1.f && copy_requests.empty(); + bool merge_pass = + surface_quad->shared_quad_state->opacity == 1.f && copy_requests.empty(); gfx::Rect surface_damage = DamageRectForSurface( surface, *render_pass_list.back(), surface_quad->visible_rect); @@ -257,7 +258,7 @@ void SurfaceAggregator::HandleSurfaceQuad( // transform of the surface quad into account to update their transform to // the root surface. copy_pass->transform_to_root_target.ConcatTransform( - surface_quad->quadTransform()); + surface_quad->shared_quad_state->content_to_target_transform); copy_pass->transform_to_root_target.ConcatTransform(target_transform); copy_pass->transform_to_root_target.ConcatTransform( dest_pass->transform_to_root_target); @@ -277,16 +278,20 @@ void SurfaceAggregator::HandleSurfaceQuad( // TODO(jamesr): Clean up last pass special casing. const QuadList& quads = last_pass.quad_list; - gfx::Transform surface_transform = surface_quad->quadTransform(); + gfx::Transform surface_transform = + surface_quad->shared_quad_state->content_to_target_transform; surface_transform.ConcatTransform(target_transform); // Intersect the transformed visible rect and the clip rect to create a // smaller cliprect for the quad. ClipData surface_quad_clip_rect( - true, MathUtil::MapEnclosingClippedRect(surface_quad->quadTransform(), - surface_quad->visible_rect)); - if (surface_quad->isClipped()) - surface_quad_clip_rect.rect.Intersect(surface_quad->clipRect()); + true, MathUtil::MapEnclosingClippedRect( + surface_quad->shared_quad_state->content_to_target_transform, + surface_quad->visible_rect)); + if (surface_quad->shared_quad_state->is_clipped) { + surface_quad_clip_rect.rect.Intersect( + surface_quad->shared_quad_state->clip_rect); + } ClipData quads_clip = CalculateClipRect(clip_rect, surface_quad_clip_rect, target_transform); @@ -315,10 +320,11 @@ void SurfaceAggregator::HandleSurfaceQuad( gfx::Vector2dF(), FilterOperations()); } - dest_pass->damage_rect = - gfx::UnionRects(dest_pass->damage_rect, - MathUtil::MapEnclosingClippedRect( - surface_quad->quadTransform(), surface_damage)); + dest_pass->damage_rect = gfx::UnionRects( + dest_pass->damage_rect, + MathUtil::MapEnclosingClippedRect( + surface_quad->shared_quad_state->content_to_target_transform, + surface_damage)); referenced_surfaces_.erase(it); } @@ -394,10 +400,11 @@ void SurfaceAggregator::CopyQuadsToPass( dest_quad = dest_pass->CopyFromAndAppendRenderPassDrawQuad( pass_quad, dest_pass->shared_quad_state_list.back(), remapped_pass_id); - dest_pass->damage_rect = - gfx::UnionRects(dest_pass->damage_rect, - MathUtil::MapEnclosingClippedRect( - dest_quad->quadTransform(), pass_damage)); + dest_pass->damage_rect = gfx::UnionRects( + dest_pass->damage_rect, + MathUtil::MapEnclosingClippedRect( + dest_quad->shared_quad_state->content_to_target_transform, + pass_damage)); } else { dest_quad = dest_pass->CopyFromAndAppendDrawQuad( quad, dest_pass->shared_quad_state_list.back()); diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc index 1fb5163..ac81b3b 100644 --- a/cc/surfaces/surface_aggregator_unittest.cc +++ b/cc/surfaces/surface_aggregator_unittest.cc @@ -1036,7 +1036,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { iter != aggregated_pass_list[1]->quad_list.cend(); ++iter) { EXPECT_EQ(expected_root_pass_quad_transforms[iter.index()].ToString(), - iter->quadTransform().ToString()) + iter->shared_quad_state->content_to_target_transform.ToString()) << iter.index(); } diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc index 83f756d..8ae9aef 100644 --- a/cc/test/layer_test_common.cc +++ b/cc/test/layer_test_common.cc @@ -41,8 +41,9 @@ void LayerTestCommon::VerifyQuadsExactlyCoverRect(const QuadList& quads, Region remaining = rect; for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) { - gfx::RectF quad_rectf = - MathUtil::MapClippedRect(iter->quadTransform(), gfx::RectF(iter->rect)); + gfx::RectF quad_rectf = MathUtil::MapClippedRect( + iter->shared_quad_state->content_to_target_transform, + gfx::RectF(iter->rect)); // Before testing for exact coverage in the integer world, assert that // rounding will not round the rect incorrectly. @@ -69,25 +70,29 @@ void LayerTestCommon::VerifyQuadsAreOccluded(const QuadList& quads, // No quad should exist if it's fully occluded. for (const auto& quad : quads) { gfx::Rect target_visible_rect = MathUtil::MapEnclosingClippedRect( - quad->quadTransform(), quad->visible_rect); + quad->shared_quad_state->content_to_target_transform, + quad->visible_rect); EXPECT_FALSE(occluded.Contains(target_visible_rect)); } // Quads that are fully occluded on one axis only should be shrunken. for (const auto& quad : quads) { - gfx::Rect target_rect = - MathUtil::MapEnclosingClippedRect(quad->quadTransform(), quad->rect); - if (!quad->quadTransform().IsIdentityOrIntegerTranslation()) { - DCHECK(quad->quadTransform().IsPositiveScaleOrTranslation()) - << quad->quadTransform().ToString(); - gfx::RectF target_rectf = - MathUtil::MapClippedRect(quad->quadTransform(), quad->rect); + gfx::Rect target_rect = MathUtil::MapEnclosingClippedRect( + quad->shared_quad_state->content_to_target_transform, quad->rect); + if (!quad->shared_quad_state->content_to_target_transform + .IsIdentityOrIntegerTranslation()) { + DCHECK(quad->shared_quad_state->content_to_target_transform + .IsPositiveScaleOrTranslation()) + << quad->shared_quad_state->content_to_target_transform.ToString(); + gfx::RectF target_rectf = MathUtil::MapClippedRect( + quad->shared_quad_state->content_to_target_transform, quad->rect); // Scale transforms allowed, as long as the final transformed rect // ends up on integer boundaries for ease of testing. DCHECK_EQ(target_rectf.ToString(), gfx::RectF(target_rect).ToString()); } gfx::Rect target_visible_rect = MathUtil::MapEnclosingClippedRect( - quad->quadTransform(), quad->visible_rect); + quad->shared_quad_state->content_to_target_transform, + quad->visible_rect); bool fully_occluded_horizontal = target_rect.x() >= occluded.x() && target_rect.right() <= occluded.right(); diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index cd3d58c..912d1c0 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc @@ -5829,7 +5829,7 @@ TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) { bool antialiased = GLRendererWithSetupQuadForAntialiasing::ShouldAntialiasQuad( - quad->quadTransform(), quad, false); + quad->shared_quad_state->content_to_target_transform, quad, false); EXPECT_FALSE(antialiased); host_impl_->DrawLayers(&frame); diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 715165d..427b649 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc @@ -6040,8 +6040,9 @@ class LayerTreeHostTestCrispUpAfterPinchEnds : public LayerTreeHostTest { const TileDrawQuad* quad = TileDrawQuad::MaterialCast(draw_quad); float quad_scale = quad->tex_coord_rect.width() / static_cast<float>(quad->rect.width()); - float transform_scale = - SkMScalarToFloat(quad->quadTransform().matrix().get(0, 0)); + float transform_scale = SkMScalarToFloat( + quad->shared_quad_state->content_to_target_transform.matrix().get(0, + 0)); float scale = quad_scale / transform_scale; if (frame_scale != 0.f && frame_scale != scale) return 0.f; @@ -6343,8 +6344,9 @@ class LayerTreeHostTestContinuousDrawWhenCreatingVisibleTiles const TileDrawQuad* quad = TileDrawQuad::MaterialCast(draw_quad); float quad_scale = quad->tex_coord_rect.width() / static_cast<float>(quad->rect.width()); - float transform_scale = - SkMScalarToFloat(quad->quadTransform().matrix().get(0, 0)); + float transform_scale = SkMScalarToFloat( + quad->shared_quad_state->content_to_target_transform.matrix().get(0, + 0)); float scale = quad_scale / transform_scale; if (frame_scale != 0.f && frame_scale != scale) return 0.f; |