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