Skip to content

Commit

Permalink
android: Use hw acceleration in android_webview_shell
Browse files Browse the repository at this point in the history
This creates a (GL)SurfaceView overlay on top of the shell
container view which runs its own thread for rendering.
It calls into the native draw functor through a small
dynamic library (drawgl.so).

Committed previously: https://chromium.googlesource.com/chromium/src/+/09acbf59e7e8f1de574498ee5ba8eae0b0775438

Review URL: https://codereview.chromium.org/414503004

Cr-Commit-Position: refs/heads/master@{#292761}
  • Loading branch information
sievers authored and Commit bot committed Aug 30, 2014
1 parent b139474 commit 625a786
Show file tree
Hide file tree
Showing 9 changed files with 322 additions and 10 deletions.
14 changes: 14 additions & 0 deletions android_webview/android_webview_tests.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
'libwebviewchromium',
'android_webview_java',
'android_webview_pak',
'libdrawgl',
],
'variables': {
'apk_name': 'AndroidWebView',
'java_in_dir': 'test/shell',
'native_lib_target': 'libstandalonelibwebviewchromium',
'resource_dir': 'test/shell/res',
'extensions_to_not_compress': 'pak',
'extra_native_libs': ['<(SHARED_LIB_DIR)/libdrawgl.>(android_product_extension)'],
'additional_input_paths': [
'<(PRODUCT_DIR)/android_webview_apk/assets/webviewchromium.pak',
'<(PRODUCT_DIR)/android_webview_apk/assets/en-US.pak',
Expand Down Expand Up @@ -162,5 +164,17 @@
],
'includes': [ '../build/apk_test.gypi' ],
},
{
'target_name': 'libdrawgl',
'type': 'shared_library',
# Do not depend on any other component here, since this target
# builds a separate shared library!
'include_dirs': [
'..',
],
'sources': [
'../android_webview/test/shell/src/draw_gl/draw_gl.cc',
],
},
],
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ private static class ScrollTestContainerView extends AwTestContainerView {
new OverScrollByCallbackHelper();

public ScrollTestContainerView(Context context) {
super(context);
super(context, false);
}

public CallbackHelper getOnScrollToCallbackHelper() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ public void run() {
*/
public static class TestDependencyFactory extends AwContents.DependencyFactory {
public AwTestContainerView createAwTestContainerView(AwTestRunnerActivity activity) {
return new AwTestContainerView(activity);
return new AwTestContainerView(activity, false);
}
public AwSettings createAwSettings(Context context, boolean supportsLegacyQuirks) {
return new AwSettings(context, false, supportsLegacyQuirks);
Expand Down
8 changes: 5 additions & 3 deletions android_webview/test/shell/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,19 @@
package="org.chromium.android_webview.shell">

<application android:name="org.chromium.android_webview.shell.AwShellApplication"
android:label="AwShellApplication" android:hardwareAccelerated="false">
android:label="AwShellApplication">
<activity android:name="org.chromium.android_webview.shell.AwShellActivity"
android:label="Android WebView Test Shell"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize">
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
android:hardwareAccelerated="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="org.chromium.android_webview.test.AwTestRunnerActivity"
android:label="AwTestRunnerActivity">
android:label="AwTestRunnerActivity"
android:hardwareAccelerated="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
Expand Down
7 changes: 7 additions & 0 deletions android_webview/test/shell/src/draw_gl/DEPS
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
include_rules = [
# draw_gl compiles its own shared library for a single entry point
# for testing. Therefore it cannot depend on any other module,
# except for shared definitions.
"-android_webview",
"+android_webview/public/browser",
]
61 changes: 61 additions & 0 deletions android_webview/test/shell/src/draw_gl/draw_gl.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <jni.h>

#include "android_webview/public/browser/draw_gl.h"

extern "C" {

JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
return JNI_VERSION_1_4;
}

// This code goes into its own dynamic library, so we cannot depend on
// any other components like base.
JNIEXPORT void JNICALL
Java_org_chromium_android_1webview_shell_DrawGL_nativeDrawGL(
JNIEnv*,
jclass,
jlong draw_gl,
jlong view,
jint width,
jint height,
jint scroll_x,
jint scroll_y,
jint mode) {
AwDrawGLInfo draw_info;
draw_info.mode = static_cast<AwDrawGLInfo::Mode>(mode);
draw_info.version = kAwDrawGLInfoVersion;
draw_info.is_layer = false;
draw_info.width = width;
draw_info.height = height;
draw_info.clip_left = 0;
draw_info.clip_top = 0;
draw_info.clip_bottom = height;
draw_info.clip_right = width;
draw_info.transform[0] = 1.0;
draw_info.transform[1] = 0.0;
draw_info.transform[2] = 0.0;
draw_info.transform[3] = 0.0;

draw_info.transform[4] = 0.0;
draw_info.transform[5] = 1.0;
draw_info.transform[6] = 0.0;
draw_info.transform[7] = 0.0;

draw_info.transform[8] = 0.0;
draw_info.transform[9] = 0.0;
draw_info.transform[10] = 1.0;
draw_info.transform[11] = 0.0;

draw_info.transform[12] = -scroll_x;
draw_info.transform[13] = -scroll_y;
draw_info.transform[14] = 0.0;
draw_info.transform[15] = 1.0;
AwDrawGLFunction* draw_func = reinterpret_cast<AwDrawGLFunction*>(draw_gl);
draw_func(view, &draw_info, 0);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public void onCreate(Bundle savedInstanceState) {

private AwTestContainerView createAwTestContainerView() {
AwBrowserProcess.start(this);
AwTestContainerView testContainerView = new AwTestContainerView(this);
AwTestContainerView testContainerView = new AwTestContainerView(this, true);
AwContentsClient awContentsClient = new NullContentsClient() {
private View mCustomView;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.android_webview.shell;

/**
* Provides an entry point to the native draw functor.
*/
public class DrawGL {
public static void drawGL(long drawGL, long viewContext, int width, int height,
int scrollX, int scrollY, int mode) {
nativeDrawGL(drawGL, viewContext, width, height, scrollX, scrollY, mode);
}

private static native void nativeDrawGL(long drawGL, long viewContext,
int width, int height, int scrollX, int scrollY, int mode);
}
Loading

0 comments on commit 625a786

Please sign in to comment.