1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "android_webview/browser/browser_view_renderer.h"
6 #include "android_webview/browser/child_frame.h"
7 #include "android_webview/browser/test/rendering_test.h"
9 namespace android_webview
{
11 class SmokeTest
: public RenderingTest
{
12 void StartTest() override
{ browser_view_renderer_
->PostInvalidate(); }
14 void DidDrawOnRT(SharedRendererState
* functor
) override
{
19 RENDERING_TEST_F(SmokeTest
);
21 class ClearViewTest
: public RenderingTest
{
23 ClearViewTest() : on_draw_count_(0) {}
25 void StartTest() override
{
26 browser_view_renderer_
->PostInvalidate();
27 browser_view_renderer_
->ClearView();
30 void DidOnDraw(bool success
) override
{
32 if (on_draw_count_
== 1) {
33 // First OnDraw should be skipped due to ClearView.
34 EXPECT_FALSE(success
);
35 browser_view_renderer_
->DidUpdateContent(); // Unset ClearView.
36 browser_view_renderer_
->PostInvalidate();
38 // Following OnDraws should succeed.
43 void DidDrawOnRT(SharedRendererState
* functor
) override
{
50 RENDERING_TEST_F(ClearViewTest
);
52 class TestAnimateInAndOutOfScreen
: public RenderingTest
{
54 TestAnimateInAndOutOfScreen() : on_draw_count_(0), draw_gl_count_on_rt_(0) {}
56 void StartTest() override
{
57 new_constraints_
= ParentCompositorDrawConstraints(
58 false, gfx::Transform(), gfx::Rect(window_
->surface_size()));
59 new_constraints_
.transform
.Scale(2.0, 2.0);
60 browser_view_renderer_
->PostInvalidate();
63 void WillOnDraw() override
{
64 // Step 0: A single onDraw on screen. The parent draw constraints
65 // of the BVR will updated to be the initial constraints.
66 // Step 1: A single onDrraw off screen. The parent draw constraints of the
67 // BVR will be updated to the new constraints.
68 // Step 2: This onDraw is to introduce the DrawGL that animates the
69 // webview onto the screen on render thread. End the test when the parent
70 // draw constraints of BVR is updated to initial constraints.
71 if (on_draw_count_
== 1 || on_draw_count_
== 2)
72 browser_view_renderer_
->PrepareToDraw(gfx::Vector2d(), gfx::Rect());
75 void DidOnDraw(bool success
) override
{
80 bool WillDrawOnRT(SharedRendererState
* functor
,
81 AwDrawGLInfo
* draw_info
) override
{
82 if (draw_gl_count_on_rt_
== 1) {
83 draw_gl_count_on_rt_
++;
84 ui_proxy_
->PostTask(FROM_HERE
, base::Bind(&RenderingTest::PostInvalidate
,
85 base::Unretained(this)));
89 draw_info
->width
= window_
->surface_size().width();
90 draw_info
->height
= window_
->surface_size().height();
91 draw_info
->is_layer
= false;
93 gfx::Transform transform
;
94 if (draw_gl_count_on_rt_
== 0)
95 transform
= new_constraints_
.transform
;
97 transform
.matrix().asColMajorf(draw_info
->transform
);
101 void DidDrawOnRT(SharedRendererState
* functor
) override
{
102 draw_gl_count_on_rt_
++;
105 bool DrawConstraintsEquals(
106 const ParentCompositorDrawConstraints
& constraints1
,
107 const ParentCompositorDrawConstraints
& constraints2
) {
108 if (constraints1
.is_layer
!= constraints2
.is_layer
||
109 constraints1
.transform
!= constraints2
.transform
)
112 return !constraints1
.is_layer
||
113 constraints1
.surface_rect
== constraints2
.surface_rect
;
116 void ParentDrawConstraintsUpdated(
117 const ParentCompositorDrawConstraints
& constraints
) override
{
118 switch (on_draw_count_
) {
120 EXPECT_TRUE(DrawConstraintsEquals(constraints
, new_constraints_
));
123 EXPECT_TRUE(DrawConstraintsEquals(constraints
, initial_constraints_
));
126 // There will be a following 4th onDraw. But the hardware renderer won't
127 // post back the draw constraints in DrawGL because the constraints
136 int draw_gl_count_on_rt_
;
137 ParentCompositorDrawConstraints initial_constraints_
;
138 ParentCompositorDrawConstraints new_constraints_
;
141 RENDERING_TEST_F(TestAnimateInAndOutOfScreen
);
143 } // namespace android_webview