Skip to content

Merge executors to master #4322

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Nov 15, 2022
Merged

Merge executors to master #4322

merged 6 commits into from
Nov 15, 2022

Conversation

vkryachko
Copy link
Member

This makes executors available to product teams through components.

For more details see

# Intro
OS threads are a limited resource that needs to be used with care. In order to minimize the number of threads used by Firebase
as a whole and to increase resource sharing Firebase Common provides a set of standard
[executors](https://developer.android.com/reference/java/util/concurrent/Executor)
and [coroutine dispatchers](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-dispatcher/)
for use by all Firebase SDKs.
These executors are available as components and can be requested by product SDKs as component dependencies.
Example:
```java
public class MyRegistrar implements ComponentRegistrar {
public List<Component<?>> getComponents() {
Qualified<Executor> backgroundExecutor = Qualified.qualified(Background.class, Executor.class);
Qualified<ExecutorService> liteExecutorService = Qualified.qualified(Lightweight.class, ExecutorService.class);
return Collections.singletonList(
Component.builder(MyComponent.class)
.add(Dependency.required(backgroundExecutor))
.add(Dependency.required(liteExecutorService))
.factory(c -> new MyComponent(c.get(backgroundExecutor), c.get(liteExecutorService)))
.build());
}
}
```

* Add qualifier support to firebase components.

Details: go/firebase-component-qualifiers

* fix errorprone error.

* change copyright year.
* Register executors as components.

The intent for those is to be used by all Firebase SDKs and forbid
creating their own at will.

* Add copyrights.

* add more copyrights

* ktlintformat

* gJF

* ktlint

* Address review comments.
Namely, SequentialExecutor and directExecutor.
Any violations would kill the app in debug builds of firebase-common,
and log a warning in release builds. This is done to fail tests that
incorrectly use executors while not affecting 3p apps in release builds.

Additionally correctly set thread priorities in an Android specific way.
* Enable thread pool linter check.

All violations are now suppressed, bugs filed to fix each product.

* ktlint

* Remove init

* Fix copyright
@google-oss-bot
Copy link
Contributor

1 Warning
⚠️ Did you forget to add a changelog entry? (Add the 'no-changelog' label to the PR to silence this warning.)

Generated by 🚫 Danger

@google-oss-bot
Copy link
Contributor

Size Report 1

Affected Products

  • base

    TypeBase (c1adf5b)Merge (3be5919)Diff
    apk (aggressive)?8.39 kB? (?)
    apk (release)?8.65 kB? (?)
  • firebase-abt

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?13.8 kB? (?)
    apk (aggressive)?95.2 kB? (?)
    apk (release)?705 kB? (?)
  • firebase-annotations

    TypeBase (c1adf5b)Merge (3be5919)Diff
    apk (aggressive)?8.39 kB? (?)
    apk (release)?9.46 kB? (?)
  • firebase-appcheck

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?37.7 kB? (?)
    apk (aggressive)?341 kB? (?)
    apk (release)?995 kB? (?)
  • firebase-appcheck-debug

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?11.6 kB? (?)
    apk (aggressive)?341 kB? (?)
    apk (release)?998 kB? (?)
  • firebase-appcheck-interop

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?5.02 kB? (?)
    apk (aggressive)?337 kB? (?)
    apk (release)?981 kB? (?)
  • firebase-appcheck-playintegrity

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?10.1 kB? (?)
    apk (aggressive)?341 kB? (?)
    apk (release)?1.01 MB? (?)
  • firebase-appcheck-safetynet

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?12.1 kB? (?)
    apk (aggressive)?341 kB? (?)
    apk (release)?1.01 MB? (?)
  • firebase-appdistribution

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?140 kB? (?)
    apk (aggressive)?785 kB? (?)
    apk (release)?2.01 MB? (?)
  • firebase-appdistribution-api

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?14.2 kB? (?)
    apk (aggressive)?95.2 kB? (?)
    apk (release)?707 kB? (?)
  • firebase-common

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?65.3 kB? (?)
    apk (aggressive)?94.5 kB? (?)
    apk (release)?699 kB? (?)
  • firebase-common-ktx

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?13.2 kB? (?)
    apk (aggressive)?122 kB? (?)
    apk (release)?1.64 MB? (?)
  • firebase-components

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?44.9 kB? (?)
    apk (aggressive)?8.68 kB? (?)
    apk (release)?33.6 kB? (?)
  • firebase-config

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?63.0 kB? (?)
    apk (aggressive)?103 kB? (?)
    apk (release)?753 kB? (?)
  • firebase-crashlytics

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?342 kB? (?)
    apk (aggressive)?226 kB? (?)
    apk (release)?912 kB? (?)
  • firebase-database

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?488 kB? (?)
    apk (aggressive)?343 kB? (?)
    apk (release)?1.16 MB? (?)
  • firebase-database-collection

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?33.6 kB? (?)
    apk (aggressive)?312 kB? (?)
    apk (release)?941 kB? (?)
  • firebase-datatransport

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?4.94 kB? (?)
    apk (aggressive)?145 kB? (?)
    apk (release)?787 kB? (?)
  • firebase-encoders

    TypeBase (c1adf5b)Merge (3be5919)Diff
    apk (aggressive)?8.68 kB? (?)
    apk (release)?15.3 kB? (?)
  • firebase-encoders-json

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?10.7 kB? (?)
    apk (aggressive)?8.68 kB? (?)
    apk (release)?20.1 kB? (?)
  • firebase-encoders-proto

    TypeBase (c1adf5b)Merge (3be5919)Diff
    apk (aggressive)?8.68 kB? (?)
    apk (release)?21.6 kB? (?)
  • firebase-firestore

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?1.31 MB? (?)
    apk (aggressive)?501 kB? (?)
    apk (release)?3.37 MB? (?)
  • firebase-inappmessaging

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?470 kB? (?)
    apk (aggressive)?681 kB? (?)
    apk (release)?3.39 MB? (?)
  • firebase-installations

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?55.0 kB? (?)
    apk (aggressive)?96.0 kB? (?)
    apk (release)?723 kB? (?)
  • firebase-installations-interop

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?8.05 kB? (?)
    apk (aggressive)?65.0 kB? (?)
    apk (release)?651 kB? (?)
  • firebase-messaging

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?142 kB? (?)
    apk (aggressive)?448 kB? (?)
    apk (release)?1.16 MB? (?)
  • firebase-messaging-directboot

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?8.79 kB? (?)
    apk (aggressive)?448 kB? (?)
    apk (release)?1.16 MB? (?)
  • firebase-ml-modeldownloader

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?87.6 kB? (?)
    apk (aggressive)?152 kB? (?)
    apk (release)?841 kB? (?)
  • firebase-perf

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?313 kB? (?)
    apk (aggressive)?1.04 MB? (?)
    apk (release)?2.49 MB? (?)
  • firebase-segmentation

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?20.2 kB? (?)
    apk (aggressive)?96.5 kB? (?)
    apk (release)?730 kB? (?)
  • firebase-storage

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?116 kB? (?)
    apk (aggressive)?338 kB? (?)
    apk (release)?1.03 MB? (?)
  • protolite-well-known-types

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?999 kB? (?)
    apk (aggressive)?134 kB? (?)
    apk (release)?663 kB? (?)
  • transport-api

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?6.74 kB? (?)
    apk (aggressive)?8.68 kB? (?)
    apk (release)?14.9 kB? (?)
  • transport-backend-cct

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?53.6 kB? (?)
    apk (aggressive)?58.2 kB? (?)
    apk (release)?105 kB? (?)
  • transport-runtime

    TypeBase (c1adf5b)Merge (3be5919)Diff
    aar?180 kB? (?)
    apk (aggressive)?44.0 kB? (?)
    apk (release)?83.5 kB? (?)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/NbCrY5aqfg.html

@github-actions
Copy link
Contributor

github-actions bot commented Nov 14, 2022

Unit Test Results

   384 files   - 11     384 suites   - 11   19m 13s ⏱️ - 1m 23s
4 683 tests  - 47  4 661 ✔️  - 47  22 💤 ±0  0 ±0 
4 699 runs   - 47  4 677 ✔️  - 47  22 💤 ±0  0 ±0 

Results for commit a59f456. ± Comparison against base commit c1adf5b.

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@rlazo rlazo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't forget to add the label for no-changelog

@vkryachko vkryachko merged commit e0cfdd6 into master Nov 15, 2022
@vkryachko vkryachko deleted the executors branch November 15, 2022 18:16
davidmotson pushed a commit that referenced this pull request Nov 28, 2022
* Add qualifier support to firebase components. (#3180)

* Add qualifier support to firebase components.

Details: go/firebase-component-qualifiers

* fix errorprone error.

* change copyright year.

* Register executors as components. (#4288)

* Register executors as components.

The intent for those is to be used by all Firebase SDKs and forbid
creating their own at will.

* Add copyrights.

* add more copyrights

* ktlintformat

* gJF

* ktlint

* Address review comments.

* Adds generally useful executors (#4305)

Namely, SequentialExecutor and directExecutor.

* Enable strict mode for executors. (#4303)

Any violations would kill the app in debug builds of firebase-common,
and log a warning in release builds. This is done to fail tests that
incorrectly use executors while not affecting 3p apps in release builds.

Additionally correctly set thread priorities in an Android specific way.

* Enable thread pool linter check. (#4297)

* Enable thread pool linter check.

All violations are now suppressed, bugs filed to fix each product.

* ktlint

* Remove init

* Fix copyright
@firebase firebase locked and limited conversation to collaborators Dec 16, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants