From 12d62a7d51a1826e221ffd34224d01c9bec49bab Mon Sep 17 00:00:00 2001 From: djsollen Date: Thu, 21 Apr 2016 07:59:44 -0700 Subject: VulkanViewer on Android GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1903253003 Review URL: https://codereview.chromium.org/1903253003 --- platform_tools/android/apps/settings.gradle | 1 + .../android/apps/vulkanviewer/build.gradle | 37 ++++++++++++ .../apps/vulkanviewer/src/main/AndroidManifest.xml | 26 +++++++++ .../skia/vulkanviewer/VulkanViewerActivity.java | 28 ++++++++++ platform_tools/android/bin/android_setup.sh | 8 ++- .../android/bin/utils/setup_toolchain.sh | 4 ++ platform_tools/android/gyp/skia_android.gypi | 5 +- platform_tools/android/gyp/vulkanviewer.gypi | 65 ++++++++++++++++++++++ .../native_app_glue/android_native_app_glue.c | 8 +++ 9 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 platform_tools/android/apps/vulkanviewer/build.gradle create mode 100644 platform_tools/android/apps/vulkanviewer/src/main/AndroidManifest.xml create mode 100644 platform_tools/android/apps/vulkanviewer/src/main/java/com/skia/vulkanviewer/VulkanViewerActivity.java create mode 100644 platform_tools/android/gyp/vulkanviewer.gypi (limited to 'platform_tools') diff --git a/platform_tools/android/apps/settings.gradle b/platform_tools/android/apps/settings.gradle index f8872ca309..9d103b49be 100644 --- a/platform_tools/android/apps/settings.gradle +++ b/platform_tools/android/apps/settings.gradle @@ -2,3 +2,4 @@ include ':sample_app' include ':visualbench' include ':visualbenchsdl' include ':canvasproof' +include ':vulkanviewer' diff --git a/platform_tools/android/apps/vulkanviewer/build.gradle b/platform_tools/android/apps/vulkanviewer/build.gradle new file mode 100644 index 0000000000..acb6740248 --- /dev/null +++ b/platform_tools/android/apps/vulkanviewer/build.gradle @@ -0,0 +1,37 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +apply plugin: 'com.android.application' +android { + compileSdkVersion 19 + buildToolsVersion "22.0.1" + defaultConfig { + applicationId "org.skia.vulkanviewer" + minSdkVersion 9 + targetSdkVersion 19 + versionCode 1 + versionName "1.0" + signingConfig signingConfigs.debug + } + sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call + sourceSets.main.jniLibs.srcDir "src/main/libs" + productFlavors { arm {}; arm64 {}; x86 {}; x86_64 {}; mips {}; mips64 {}; } + applicationVariants.all{ variant -> + def buildNativeLib = task("${variant.name}_NativeLib", type:Exec) { + workingDir '../../../..' // top-level skia directory + commandLine constructBuildCommand(variant, "CopyVulkanViewerDeps").split() + environment PATH: getPathWithDepotTools() + environment ANDROID_SDK_ROOT: getSDKPath() + } + buildNativeLib.onlyIf { !project.hasProperty("suppressNativeBuild") } + TaskCollection assembleTask + assembleTask = project.tasks.matching { + it.name.contains("assemble") && + it.name.toLowerCase().endsWith(variant.name.toLowerCase()) + } + assembleTask.getAt(0).dependsOn buildNativeLib + } +} diff --git a/platform_tools/android/apps/vulkanviewer/src/main/AndroidManifest.xml b/platform_tools/android/apps/vulkanviewer/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..3220c31bd1 --- /dev/null +++ b/platform_tools/android/apps/vulkanviewer/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + diff --git a/platform_tools/android/apps/vulkanviewer/src/main/java/com/skia/vulkanviewer/VulkanViewerActivity.java b/platform_tools/android/apps/vulkanviewer/src/main/java/com/skia/vulkanviewer/VulkanViewerActivity.java new file mode 100644 index 0000000000..dcb00858e5 --- /dev/null +++ b/platform_tools/android/apps/vulkanviewer/src/main/java/com/skia/vulkanviewer/VulkanViewerActivity.java @@ -0,0 +1,28 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +package com.skia.vulkanviewer; + +import android.app.ActionBar; +import android.os.Bundle; +import android.provider.Settings; +import android.view.View; +import android.view.WindowManager; + +public class VulkanViewerActivity extends android.app.NativeActivity { + static { + System.loadLibrary("skia_android"); + } + + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + ActionBar ab = this.getActionBar(); + ab.hide(); + } +} diff --git a/platform_tools/android/bin/android_setup.sh b/platform_tools/android/bin/android_setup.sh index fd05a985e3..0084fc6bb7 100755 --- a/platform_tools/android/bin/android_setup.sh +++ b/platform_tools/android/bin/android_setup.sh @@ -38,6 +38,8 @@ while (( "$#" )); do LOGCAT=1 elif [[ "$1" == "--verbose" ]]; then VERBOSE="true" + elif [[ "$1" == "--vulkan" ]]; then + SKIA_VULKAN="true" else APP_ARGS=("${APP_ARGS[@]}" "${1}") fi @@ -48,6 +50,10 @@ if [ "$USE_CLANG" == "true" ]; then export GYP_DEFINES="skia_clang_build=1 $GYP_DEFINES" fi +if [ "$SKIA_VULKAN" == "true" ]; then + export GYP_DEFINES="skia_vulkan=1 $GYP_DEFINES" +fi + function verbose { if [[ -n $VERBOSE ]]; then echo $@ @@ -167,7 +173,7 @@ setup_device() { source $SCRIPT_DIR/utils/setup_toolchain.sh fi - DEFINES="${DEFINES} android_toolchain=${TOOLCHAIN_TYPE}" + DEFINES="${DEFINES} android_toolchain=${ANDROID_TOOLCHAIN}" DEFINES="${DEFINES} android_buildtype=${BUILDTYPE}" exportVar GYP_DEFINES "$DEFINES $GYP_DEFINES" diff --git a/platform_tools/android/bin/utils/setup_toolchain.sh b/platform_tools/android/bin/utils/setup_toolchain.sh index 50098ba34a..6851931bfb 100755 --- a/platform_tools/android/bin/utils/setup_toolchain.sh +++ b/platform_tools/android/bin/utils/setup_toolchain.sh @@ -42,6 +42,10 @@ function default_toolchain() { else API=14 # Android 4.0 fi + + if [ "$SKIA_VULKAN" == "true" ]; then + API=24 # Android N Preview + fi TOOLCHAIN=$ANDROID_ARCH-$NDK-$API HOST=`uname | tr '[A-Z]' '[a-z]'` diff --git a/platform_tools/android/gyp/skia_android.gypi b/platform_tools/android/gyp/skia_android.gypi index 8833afef21..7767183bd1 100644 --- a/platform_tools/android/gyp/skia_android.gypi +++ b/platform_tools/android/gyp/skia_android.gypi @@ -45,7 +45,10 @@ }], ], }, - 'includes' : [ 'canvasproof.gypi', ], + 'includes' : [ + 'canvasproof.gypi', + 'vulkanviewer.gypi', + ], 'targets': [ { 'target_name': 'CopySampleAppDeps', diff --git a/platform_tools/android/gyp/vulkanviewer.gypi b/platform_tools/android/gyp/vulkanviewer.gypi new file mode 100644 index 0000000000..adcfd22d4f --- /dev/null +++ b/platform_tools/android/gyp/vulkanviewer.gypi @@ -0,0 +1,65 @@ +# Copyright 2015 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +{ + 'targets': [ + { + 'target_name': 'CopyVulkanViewerDeps', + 'type': 'none', + 'dependencies': [ + 'skia_lib.gyp:skia_lib', + 'vulkanviewer.gyp:vulkanviewer', + ], + 'copies': [ + { + 'destination': '<(android_base)/apps/vulkanviewer/src/main/libs/<(android_arch)', + 'conditions': [ + [ 'skia_shared_lib', { + 'files': [ + '<(SHARED_LIB_DIR)/libskia_android.so', + '<(SHARED_LIB_DIR)/libvulkanviewer.so', + ]}, { + 'files': [ + '<(SHARED_LIB_DIR)/libvulkanviewer.so', + ]} + ], + ], + }, + ], + }, + { + 'target_name': 'VulkanViewer_APK', + 'type': 'none', + 'dependencies': [ 'CopyVulkanViewerDeps', ], + 'actions': [ + { + 'action_name': 'SkiaVulkanViewer_apk', + 'inputs': [ + '<(android_base)/apps/vulkanviewer/src/main/AndroidManifest.xml', + '<(android_base)/apps/vulkanviewer/src/main/java/com/skia/vulkanviewer/VulkanViewerActivity.java', + '<(android_base)/apps/vulkanviewer/src/main/libs/<(android_arch)/libvulkanviewer.so', + + ], + 'conditions': [ + [ 'skia_shared_lib', { + 'inputs': [ + '<(android_base)/apps/vulkanviewer/src/main/libs/<(android_arch)/libskia_android.so', + ], + }], + ], + 'outputs': [ + '../apps/vulkanviewer/build/outputs/apk/', + ], + 'action': [ + '<(android_base)/apps/gradlew', + ':vulkanviewer:assemble<(android_variant)Debug', + '-p<(android_base)/apps/vulkanviewer', + '-PsuppressNativeBuild', + '--daemon', + ], + }, + ], + }, + ], +} diff --git a/platform_tools/android/third_party/native_app_glue/android_native_app_glue.c b/platform_tools/android/third_party/native_app_glue/android_native_app_glue.c index 55a52bc0e8..595bc76347 100644 --- a/platform_tools/android/third_party/native_app_glue/android_native_app_glue.c +++ b/platform_tools/android/third_party/native_app_glue/android_native_app_glue.c @@ -419,6 +419,13 @@ static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) android_app_set_input((struct android_app*)activity->instance, NULL); } +static void onContentRectChanged(ANativeActivity* activity, const ARect* rect) { + struct android_app* android_app = (struct android_app*)activity->instance; + LOGV("OnContentRectChanged: %p\n", activity); + android_app->contentRect = *rect; + android_app_write_cmd(android_app, APP_CMD_CONTENT_RECT_CHANGED); +} + void ANativeActivity_onCreate(ANativeActivity* activity, void* savedState, size_t savedStateSize) { LOGV("Creating: %p\n", activity); @@ -435,6 +442,7 @@ void ANativeActivity_onCreate(ANativeActivity* activity, activity->callbacks->onNativeWindowDestroyed = onNativeWindowDestroyed; activity->callbacks->onInputQueueCreated = onInputQueueCreated; activity->callbacks->onInputQueueDestroyed = onInputQueueDestroyed; + activity->callbacks->onContentRectChanged = onContentRectChanged; activity->instance = android_app_create(activity, savedState, savedStateSize); } -- cgit v1.2.3