SkQP: remove skia_embed_resources option

Motivation: delete unnecessary code.  ResourceFactory.h provides a much more
flexible way of fixing the same problem.

Change-Id: Ib8a3ce25ce98e4f752dc1e7ce88eb9ceb95a4372
Reviewed-on: https://skia-review.googlesource.com/101920
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 110cb0e..888c326 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -31,7 +31,6 @@
   skia_use_metal = false
   skia_use_libheif = is_skia_dev_build
   skia_use_skcms = is_skia_dev_build
-  skia_embed_resources = false
 
   skia_android_serial = ""
   skia_enable_discrete_gpu = true
@@ -939,20 +938,6 @@
     ]
   }
 
-  if (skia_embed_resources) {
-    action("binary_resources.cpp") {
-      script = "gn/generate_binary_asset.py"
-      args = [
-        rebase_path("resources"),
-        "gResources",
-        rebase_path("$target_gen_dir/binary_resources.cpp", root_build_dir),
-      ]
-      outputs = [
-        "$target_gen_dir/binary_resources.cpp",
-      ]
-    }
-  }
-
   if (skia_enable_gpu && target_cpu == "x64") {
     executable("fiddle") {
       libs = []
@@ -1289,11 +1274,6 @@
     public_deps = [
       "//third_party/jsoncpp",
     ]
-    if (skia_embed_resources) {
-      defines = [ "SK_EMBED_RESOURCES" ]
-      sources += [ "$target_gen_dir/binary_resources.cpp" ]
-      deps += [ ":binary_resources.cpp" ]
-    }
   }
 
   import("gn/gm.gni")
@@ -1831,6 +1811,7 @@
       deps = [
         ":skia",
         ":skqp_lib",
+        ":tool_utils",
         "//third_party/googletest",
       ]
     }
diff --git a/gn/generate_binary_asset.py b/gn/generate_binary_asset.py
deleted file mode 100755
index 671231b..0000000
--- a/gn/generate_binary_asset.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python2
-# Copyright 2017 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 sys
-
-def get_resources(rdir):
-  for root, _, files in os.walk(rdir):
-    for filepath in files:
-      fullpath = os.path.join(root, filepath)
-      if os.path.isfile(fullpath):
-        yield os.path.relpath(fullpath, rdir)
-
-def main(resource_dir, array_name, filename):
-  with open(filename, 'w') as o:
-    o.write('//generated file\n#include "BinaryAsset.h"\n\n');
-    names = []
-    for n in sorted(get_resources(resource_dir)):
-      o.write('static const unsigned char x%d[] = {\n' % len(names))
-      with open(os.path.join(resource_dir, n), 'rb')  as f:
-        while True:
-          buf = f.read(20)
-          if len(buf) == 0:
-            break
-          o.write(''.join('%d,' % ord(x) for x in buf) + '\n')
-      o.write('};\n')
-      names.append(n)
-    o.write('\nBinaryAsset %s[] = {\n' % array_name)
-    for i, n in enumerate(names):
-      o.write('    {"%s", x%d, sizeof(x%d)},\n' % (n, i, i))
-    o.write('    {nullptr, nullptr, 0}\n};\n')
-
-if __name__ == '__main__':
-  if len(sys.argv) < 4:
-    msg = 'usage:\n  %s SOURCE_DIRECTORY ARRAY_IDENTIFIER OUTPUT_PATH.cpp\n\n'
-    sys.stderr.write(msg % sys.argv[0])
-    exit(1)
-  main(*sys.argv[1:4])
-
diff --git a/tools/BinaryAsset.h b/tools/BinaryAsset.h
deleted file mode 100644
index 6fb7157..0000000
--- a/tools/BinaryAsset.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef BinaryAsset_DEFINED
-#define BinaryAsset_DEFINED
-
-#include <cstddef>
-
-struct BinaryAsset {
-    const char* name;
-    const void* data;
-    size_t len;
-};
-
-#endif  // BinaryAsset_DEFINED
diff --git a/tools/Resources.cpp b/tools/Resources.cpp
index 002d411..0e343c4 100644
--- a/tools/Resources.cpp
+++ b/tools/Resources.cpp
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-#include "BinaryAsset.h"
+#include "ResourceFactory.h"
 #include "Resources.h"
 #include "SkBitmap.h"
 #include "SkCommandLineFlags.h"
@@ -19,6 +19,8 @@
 
 DEFINE_string2(resourcePath, i, "resources", "Directory with test resources: images, fonts, etc.");
 
+sk_sp<SkData> (*gResourceFactory)(const char*) = nullptr;
+
 SkString GetResourcePath(const char* resource) {
     return SkOSPath::Join(FLAGS_resourcePath[0], resource);
 }
@@ -27,7 +29,6 @@
     FLAGS_resourcePath.set(0, resource);
 }
 
-
 bool DecodeDataToBitmap(sk_sp<SkData> data, SkBitmap* dst) {
     std::unique_ptr<SkImageGenerator> gen(SkImageGenerator::MakeFromEncoded(std::move(data)));
     return gen && dst->tryAllocPixels(gen->getInfo()) &&
@@ -41,36 +42,20 @@
                 : nullptr;
 }
 
-#ifdef SK_EMBED_RESOURCES
-
-#include "ResourceFactory.h"
-
-sk_sp<SkData> (*gResourceFactory)(const char*) = nullptr;
-
-extern BinaryAsset gResources[];
-
 sk_sp<SkData> GetResourceAsData(const char* resource) {
     if (gResourceFactory) {
-        return gResourceFactory(resource);
-    }
-    for (const BinaryAsset* ptr = gResources; ptr->name; ++ptr) {
-        if (0 == strcmp(resource, ptr->name)) {
-            return SkData::MakeWithoutCopy(ptr->data, ptr->len);
+        if (auto data = gResourceFactory(resource)) {
+            return data;
         }
+        SkDebugf("Resource \"%s\" not found.\n", resource);
+        SK_ABORT("missing resource");
+    }
+    if (auto data = SkData::MakeFromFileName(GetResourcePath(resource).c_str())) {
+        return data;
     }
     SkDebugf("Resource \"%s\" not found.\n", resource);
-    SK_ABORT("missing resource");
     return nullptr;
 }
-#else
-sk_sp<SkData> GetResourceAsData(const char* resource) {
-    auto data = SkData::MakeFromFileName(GetResourcePath(resource).c_str());
-    if (!data) {
-        SkDebugf("Resource \"%s\" not found.\n", resource);
-    }
-    return data;
-}
-#endif
 
 sk_sp<SkTypeface> MakeResourceAsTypeface(const char* resource) {
     std::unique_ptr<SkStreamAsset> stream(GetResourceAsStream(resource));
diff --git a/tools/skqp/README.md b/tools/skqp/README.md
index bf41b25..cd3f0cd 100644
--- a/tools/skqp/README.md
+++ b/tools/skqp/README.md
@@ -35,10 +35,10 @@
     test another architecture, replace `arm` with `x86`, `x64`, or `arm64`.)
 
         python tools/skqp/download_model
+        python tools/skqp/setup_resources
         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.
 
@@ -69,7 +69,6 @@
 
 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/generate_gn_args b/tools/skqp/generate_gn_args
index 7031414..21009a0 100755
--- a/tools/skqp/generate_gn_args
+++ b/tools/skqp/generate_gn_args
@@ -12,7 +12,6 @@
 is_debug                  = false
 ndk                       = "{ndk}"
 ndk_api                   = 26
-skia_embed_resources      = true
 skia_enable_fontmgr_empty = true
 skia_enable_pdf           = false
 skia_use_dng_sdk          = false
diff --git a/tools/skqp/setup_resources b/tools/skqp/setup_resources
index 45b9b70..22f27a8 100755
--- a/tools/skqp/setup_resources
+++ b/tools/skqp/setup_resources
@@ -9,16 +9,7 @@
 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')
+    skia = os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir)
     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):
diff --git a/tools/skqp/skqp.cpp b/tools/skqp/skqp.cpp
index b3824a8..cba52de 100644
--- a/tools/skqp/skqp.cpp
+++ b/tools/skqp/skqp.cpp
@@ -21,6 +21,7 @@
 #pragma clang diagnostic pop
 #endif
 
+#include "Resources.h"
 #include "SkStream.h"
 #include "SkString.h"
 
@@ -134,6 +135,7 @@
                   << " [GTEST_ARGUMENTS] GMKB_DIRECTORY_PATH GMKB_REPORT_PATH\n\n";
         return 1;
     }
+    SetResourcePath((std::string(argv[1]) + "/resources").c_str());
     gAssetMgr.reset(new StdAssetManager(argv[1]));
     if (argc > 2) {
         gReportDirectoryPath = argv[2];