Parallelize singleton execution
Bug: 281536768 Test: manual, presubmits Change-Id: I57fdc76ba6b277e88e196b506af87127a530fd37
This commit is contained in:
parent
e59c0db536
commit
0c10e4dcc0
41 changed files with 51 additions and 51 deletions
|
@ -42,7 +42,7 @@ func init() {
|
|||
}
|
||||
|
||||
func RegisterAndroidMkBuildComponents(ctx RegistrationContext) {
|
||||
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
||||
ctx.RegisterParallelSingletonType("androidmk", AndroidMkSingleton)
|
||||
}
|
||||
|
||||
// Enable androidmk support.
|
||||
|
|
|
@ -22,7 +22,7 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
RegisterSingletonType("api_levels", ApiLevelsSingleton)
|
||||
RegisterParallelSingletonType("api_levels", ApiLevelsSingleton)
|
||||
}
|
||||
|
||||
const previewAPILevelBase = 9000
|
||||
|
|
|
@ -23,7 +23,7 @@ import (
|
|||
|
||||
func init() {
|
||||
ctx := InitRegistrationContext
|
||||
ctx.RegisterSingletonModuleType("buildinfo_prop", buildinfoPropFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("buildinfo_prop", buildinfoPropFactory)
|
||||
}
|
||||
|
||||
type buildinfoPropProperties struct {
|
||||
|
|
|
@ -28,7 +28,7 @@ func init() {
|
|||
|
||||
// Register the gen_notice module type.
|
||||
func RegisterGenNoticeBuildComponents(ctx RegistrationContext) {
|
||||
ctx.RegisterSingletonType("gen_notice_build_rules", GenNoticeBuildRulesFactory)
|
||||
ctx.RegisterParallelSingletonType("gen_notice_build_rules", GenNoticeBuildRulesFactory)
|
||||
ctx.RegisterModuleType("gen_notice", GenNoticeFactory)
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ func readSoongMetrics(config Config) (SoongMetrics, bool) {
|
|||
}
|
||||
|
||||
func init() {
|
||||
RegisterSingletonType("soong_metrics", soongMetricsSingletonFactory)
|
||||
RegisterParallelSingletonType("soong_metrics", soongMetricsSingletonFactory)
|
||||
}
|
||||
|
||||
func soongMetricsSingletonFactory() Singleton { return soongMetricsSingleton{} }
|
||||
|
|
|
@ -3724,7 +3724,7 @@ func (m *moduleContext) TargetRequiredModuleNames() []string {
|
|||
}
|
||||
|
||||
func init() {
|
||||
RegisterSingletonType("buildtarget", BuildTargetSingleton)
|
||||
RegisterParallelSingletonType("buildtarget", BuildTargetSingleton)
|
||||
}
|
||||
|
||||
func BuildTargetSingleton() Singleton {
|
||||
|
|
|
@ -231,7 +231,7 @@ func (ctx *Context) registerSingletonMakeVarsProvider(makevars SingletonMakeVars
|
|||
func collateGloballyRegisteredSingletons() sortableComponents {
|
||||
allSingletons := append(sortableComponents(nil), singletons...)
|
||||
allSingletons = append(allSingletons,
|
||||
singleton{pre: false, parallel: false, name: "bazeldeps", factory: BazelSingleton},
|
||||
singleton{pre: false, parallel: true, name: "bazeldeps", factory: BazelSingleton},
|
||||
|
||||
// Register phony just before makevars so it can write out its phony rules as Make rules
|
||||
singleton{pre: false, parallel: false, name: "phony", factory: phonySingletonFactory},
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
package android
|
||||
|
||||
func init() {
|
||||
RegisterSingletonType("testsuites", testSuiteFilesFactory)
|
||||
RegisterParallelSingletonType("testsuites", testSuiteFilesFactory)
|
||||
}
|
||||
|
||||
func testSuiteFilesFactory() Singleton {
|
||||
|
|
|
@ -27,7 +27,7 @@ func init() {
|
|||
}
|
||||
|
||||
func registerApexDepsInfoComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("apex_depsinfo_singleton", apexDepsInfoSingletonFactory)
|
||||
ctx.RegisterParallelSingletonType("apex_depsinfo_singleton", apexDepsInfoSingletonFactory)
|
||||
}
|
||||
|
||||
type apexDepsInfoSingleton struct {
|
||||
|
|
|
@ -33,7 +33,7 @@ func init() {
|
|||
|
||||
func registerApexKeyBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("apex_key", ApexKeyFactory)
|
||||
ctx.RegisterSingletonType("apex_keys_text", apexKeysTextFactory)
|
||||
ctx.RegisterParallelSingletonType("apex_keys_text", apexKeysTextFactory)
|
||||
}
|
||||
|
||||
type apexKey struct {
|
||||
|
|
|
@ -51,7 +51,7 @@ func init() {
|
|||
pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS)
|
||||
pctx.SourcePathVariable("bloaty", "prebuilts/build-tools/${hostPrebuiltTag}/bin/bloaty")
|
||||
pctx.HostBinToolVariable("bloatyMerger", "bloaty_merger")
|
||||
android.RegisterSingletonType("file_metrics", fileSizesSingleton)
|
||||
android.RegisterParallelSingletonType("file_metrics", fileSizesSingleton)
|
||||
fileSizeMeasurerKey = blueprint.NewProvider(measuredFiles{})
|
||||
}
|
||||
|
||||
|
|
2
cc/cc.go
2
cc/cc.go
|
@ -83,7 +83,7 @@ func RegisterCCBuildComponents(ctx android.RegistrationContext) {
|
|||
ctx.TopDown("sabi_deps", sabiDepsMutator)
|
||||
})
|
||||
|
||||
ctx.RegisterSingletonType("kythe_extract_all", kytheExtractAllFactory)
|
||||
ctx.RegisterParallelSingletonType("kythe_extract_all", kytheExtractAllFactory)
|
||||
}
|
||||
|
||||
// Deps is a struct containing module names of dependencies, separated by the kind of dependency.
|
||||
|
|
|
@ -30,7 +30,7 @@ import (
|
|||
// The info file is generated in $OUT/module_bp_cc_depend.json.
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("ccdeps_generator", ccDepsGeneratorSingleton)
|
||||
android.RegisterParallelSingletonType("ccdeps_generator", ccDepsGeneratorSingleton)
|
||||
}
|
||||
|
||||
func ccDepsGeneratorSingleton() android.Singleton {
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
// structure (see variable CLionOutputProjectsDirectory for root).
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("cmakelists_generator", cMakeListsGeneratorSingleton)
|
||||
android.RegisterParallelSingletonType("cmakelists_generator", cMakeListsGeneratorSingleton)
|
||||
}
|
||||
|
||||
func cMakeListsGeneratorSingleton() android.Singleton {
|
||||
|
|
|
@ -32,7 +32,7 @@ import (
|
|||
// make SOONG_GEN_COMPDB=1 nothing to get all targets.
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("compdb_generator", compDBGeneratorSingleton)
|
||||
android.RegisterParallelSingletonType("compdb_generator", compDBGeneratorSingleton)
|
||||
}
|
||||
|
||||
func compDBGeneratorSingleton() android.Singleton {
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
func init() {
|
||||
android.RegisterModuleType("cc_fuzz", LibFuzzFactory)
|
||||
android.RegisterSingletonType("cc_fuzz_packaging", fuzzPackagingFactory)
|
||||
android.RegisterParallelSingletonType("cc_fuzz_packaging", fuzzPackagingFactory)
|
||||
}
|
||||
|
||||
type FuzzProperties struct {
|
||||
|
|
|
@ -19,8 +19,8 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("ndk_abi_dump", NdkAbiDumpSingleton)
|
||||
android.RegisterSingletonType("ndk_abi_diff", NdkAbiDiffSingleton)
|
||||
android.RegisterParallelSingletonType("ndk_abi_dump", NdkAbiDumpSingleton)
|
||||
android.RegisterParallelSingletonType("ndk_abi_diff", NdkAbiDiffSingleton)
|
||||
}
|
||||
|
||||
func getNdkAbiDumpInstallBase(ctx android.PathContext) android.OutputPath {
|
||||
|
|
|
@ -66,7 +66,7 @@ func RegisterNdkModuleTypes(ctx android.RegistrationContext) {
|
|||
ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
|
||||
ctx.RegisterModuleType("versioned_ndk_headers", versionedNdkHeadersFactory)
|
||||
ctx.RegisterModuleType("preprocessed_ndk_headers", preprocessedNdkHeadersFactory)
|
||||
ctx.RegisterSingletonType("ndk", NdkSingleton)
|
||||
ctx.RegisterParallelSingletonType("ndk", NdkSingleton)
|
||||
}
|
||||
|
||||
func getNdkInstallBase(ctx android.PathContext) android.InstallPath {
|
||||
|
|
|
@ -23,7 +23,7 @@ import (
|
|||
|
||||
func init() {
|
||||
// Use singleton type to gather all generated soong modules.
|
||||
android.RegisterSingletonType("stublibraries", stubLibrariesSingleton)
|
||||
android.RegisterParallelSingletonType("stublibraries", stubLibrariesSingleton)
|
||||
}
|
||||
|
||||
type stubLibraries struct {
|
||||
|
|
|
@ -201,7 +201,7 @@ func (tidy *tidyFeature) flags(ctx ModuleContext, flags Flags) Flags {
|
|||
}
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("tidy_phony_targets", TidyPhonySingleton)
|
||||
android.RegisterParallelSingletonType("tidy_phony_targets", TidyPhonySingleton)
|
||||
}
|
||||
|
||||
// This TidyPhonySingleton generates both tidy-* and obj-* phony targets for C/C++ files.
|
||||
|
|
14
cc/vndk.go
14
cc/vndk.go
|
@ -417,16 +417,16 @@ func VndkMutator(mctx android.BottomUpMutatorContext) {
|
|||
|
||||
func init() {
|
||||
RegisterVndkLibraryTxtTypes(android.InitRegistrationContext)
|
||||
android.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
|
||||
android.RegisterParallelSingletonType("vndk-snapshot", VndkSnapshotSingleton)
|
||||
}
|
||||
|
||||
func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonModuleType("llndk_libraries_txt", llndkLibrariesTxtFactory)
|
||||
ctx.RegisterSingletonModuleType("vndksp_libraries_txt", vndkSPLibrariesTxtFactory)
|
||||
ctx.RegisterSingletonModuleType("vndkcore_libraries_txt", vndkCoreLibrariesTxtFactory)
|
||||
ctx.RegisterSingletonModuleType("vndkprivate_libraries_txt", vndkPrivateLibrariesTxtFactory)
|
||||
ctx.RegisterSingletonModuleType("vndkproduct_libraries_txt", vndkProductLibrariesTxtFactory)
|
||||
ctx.RegisterSingletonModuleType("vndkcorevariant_libraries_txt", vndkUsingCoreVariantLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("llndk_libraries_txt", llndkLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("vndksp_libraries_txt", vndkSPLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("vndkcore_libraries_txt", vndkCoreLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("vndkprivate_libraries_txt", vndkPrivateLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("vndkproduct_libraries_txt", vndkProductLibrariesTxtFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("vndkcorevariant_libraries_txt", vndkUsingCoreVariantLibrariesTxtFactory)
|
||||
}
|
||||
|
||||
type vndkLibrariesTxt struct {
|
||||
|
|
|
@ -197,7 +197,7 @@ var pctx = android.NewPackageContext("android/soong/dexpreopt")
|
|||
|
||||
func init() {
|
||||
pctx.Import("android/soong/android")
|
||||
android.RegisterSingletonType("dexpreopt-soong-config", func() android.Singleton {
|
||||
android.RegisterParallelSingletonType("dexpreopt-soong-config", func() android.Singleton {
|
||||
return &globalSoongConfigSingleton{}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -465,7 +465,7 @@ func dexpreoptBootJarsFactory() android.SingletonModule {
|
|||
}
|
||||
|
||||
func RegisterDexpreoptBootJarsComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonModuleType("dex_bootjars", dexpreoptBootJarsFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("dex_bootjars", dexpreoptBootJarsFactory)
|
||||
}
|
||||
|
||||
func SkipDexpreoptBootJars(ctx android.PathContext) bool {
|
||||
|
|
|
@ -28,7 +28,7 @@ func init() {
|
|||
}
|
||||
|
||||
func RegisterDexpreoptCheckBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonModuleType("dexpreopt_systemserver_check", dexpreoptSystemserverCheckFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("dexpreopt_systemserver_check", dexpreoptSystemserverCheckFactory)
|
||||
}
|
||||
|
||||
// A build-time check to verify if all compilation artifacts of system server jars are installed
|
||||
|
|
|
@ -38,7 +38,7 @@ func init() {
|
|||
|
||||
func RegisterJavaFuzzBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("java_fuzz", JavaFuzzFactory)
|
||||
ctx.RegisterSingletonType("java_fuzz_packaging", javaFuzzPackagingFactory)
|
||||
ctx.RegisterParallelSingletonType("java_fuzz_packaging", javaFuzzPackagingFactory)
|
||||
}
|
||||
|
||||
type JavaFuzzTest struct {
|
||||
|
|
|
@ -25,7 +25,7 @@ func init() {
|
|||
}
|
||||
|
||||
func RegisterHiddenApiSingletonComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("hiddenapi", hiddenAPISingletonFactory)
|
||||
ctx.RegisterParallelSingletonType("hiddenapi", hiddenAPISingletonFactory)
|
||||
}
|
||||
|
||||
var PrepareForTestWithHiddenApiBuildComponents = android.FixtureRegisterWithContext(RegisterHiddenApiSingletonComponents)
|
||||
|
|
|
@ -73,8 +73,8 @@ func registerJavaBuildComponents(ctx android.RegistrationContext) {
|
|||
ctx.BottomUp("jacoco_deps", jacocoDepsMutator).Parallel()
|
||||
})
|
||||
|
||||
ctx.RegisterSingletonType("logtags", LogtagsSingleton)
|
||||
ctx.RegisterSingletonType("kythe_java_extract", kytheExtractJavaFactory)
|
||||
ctx.RegisterParallelSingletonType("logtags", LogtagsSingleton)
|
||||
ctx.RegisterParallelSingletonType("kythe_java_extract", kytheExtractJavaFactory)
|
||||
}
|
||||
|
||||
func RegisterJavaSdkMemberTypes() {
|
||||
|
|
|
@ -26,7 +26,7 @@ import (
|
|||
// called. Dependency info file is generated in $OUT/module_bp_java_depend.json.
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("jdeps_generator", jDepsGeneratorSingleton)
|
||||
android.RegisterParallelSingletonType("jdeps_generator", jDepsGeneratorSingleton)
|
||||
}
|
||||
|
||||
func jDepsGeneratorSingleton() android.Singleton {
|
||||
|
|
|
@ -705,7 +705,7 @@ func (l *lintSingleton) MakeVars(ctx android.MakeVarsContext) {
|
|||
var _ android.SingletonMakeVarsProvider = (*lintSingleton)(nil)
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("lint",
|
||||
android.RegisterParallelSingletonType("lint",
|
||||
func() android.Singleton { return &lintSingleton{} })
|
||||
|
||||
registerLintBuildComponents(android.InitRegistrationContext)
|
||||
|
|
|
@ -26,7 +26,7 @@ func init() {
|
|||
}
|
||||
|
||||
func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonModuleType("platform_bootclasspath", platformBootclasspathFactory)
|
||||
ctx.RegisterParallelSingletonModuleType("platform_bootclasspath", platformBootclasspathFactory)
|
||||
}
|
||||
|
||||
// The tags used for the dependencies between the platform bootclasspath and any configured boot
|
||||
|
|
|
@ -36,7 +36,7 @@ var CompatConfigSdkMemberType = &compatConfigMemberType{
|
|||
}
|
||||
|
||||
func registerPlatformCompatConfigBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("platform_compat_config_singleton", platformCompatConfigSingletonFactory)
|
||||
ctx.RegisterParallelSingletonType("platform_compat_config_singleton", platformCompatConfigSingletonFactory)
|
||||
ctx.RegisterModuleType("platform_compat_config", PlatformCompatConfigFactory)
|
||||
ctx.RegisterModuleType("prebuilt_platform_compat_config", prebuiltCompatConfigFactory)
|
||||
ctx.RegisterModuleType("global_compat_config", globalCompatConfigFactory)
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
func init() {
|
||||
android.RegisterPreSingletonType("sdk_versions", sdkPreSingletonFactory)
|
||||
android.RegisterSingletonType("sdk", sdkSingletonFactory)
|
||||
android.RegisterParallelSingletonType("sdk", sdkSingletonFactory)
|
||||
android.RegisterMakeVarsProvider(pctx, sdkMakeVars)
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("update-meta", UpdateMetaSingleton)
|
||||
android.RegisterParallelSingletonType("update-meta", UpdateMetaSingleton)
|
||||
}
|
||||
|
||||
func UpdateMetaSingleton() android.Singleton {
|
||||
|
|
|
@ -51,7 +51,7 @@ func init() {
|
|||
}
|
||||
|
||||
func RegisterProvenanceSingleton(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("provenance_metadata_singleton", provenanceInfoSingletonFactory)
|
||||
ctx.RegisterParallelSingletonType("provenance_metadata_singleton", provenanceInfoSingletonFactory)
|
||||
}
|
||||
|
||||
var PrepareForTestWithProvenanceSingleton = android.FixtureRegisterWithContext(RegisterProvenanceSingleton)
|
||||
|
|
|
@ -19,7 +19,7 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("rustdoc", RustdocSingleton)
|
||||
android.RegisterParallelSingletonType("rustdoc", RustdocSingleton)
|
||||
}
|
||||
|
||||
func RustdocSingleton() android.Singleton {
|
||||
|
|
|
@ -74,7 +74,7 @@ func rustProjectGeneratorSingleton() android.Singleton {
|
|||
}
|
||||
|
||||
func init() {
|
||||
android.RegisterSingletonType("rust_project_generator", rustProjectGeneratorSingleton)
|
||||
android.RegisterParallelSingletonType("rust_project_generator", rustProjectGeneratorSingleton)
|
||||
}
|
||||
|
||||
// sourceProviderVariantSource returns the path to the source file if this
|
||||
|
|
|
@ -45,7 +45,7 @@ func init() {
|
|||
})
|
||||
pctx.Import("android/soong/rust/config")
|
||||
pctx.ImportAs("cc_config", "android/soong/cc/config")
|
||||
android.InitRegistrationContext.RegisterSingletonType("kythe_rust_extract", kytheExtractRustFactory)
|
||||
android.InitRegistrationContext.RegisterParallelSingletonType("kythe_rust_extract", kytheExtractRustFactory)
|
||||
}
|
||||
|
||||
type Flags struct {
|
||||
|
|
|
@ -200,8 +200,8 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
|
|||
ctx.BottomUp("rust_stdlinkage", LibstdMutator).Parallel()
|
||||
ctx.BottomUp("rust_begin", BeginMutator).Parallel()
|
||||
})
|
||||
ctx.RegisterSingletonType("rust_project_generator", rustProjectGeneratorSingleton)
|
||||
ctx.RegisterSingletonType("kythe_rust_extract", kytheExtractRustFactory)
|
||||
ctx.RegisterParallelSingletonType("rust_project_generator", rustProjectGeneratorSingleton)
|
||||
ctx.RegisterParallelSingletonType("kythe_rust_extract", kytheExtractRustFactory)
|
||||
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("rust_sanitizers", rustSanitizerRuntimeMutator).Parallel()
|
||||
})
|
||||
|
|
|
@ -75,7 +75,7 @@ type hostSnapshotFakeJsonFlags struct {
|
|||
}
|
||||
|
||||
func registerHostSnapshotComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("host-fake-snapshot", HostToolsFakeAndroidSingleton)
|
||||
ctx.RegisterParallelSingletonType("host-fake-snapshot", HostToolsFakeAndroidSingleton)
|
||||
}
|
||||
|
||||
type hostFakeSingleton struct {
|
||||
|
|
|
@ -68,7 +68,7 @@ var RecoverySnapshotImageName = "recovery"
|
|||
type RecoverySnapshotImage struct{}
|
||||
|
||||
func (RecoverySnapshotImage) Init(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("recovery-snapshot", RecoverySnapshotSingleton)
|
||||
ctx.RegisterParallelSingletonType("recovery-snapshot", RecoverySnapshotSingleton)
|
||||
}
|
||||
|
||||
func (RecoverySnapshotImage) RegisterAdditionalModule(ctx android.RegistrationContext, name string, factory android.ModuleFactory) {
|
||||
|
|
|
@ -78,8 +78,8 @@ var VendorSnapshotImageName = "vendor"
|
|||
type VendorSnapshotImage struct{}
|
||||
|
||||
func (VendorSnapshotImage) Init(ctx android.RegistrationContext) {
|
||||
ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
|
||||
ctx.RegisterSingletonType("vendor-fake-snapshot", VendorFakeSnapshotSingleton)
|
||||
ctx.RegisterParallelSingletonType("vendor-snapshot", VendorSnapshotSingleton)
|
||||
ctx.RegisterParallelSingletonType("vendor-fake-snapshot", VendorFakeSnapshotSingleton)
|
||||
}
|
||||
|
||||
func (VendorSnapshotImage) RegisterAdditionalModule(ctx android.RegistrationContext, name string, factory android.ModuleFactory) {
|
||||
|
|
Loading…
Reference in a new issue