Upstream version 8.37.180.0
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core_internal / javatests / src / org / xwalk / core / internal / xwview / test / RendererResponsivenessTest.java
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013-2014 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5
6 package org.xwalk.core.internal.xwview.test;
7
8 import android.graphics.Bitmap;
9 import android.test.suitebuilder.annotation.MediumTest;
10 import android.util.Log;
11 import android.test.TouchUtils;
12 import android.test.InstrumentationTestCase;
13
14 import java.util.concurrent.TimeUnit;
15
16 import org.chromium.content.browser.test.util.CallbackHelper;
17 import org.chromium.base.test.util.DisabledTest;
18 import org.chromium.base.test.util.Feature;
19 import org.chromium.content.browser.ContentView;
20 import org.chromium.content.browser.ContentViewCore;
21
22 import org.xwalk.core.internal.XWalkClient;
23 import org.xwalk.core.internal.XWalkViewInternal;
24
25 /**
26  * Renderer responsiveness tests:
27  *
28  * Internally, a hang monitor timer will start for each renderer when there is
29  * an input event sent to the renderer. If the ACK for handling the input event
30  * is not received in 30 seconds, the renderer is deemed to be unresponsive to
31  * user interaction.
32  */
33 public class RendererResponsivenessTest extends XWalkViewInternalTestBase {
34     private OnRendererResponsivenessHelper responsiveHelper = new OnRendererResponsivenessHelper();
35     private OnRendererResponsivenessHelper unresponsiveHelper = new OnRendererResponsivenessHelper();
36
37     @Override
38     public void setUp() throws Exception {
39         super.setUp();
40     }
41
42     //@Feature({"RendererResponsivenessTest"})
43     //@MediumTest
44     @DisabledTest
45     public void testRendererUnresponsive() throws Throwable {
46         getInstrumentation().runOnMainSync(new Runnable() {
47             @Override
48             public void run() {
49                 getXWalkView().setXWalkClient(new XWalkClient(getXWalkView()) {
50                     @Override
51                     public void onRendererUnresponsive(XWalkViewInternal view) {
52                         unresponsiveHelper.notifyCalled(view);
53                     }
54                 });
55             }
56         });
57
58         loadAssetFile("renderHung.html");
59
60         int currentCallCount = unresponsiveHelper.getCallCount();
61         getXWalkView().evaluateJavascript("deadLoopForever();", null);
62
63         /**
64          * Send an input event to xwalk view. Internally, if no ACK message is received
65          * for handling this input event in 30 seconds, onRendererUnresponsive callback
66          * would be called.
67          */
68         TouchUtils.clickView(this, getXWalkView());
69
70         /**
71          * The timeout for responsiveness checking is 30 seconds, so here the timeout
72          * for callback is set to 40 seconds to ensure the onRendererResponsive
73          * to be called.
74          */
75         unresponsiveHelper.waitForCallback(currentCallCount, 1, 40, TimeUnit.SECONDS);
76         assertEquals(getXWalkView(), unresponsiveHelper.getXWalkView());
77     }
78
79     //@Feature({"RendererResponsivenessTest"})
80     //@MediumTest
81     @DisabledTest
82     public void testRendererResponsiveAgain() throws Throwable {
83         getInstrumentation().runOnMainSync(new Runnable() {
84             @Override
85             public void run() {
86                 getXWalkView().setXWalkClient(new XWalkClient(getXWalkView()) {
87                     @Override
88                     public void onRendererResponsive(XWalkViewInternal view) {
89                         responsiveHelper.notifyCalled(view);
90                     }
91                 });
92             }
93         });
94
95         loadAssetFile("renderHung.html");
96
97         int currentCallCount = responsiveHelper.getCallCount();
98         getXWalkView().evaluateJavascript("deadLoopFor40secs();", null);
99
100         /**
101          * Send an input event to start the hung monitor.
102          */
103         TouchUtils.clickView(this, getXWalkView());
104
105         /**
106          * Wait for onRendererResponsive to called. The dead loop is designed to run
107          * 40 seconds, and here we wait for 50 seconds to ensure it has enough time to
108          * call onRendererResponsive callback.
109          */
110         responsiveHelper.waitForCallback(currentCallCount, 1, 50, TimeUnit.SECONDS);
111         assertEquals(getXWalkView(), responsiveHelper.getXWalkView());
112     }
113
114     private final class OnRendererResponsivenessHelper extends CallbackHelper {
115         private XWalkViewInternal mView;
116
117         public void notifyCalled(XWalkViewInternal view) {
118             mView = view;
119             notifyCalled();
120         }
121         public XWalkViewInternal getXWalkView() {
122             assert getCallCount() > 0;
123             return mView;
124         }
125     }
126 }