• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# Copyright 2024 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import pathlib
7import shutil
8
9NUM_CLASSES = 1000
10
11
12def GenerateClassContents(classname):
13  return f"""\
14package org.jni_zero.benchmark;
15
16import org.jni_zero.JNINamespace;
17import org.jni_zero.CalledByNative;
18
19@JNINamespace("jni_zero::benchmark")
20public class {classname} {{
21    @CalledByNative
22    static void callMe() {{
23    }}
24}}
25"""
26
27
28def GenerateAllClasses(directory):
29  for i in range(NUM_CLASSES):
30    classname = 'Placeholder' + str(i + 1)
31    output_directory = directory / 'src/org/jni_zero/benchmark'
32    output_directory.mkdir(parents=True, exist_ok=True)
33    output_path = output_directory / (classname + '.java')
34    with open(output_path, 'wt') as output:
35      output.write(GenerateClassContents(classname))
36
37
38def GenerateBuildFile(buildfile_path):
39  sb = []
40  sb.append("""\
41import("//build/config/android/rules.gni")
42import("//third_party/jni_zero/jni_zero.gni")
43
44generate_jni("generated_header") {
45  sources = [
46""")
47  for i in range(NUM_CLASSES):
48    classname = 'Placeholder' + str(i + 1)
49    sb.append(f'"src/org/jni_zero/benchmark/{classname}.java",')
50  sb.append("""
51  ]
52}
53
54android_library("generated_java") {
55  sources = [
56""")
57  for i in range(NUM_CLASSES):
58    classname = 'Placeholder' + str(i + 1)
59    sb.append(f'"src/org/jni_zero/benchmark/{classname}.java",')
60  sb.append("""\
61  ]
62
63  deps = [
64    ":generated_header_java",
65    "//third_party/jni_zero:jni_zero_java",
66  ]
67}
68""")
69  with open(buildfile_path, 'wt') as output:
70    output.write('\n'.join(sb))
71
72
73def main():
74  output_directory = pathlib.Path(__file__).parents[0]
75  generated = output_directory / 'src'
76  if generated.exists():
77    shutil.rmtree(generated)
78  GenerateAllClasses(output_directory)
79  buildfile_path = output_directory / 'BUILD.gn'
80  GenerateBuildFile(buildfile_path)
81
82
83if __name__ == '__main__':
84  main()
85