aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/skqp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2018-01-29 13:10:08 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-29 21:23:33 +0000
commitb4d01a95c9cbb7adf7adaba193c813313d9d7261 (patch)
tree20713af8de3d3c8dc49cb52d89bcf2ccb16be4cb /tools/skqp
parent926e193e5db4d98f10cda76a2b6a01b5c78753ad (diff)
SkQP: ResourceFactory
Change-Id: Ic57a86ec115e3ace52615c0b8e9a22a915988850 Reviewed-on: https://skia-review.googlesource.com/101320 Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'tools/skqp')
-rw-r--r--tools/skqp/README.md2
-rw-r--r--tools/skqp/jni/org_skia_skqp_SkQPRunner.cpp26
-rwxr-xr-xtools/skqp/setup_resources29
3 files changed, 55 insertions, 2 deletions
diff --git a/tools/skqp/README.md b/tools/skqp/README.md
index 51b0e275ca..bf41b25b08 100644
--- a/tools/skqp/README.md
+++ b/tools/skqp/README.md
@@ -38,6 +38,7 @@ How to run the SkQP tests
python tools/git-sync-deps
python tools/skqp/generate_gn_args out/skqp-arm "$ANDROID_NDK" arm
bin/gn gen out/skqp-arm
+ python tools/skqp/setup_resources . out/skqp-arm
6. Build, install, and run.
@@ -68,6 +69,7 @@ Run as a non-APK executable
2. Build the SkQP program, load files on the device, and run skqp:
+ rm -f out/skqp-arm/gen/binary_resources.cpp
ninja -C out/skqp-arm skqp
python tools/skqp/run_skqp_exe out/skqp-arm
diff --git a/tools/skqp/jni/org_skia_skqp_SkQPRunner.cpp b/tools/skqp/jni/org_skia_skqp_SkQPRunner.cpp
index 7864fc43c4..2203888062 100644
--- a/tools/skqp/jni/org_skia_skqp_SkQPRunner.cpp
+++ b/tools/skqp/jni/org_skia_skqp_SkQPRunner.cpp
@@ -13,10 +13,12 @@
#include <jni.h>
#include <sys/stat.h>
-#include "gm_runner.h"
+#include "ResourceFactory.h"
+#include "SkOSPath.h"
+#include "SkStream.h"
#include "gm_knowledge.h"
+#include "gm_runner.h"
#include "skqp_asset_manager.h"
-#include "SkStream.h"
////////////////////////////////////////////////////////////////////////////////
extern "C" {
@@ -108,6 +110,25 @@ static jclass gStringClass = nullptr;
////////////////////////////////////////////////////////////////////////////////
+sk_sp<SkData> get_resource(const char* resource) {
+ AAssetManager* mgr = gAssetManager.fMgr;
+ if (!mgr) {
+ return nullptr;
+ }
+ SkString path = SkOSPath::Join("resources", resource);
+ AAsset* asset = AAssetManager_open(mgr, path.c_str(), AASSET_MODE_STREAMING);
+ if (!asset) {
+ return nullptr;
+ }
+ size_t size = SkToSizeT(AAsset_getLength(asset));
+ sk_sp<SkData> data = SkData::MakeUninitialized(size);
+ (void)AAsset_read(asset, data->writable_data(), size);
+ AAsset_close(asset);
+ return data;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
template <typename T, typename F>
jobjectArray to_java_string_array(JNIEnv* env,
const std::vector<T>& array,
@@ -131,6 +152,7 @@ void Java_org_skia_skqp_SkQP_nInit(JNIEnv* env, jobject object, jobject assetMan
gm_runner::InitSkia(experimentalMode ? gm_runner::Mode::kExperimentalMode
: gm_runner::Mode::kCompatibilityTestMode,
&gAssetManager);
+ gResourceFactory = &get_resource;
const char* dataDirString = env->GetStringUTFChars(dataDir, nullptr);
jassert(env, dataDirString && dataDirString[0]);
diff --git a/tools/skqp/setup_resources b/tools/skqp/setup_resources
new file mode 100755
index 0000000000..45b9b70e09
--- /dev/null
+++ b/tools/skqp/setup_resources
@@ -0,0 +1,29 @@
+#! /usr/bin/env python
+
+# Copyright 2018 Google Inc.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import shutil
+import sys
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3 or not os.path.isdir(sys.argv[1]) or not os.path.isdir(sys.argv[2]):
+ sys.stderr.write('Usage\n %s SKIA_DIR BUILD_DIR\n\n' % sys.argv[0])
+ sys.exit(1)
+ skia = sys.argv[1]
+ gen = os.path.join(sys.argv[2], 'gen')
+ if not os.path.isdir(gen):
+ os.mkdir(gen)
+ with open(os.path.join(gen, 'binary_resources.cpp'), 'w') as o:
+ o.write('#include "BinaryAsset.h"\n'
+ 'BinaryAsset gResources[] = { {nullptr, nullptr, 0} };\n')
+ dst = os.path.join(skia, 'platform_tools', 'android', 'apps', 'skqp',
+ 'src', 'main', 'assets', 'resources')
+ if os.path.isdir(dst) and not os.path.islink(dst):
+ shutil.rmtree(dst)
+ elif os.path.exists(dst):
+ os.remove(dst)
+ shutil.copytree(os.path.join(skia, 'resources'), dst)
+