Summary: Added stats, so that we know how much people have to wait when opening plugin after we open the queue GK
Reviewed By: jknoxville
Differential Revision: D19598730
fbshipit-source-id: f955123f2bae5b870eada8f787385d6c0450453e
Summary: When doing a Flipper trace export through the app menu (not the support form), the export still contained a support request details section, with the default data of a bug report. That doesn't make any sense and is confusing, so this change makes sure the report is only included if it is supported through the supportRequestForm
Reviewed By: passy
Differential Revision: D19499408
fbshipit-source-id: ff7a5333f2045f2465966dffa0c5fb03aaeaceb8
Summary:
Not all plugin names are created equal in flipper. For example, plugins would bear different names in the sidebar and in the plugin selection when making a support request / flipper trace. Fixed this and also introduced a `getPluginTitle` utility that produces this name consistently.
Plugin listview now also sort their items consitently with the sidebar.
Probably also fixed an error in the flipper export screen, where a correct TS error was supressed.
Reviewed By: jknoxville
Differential Revision: D19499404
fbshipit-source-id: c5b23a170d41d96799eb7899e249f70778717d45
Summary: For the navigation plugin we want to opt-out from the "enabled" and "process messages later" optimizations, because it's events should be immediately processed to reflect the changes in the topbar for navigation purposes
Reviewed By: jknoxville
Differential Revision: D19554297
fbshipit-source-id: 4bd49b5d1327feea6dea52e86d9dbc9d54a5dbee
Summary: The navigation plugin threw exceptions, as the defaultPersisted state was not mixed into the already stored state, making some fields unreadable
Reviewed By: jknoxville
Differential Revision: D19554291
fbshipit-source-id: 57f045aa1eae10682e44d479b9aecb51f0391b9e
Summary:
Currently Android development can be disabled in Settings, but iOS development not. Because of this Doctor always shows warnings to Android-only developers who has no iOS SDK installed. This change makes it possible to disable "iOS development" option in the same way as we already had for Android.
Additionally I changed Doctor warning to show more specific message if only iOS or only Android checks are failed with suggestion to disable the failing platform if it is not required.
Reviewed By: jknoxville
Differential Revision: D19538070
fbshipit-source-id: 234d2c6cf21083f9d6aebd63418aed7f9a78e922
Summary:
There are complaints about Android SDK being reported as "not installed" when it is actually installed. To address them, I changed the way how we detect SDK and also added some minimal actionable feedback for each check.
The problem with the previous implementation of Android SDK check via "envinfo" is that the library uses "sdkmanager" tool under the hood, and this tool doesn't work on Java 9+. To fix this I'm changing the way how we assume SDK is installed to simple check for "adb" tool existence.
Actionable feedback is shown on Doctor report when you click to an item.
Reviewed By: jknoxville
Differential Revision: D19517769
fbshipit-source-id: 1c21f1bdcd05c7c0ae3f97b9c3454efa2c861d26
Summary: Discovered that all gathered plugin stats where empty due to mis-using Object.entries. Fixed that. Also added a accumulated cpuTime metric, which should be great for a uniform trend line.
Reviewed By: jknoxville
Differential Revision: D19517279
fbshipit-source-id: a6df83eea000a5d59fe692a3795fd58ae6457821
Summary:
Fixes broken export through URL.
Also fixes an issue where we suppress an exception
Reviewed By: mweststrate
Differential Revision: D19517066
fbshipit-source-id: c68b6a1bcbc8b0588e0db9032268033a42b43c61
Summary:
This diff improves two things:
1. Stats are now gathered on every `trackUsage` tick, rather than only when there is a selection
2. The stats now include a delta to compare it with the previous tick
Reviewed By: passy
Differential Revision: D19514231
fbshipit-source-id: 1854c1dc03c63a03db8c7040c185d2629e1b9ea2
Summary: Fixed few tests which were failing on Windows
Reviewed By: mweststrate
Differential Revision: D19371105
fbshipit-source-id: 118a76783680a3efa0645321d8c88b4e6e754ce0
Summary:
Send per-healthcheck success/failure event to be able to analyze most common problems.
Send event when doctor warning bar shown.
Send event when doctor report is opened by user.
Send event when user set flag "Do not show warning again" in the doctor report.
Reviewed By: passy
Differential Revision: D19312127
fbshipit-source-id: 01b648d1154a3aeadc85980190cb9e5e221b572e
Summary: Added unique keys for each healthcheck and used them to save already seen failures. Later I will also use them for gathering doctor analytics.
Reviewed By: jknoxville
Differential Revision: D19301583
fbshipit-source-id: 0c0aa977ea73ce555e0d9fb8e8ead844624fb9cd
Summary:
Original commit changeset: 05d13aca7145
Attempt to upgrade `electron` as it instacrashed; `electron-builder` version 22.1.0 didn't sign package correctly and caused the instacrash,
Reduced the version to 21.2.0 (latest).
Reviewed By: passy, nikoant
Differential Revision: D18954671
fbshipit-source-id: bc2dbd4fec9afb51d9a535974651b13d195407b4
Summary:
This diff changes the sidebar navigation, fixing a bunch of issues:
It will be possible to quickly switch again between the same plugins in multiple apps
No need to expand-and-check the app dropdown until the app is connected
No need for ugly fallback selections if some app connects faster than another one
Reviewed By: nikoant
Differential Revision: D19272701
fbshipit-source-id: 10f5fab42391014ef4a4a4c91c529d93f8bfb125
Summary: Currently release build fails to launch, because path to icons.json is resolved incorrectly. This change should fix resolving so it will work for both dev and release build.
Reviewed By: jknoxville, mweststrate
Differential Revision: D19274410
fbshipit-source-id: 9c0a92e1f6808997d08366c8021cd57565c5ae2c
Summary:
Builds didn't fail when using non-existing icons, and the error message was not very clear
Also added verification that, before automatically adding an icon to the prefetcher, that icon does exists
Reviewed By: jknoxville
Differential Revision: D19264063
fbshipit-source-id: 4320d5b960e85e3f15bbca13d69f3063b983a511
Summary: Doctor sometimes can show false-positives and in such case there is no way to suppress showing warning message on each startup. To reduce annoyance I've added an option to save the problems already seen by user and show the Doctor warning only for new problems.
Reviewed By: mweststrate
Differential Revision: D19187095
fbshipit-source-id: 14c1fcc9674f47fbe0b5b0f2d5d1bceb47f7b45d
Summary:
When browing through flipper one gets random warnings about uncached icons. Since we can't predict which plugins use which icons, it is hard to keep the list in `icons.js` updated.
This diff extracts the table to a separate json file (static/icons.json) and if an icon is missing in development, it will automatically add it to the list, so that the icons will be part of the prefetch of the next build / restart
Reviewed By: jknoxville
Differential Revision: D19257253
fbshipit-source-id: c9c791d50fa5d66738d93873289fbde575f32d66
Summary: Without selected device or client, it is currently impossible to submit a bug report. This diff fixes that.
Reviewed By: jknoxville
Differential Revision: D19251701
fbshipit-source-id: fd0dc0c779fb27d93ed02a404da76a7e6b251b94
Summary:
Since background plugins don't receive data anymore when not starred, we should hint the user about this.
For this diff, I reused the existing statusbar. Although this solution is quite ugly, I think it is better than introducing yet another notification / warning mechanism. Probably we should revisit the layout of this status bar in the future.
Reviewed By: jknoxville
Differential Revision: D19251588
fbshipit-source-id: 1dfd07be383d4ba318f344ebff4b08ed36194c58
Summary:
From several reviews / early feedbacks it was suggested several times to use the star mechanism to distinguish which plugins are allowed to send messages. This diff implements that:
- If a plugin is not selected, and not starred, it will drop the messages it received in the background
- This logic is still behind the same GK
- I think this change warrants upping the message queue limits significantly
- A future optimization would be to disable sending messages from the device side of things to reduce bridge usage, but that change is probably a lot more complicated with less impact
- In the next diff I'll make clear from UI perspective that unstarred plugins don't queue messages
In the attach video one can see how graphQL plugin keeps storing messages if it is starred, but if it isn't starred and not selected either, it will skip messages
{F225692819}
Reviewed By: jknoxville
Differential Revision: D19250928
fbshipit-source-id: 7e6af0eb6830dc79951cfd206e05b44061f1b14a
Summary: `flipperPrintPluginBackgroundStats()` tended to report the class name rather than the given plugin id
Reviewed By: jknoxville
Differential Revision: D19250706
fbshipit-source-id: 6035892bacf6a592d8c510320d5e003fac580ec7
Summary: This diff makes sure that pending queues for plugins that are selected are processed before making a flipper export.
Reviewed By: jknoxville
Differential Revision: D19194211
fbshipit-source-id: e076375889450407e7f94384051719f3bbc415ee
Summary:
To avoid plugins to collect data forever and store it (if they are never opened), introduced a hard-coded default limit on how many events will be preserved.
A semantic change is that plugins have to be potentially resistant against missing events. So far, during testing, this didn't seem to cause any problems.
Reviewed By: jonathoma
Differential Revision: D19175912
fbshipit-source-id: 828be941e76b7356c9f5be7e5a49de9a7a31b0d2
Summary: This introduces the necessary UI changes, to kick off and render event progressing process where needed
Reviewed By: jknoxville
Differential Revision: D19175450
fbshipit-source-id: 61e3e8f59eeebf97eedbe715fa7db320286543e2
Summary:
This diff introduces the logic for queueing incoming messages rather then directly processing them you are behind the `flipper_event_queue` GK.
The reason the queue processing is a bit complicated is to make the queue can be processed non-blocking, can be cancelled, and is safe to concurrency issues.
The idea here is that the queue is processed when we switch to a plugin, report it's progress, and abort the process when switching to another plugin without loosing any work.
This diff does not include
[x] updates to the UI (**SO DON"T LAND IN ISOLATION**)
[x] metrics to see the effect
The effect of the changes can be seen when profiling the application, before this change there are very regular CPU spikes (see the small yellow bar on the top):
https://pxl.cl/TQtl
These go away when the events are no longer processed
https://pxl.cl/TQtp
Reviewed By: nikoant
Differential Revision: D19095564
fbshipit-source-id: 0b8c3421acc4a4f240bf2aab5c1743132f69aa6e
Summary:
See explanation in parent diff, make sure the idler is used efficiently, instead of wasting a lot of CPU creating a new callstack every time `idle` is called.
Also fixed that cancelled idlers could result in an _uncaught_ exception
Reviewed By: nikoant
Differential Revision: D19158593
fbshipit-source-id: 0be505a74c374e0ca6ee0e79b1f1e98ac9b80467
Summary:
To test things that depend on `Idler`, we would so far need to depend on timing in the unit tests, which is very error prone. So introduced a `TestIdler` as well to make sure we can create an idler we can control remotely (as demonstrated in the unit test)
Note that idler smells like generator functions all over the place, so maybe I'll take a stab later to see if we can replace idlers with generators, which gives a much clearer control flow imho.
Reviewed By: nikoant
Differential Revision: D19158369
fbshipit-source-id: 605d120860ecb02883442524df6f876e050ff092
Summary: Fix various errors that Flipper was complaining about in Watch plugin
Reviewed By: ankursadhoo
Differential Revision: D19168777
fbshipit-source-id: eefb98818ddb0da78de1daf2d67045cb90cd90aa
Summary:
Skip Android health-checks when the "Android Developer" option is disabled in Flipper settings.
Also made some refactoring to use immer for healthcheck reducer.
Reviewed By: mweststrate
Differential Revision: D19088322
fbshipit-source-id: 801d874b6e7e5af80802b4bf4313d98f1cee13f6
Summary: Added a setting "Match local fbsource chekout", which inverserly corresponds to the `ignore_local_pin` setting in `flipper-launcher.toml`.
Reviewed By: passy
Differential Revision: D19030456
fbshipit-source-id: deaaf4e873a00bbc4e8bd3034353cf580df95a36
Summary: There were a few warnings printed when starting Flipper. This fixes the last of them!
Reviewed By: nikoant
Differential Revision: D19011385
fbshipit-source-id: 15bc46c4a67e8c8fd3c8b5d96dc67e61911a7e53
Summary: It fixes the bug, where currently we show all active persistent plugins for the export functionality irrespective of the fact that the plugin is active for the selected client. With this diff we will only show active persistent plugins for the selected client.
Reviewed By: mweststrate
Differential Revision: D18890247
fbshipit-source-id: e567da0ccf04e051ca0eabb497a6bd72cc8a0d76
Summary:
This Pull request makes it possible to automatically generate regression tests for plugins. The idea here is to record all incoming states for a specific plugin, the start state of the plugin, and the enstate of the plugin.
By replaying the same events in a test, the same plugin should result in the same end state. This will make it easy to test regressions and refactorings on real life scenarios. Execution time is recorded as well.
The API's are exposed as
- `flipperStartPluginRecording()`
- `flipperStopPluginRecording()`
This process generates both a data snapshot and unit test.
Reviewed By: passy
Differential Revision: D18907455
fbshipit-source-id: 923f814f534ccfa6aa2ff2bfa2f80bee41a1c182
Summary: Before looking into performance bottlenecks, I thought it wise to upgrade to TypeScript as that is where all plugins are heading
Reviewed By: jknoxville
Differential Revision: D18829689
fbshipit-source-id: 4c515f240d742f77e89f3cbdff500c69afb3ac06
Summary: I noticed a bug where the export data perf events were not logged. The issue was that, it used the `Logger.getTrackTimeSince` method which used the `performance` from `perf-hooks` and not an ordinary performance object available in the global scope. So just importing performance from perf-hooks solved the issue.
Reviewed By: mweststrate
Differential Revision: D18887666
fbshipit-source-id: 66c24f47b95b25d2f3703c16c70cbe8b35fe0ec3
Summary: This had been there for way too long.
Reviewed By: mweststrate
Differential Revision: D18834089
fbshipit-source-id: 563aa04876910a7544a7f62865b146b933dbf570
Summary:
Ok this diff got a bit bigger than expected, but I think it makes it easier to understand what "plugin keys" are, and makes them less prone to error.
Previously pluginKeys were composed of: clientId#pluginName, where clientId was itself: app#os#device#device_id
But also, there were some plugin keys where the clientId was a device_id.
Now you deconstruct a plugin key, and will get a tagged object with type: 'device' or 'client', and the properties that they each have.
There is now no custom parsing of these afaik, let's keep it that way.
Since it took me a while to figure out what all these IDs are, I've documented it a bit in clientUtils.
Reviewed By: passy
Differential Revision: D18811848
fbshipit-source-id: eed2e2b5eedafb9e27900dbcf79a389fcaffae95
Summary: Add tests for client-id / app name parsing. We've had a lot of bugs here in the past. Get some good test coverage so we have some assurance the shared utils for it won't be broken.
Reviewed By: jknoxville
Differential Revision: D18830269
fbshipit-source-id: 07c9755bbeae28c48580f44453d4010d6d3830b0
Summary: Just in case anything is broken, this will be helpful
Reviewed By: nikoant
Differential Revision: D18811849
fbshipit-source-id: 53947102dea38e526b4f565396f85fedf4ff2a15
Summary:
Fixes a couple of typo's and merges two very similar functions into one.
Now that there's a single way to create a clientID, we can get more strict about what it is and what it isn't.
Reviewed By: passy
Differential Revision: D18809741
fbshipit-source-id: 9a68e45bead38cc2917a6d4cd2cf461c309f3ede
Summary: One step towards getting away from constructing and destructing clientIds manually everywhere by splitting and joining #'s. Which has been VERY error prone in the past.
Reviewed By: passy
Differential Revision: D18809442
fbshipit-source-id: bd4d89d3eb3d59694aa735b19dbd73d122e59ba0
Summary: This diff refactors the way appName is shown. We populate the appName through selectedApp, thus keeping different redux prop is not needed. This diff gets rid off the appName prop from the redux store and makes sure that appName gets updated on client change.
Reviewed By: mweststrate
Differential Revision: D18764685
fbshipit-source-id: 5ff94c83f84b03bbee34518aface46d4544af77f
Summary: Slightly refactored JS api to make it work with new js app launcher
Reviewed By: jknoxville
Differential Revision: D18761757
fbshipit-source-id: edb8e5907765a9354e4c636be97d3cf6df63ee98