All Projects β†’ uber-common β†’ android-build-eval

uber-common / android-build-eval

Licence: Apache-2.0 license
This project includes Uber-agnostic auto-generated project(s) with a comparable complexity to existing Uber Production mobile apps. These are buildable on Buck, Bazel and Gradle- therefore enable build time benchmarking.

Programming Languages

java
68154 projects - #9 most used programming language
Starlark
911 projects
kotlin
9241 projects

Projects that are alternatives of or similar to android-build-eval

Please
High-performance extensible build system for reproducible multi-language builds.
Stars: ✭ 1,856 (+2163.41%)
Mutual labels:  bazel, buck
example-bazel-monorepo
πŸŒΏπŸ’š Example Bazel-ified monorepo, supporting Golang, Java, Python, Scala, and Typescript
Stars: ✭ 213 (+159.76%)
Mutual labels:  bazel, buck
Bazel bin
Bazel's pre-built binaries for armv7l / aarch64 / x86_64.
Stars: ✭ 23 (-71.95%)
Mutual labels:  bazel
bazel-compile-commands-extractor
Goal: Enable awesome tooling for Bazel users of the C language family.
Stars: ✭ 295 (+259.76%)
Mutual labels:  bazel
rules ocaml
OCaml build rules for Bazel
Stars: ✭ 38 (-53.66%)
Mutual labels:  bazel
rules ocaml
A Bazel Language Support Package for OCaml
Stars: ✭ 24 (-70.73%)
Mutual labels:  bazel
rebazel
πŸƒ tool for expediting bazel build workflows
Stars: ✭ 22 (-73.17%)
Mutual labels:  bazel
bazel-emscripten
C++ to WASM or JS using Bazel and Emscripten
Stars: ✭ 40 (-51.22%)
Mutual labels:  bazel
bazel-eclipse
This repo holds two IDE projects. One is the Eclipse Feature for developing Bazel projects in Eclipse. The Bazel Eclipse Feature supports importing, building, and testing Java projects that are built using the Bazel build system. The other is the Bazel Java Language Server, which is a build integration for IDEs such as VS Code.
Stars: ✭ 104 (+26.83%)
Mutual labels:  bazel
bazel-latex
Bazel build system rules for LaTeX
Stars: ✭ 67 (-18.29%)
Mutual labels:  bazel
witness
An API controllable webcam project
Stars: ✭ 13 (-84.15%)
Mutual labels:  bazel
bazel clang tidy
Run clang-tidy on Bazel C++ targets directly, efficiently, with caching enabled
Stars: ✭ 63 (-23.17%)
Mutual labels:  bazel
android-projects
Android benchmark projects for Bazel and Gradle
Stars: ✭ 29 (-64.63%)
Mutual labels:  bazel
Tensorflow-binaries
Tensorflow GNU/Linux, MacOS binaries compiled with SSE4.1, SSE4.2 and AVX
Stars: ✭ 14 (-82.93%)
Mutual labels:  bazel
bazel-action
A GitHub action to run @bazelbuild commands
Stars: ✭ 18 (-78.05%)
Mutual labels:  bazel
rules sass
Sass rules for Bazel
Stars: ✭ 47 (-42.68%)
Mutual labels:  bazel
rules proto grpc
Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets
Stars: ✭ 201 (+145.12%)
Mutual labels:  bazel
morfeo
Morfeo is a tool to build design systems based on a theme. It helps you to follow a design language and write consistent UIs, whatever it is the framework of your choice. It's easy to use and, with the browser extension, your theme and your components are automatically documented.
Stars: ✭ 30 (-63.41%)
Mutual labels:  build-time
rules dart
Dart rules for Bazel
Stars: ✭ 35 (-57.32%)
Mutual labels:  bazel
rules appengine
AppEngine rules for Bazel
Stars: ✭ 28 (-65.85%)
Mutual labels:  bazel

Intro

This repository is for community collaboration.

It includes Uber-agnostic auto-generated projects (via Android Studio Poet), with comparable complexity to existing Uber Production mobile apps.(*)

These projects are buildable on Buck, Bazel and Gradle, therefore it enables build time benchmarking across different build systems.

Any PR to enable speeding up any of these builds is welcome!

Project details

Auto-generated project(s) offer similar complexity to existing Uber Production mobile apps in terms of :

  • number of modules, classes and (some) resources
  • interdependency between modules
  • java Vs kotlin code
  • dependencies on external libraries

When building these project, we voluntarily disable lint, error prone (**) and annotation processors for each build system for better build time measurement parity.

Also, we're not using build network cache, nor remote build execution (Bazel).

Setup

How to build a project

  • (Gradle) ./gradlew rootModule:assembleDebug
  • (Bazel) bazel build rootModule
  • (Buck) ./buckw build rootModule:src_debug

How to run benchmark for a project

  • ./benchmark.sh

Build time report will be generated in the /output/ folder.

Note :

Scenario description

We used special naming for a couple of modules, these can be used to simulate different incremental builds :

  • rootModule : the top project module (i.e any module in the project is a transitive dependency on this module)
  • leafModule(Min|Avg|Max) : these are modules on which some other modules depend on. Min = only a few modules depends on this module, Max = a lot of modules depends on this module (i.e ABI change of this module will cause a somehow large part of the build graph to be rebuilt)

To simulate incremental builds (ABI and non-ABI changes alike), you can modify manually source files of these modules.

Benchmark scenario are as follow :

  • fullLocalCache : clean build of the app (with external artifacts/toolchain already cached locally)
  • abiChangeWith(Min|Avg|Max)LeafLocalCache : abi-change incremental build with (large|medium|small) part of the build graph rebuilt
  • nonAbiChangeWithMaxLeafLocalCache : non abi-change incremental build
  • androidResourceChangeWithRootLocalCache : incremental build with resources changes to root module
  • noOpLocalCache : no-op build

Benchmark results

Conditions

  • Bazel : 3.7.0, persistent workers, sandboxing disabled, JAVA header generation disabled
  • Gradle : 6.8, file watcher and configuration cache enabled
  • Buck : latest version (as specified by OkBuck)
  • Java : Java 8 compiler is used (pulled from JAVA_HOME env variable)
  • Host machine : benchmark is ran on powerful linux server (***). Slower build times are expected on Macbook Pros, for instance.
  • Last run : 02/02/2021 (code changes made after that are not reflected yet in result below)

Current results

apps_presidio_helix_app results

License

Copyright 2020 Uber Technologies

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing permissions and limitations under
the License.

(*) The generated code is not representative of Uber's existing production mobile apps.

(**) For Bazel, Error Prone is still running as it doesn't seem possible to disable it.

(***) Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 96 Thread(s) per core: 2 Core(s) per socket: 24 Model name: Intel(R) Xeon(R) CPU @ 2.00GHz RAM: 396gb

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].