Commit Graph

619 Commits

Author SHA1 Message Date
Lorenzo Blasa
43f44652f4 Change snapshots format to png
Summary:
There was an issue whereas snapshots were not properly rendered on retina devices.

After running a few tests, the issue seems to be solved by changing the snapshot format from jpeg to png.

Reviewed By: antonk52

Differential Revision: D41520939

fbshipit-source-id: 1563fe89162e41f71418357a7e58caaf46581f04
2022-11-24 07:14:55 -08:00
Lorenzo Blasa
ef64abb495 Improve color inspector
Summary:
Before this change, color inspector used a color picker that showed: color, rgba, hex.

The problem is that engineers have to click on it to see these values.

This change leaves the picker as is, but presents both hex and rgba inlined within the inspector thus avoiding extra interactions.

Reviewed By: antonk52

Differential Revision: D41495740

fbshipit-source-id: c8af01e3060d2e6725295418293b1e30679c1b1f
2022-11-23 08:31:13 -08:00
Luke De Feo
7ec09b4f95 Shift fetching litho attributes to background thread
Summary: Due to litho component instances being immutable we are able to process them later if we hold on to the instance. We have added a Maybe deferred type which sort of resembles a Monad. It wraps a value which may or may not be calculated later.

Reviewed By: lblasa

Differential Revision: D41474251

fbshipit-source-id: 2ba6e688518dba55cf4aa5ba53f390a92cf0921f
2022-11-23 03:45:26 -08:00
Lorenzo Blasa
5b3e110821 Remove Enumeration type
Summary:
Enumeration used to be a type containing a single property value of type string.

The InspectableEnum is a type that had an Enumeration value and possible values.

As we removed possible values from the enum value, this structure no longer serves its purpose.

Reviewed By: antonk52

Differential Revision: D41400874

fbshipit-source-id: e5c2d1e15ee9b3074ddd69f75ee9b8150d44379f
2022-11-21 05:30:18 -08:00
Lorenzo Blasa
6268c7b455 Litho margins
Summary:
Litho margins/padding/borders have the following attributes:

- left, top, right, bottom
- horizontal, vertical
- all
- start, end

This change processes these attributes and creates a SpaceBox inspectable which enables the margin visualiser in Flipper Desktop.

Reviewed By: LukeDefeo

Differential Revision: D41375299

fbshipit-source-id: be8bac1819f2b17c2fd1b1b86678aa0559278609
2022-11-18 02:34:33 -08:00
Lorenzo Blasa
0ac8c2a6b3 Migrate enum possible values to metadata
Summary:
Before this change, possible values for an enumeration were embedded within the attribute value itself.

After this change, possible values are located within the attribute metadata.

Reviewed By: LukeDefeo

Differential Revision: D41337003

fbshipit-source-id: cef5654a679e9b961e82993abb201b518fcbcd00
2022-11-17 04:42:22 -08:00
Luke De Feo
0ebedc9c49 Add Id to node descriptor interface
Summary:
There were 2 situations where the UI hadn't changed but we were sending a nodes with a different Id accross traversals which confuses things on the desktop

1. By removing the litho observer we are repeatidly scanning the entire hierachy on scroll or when a video plays. The debug component that represents litho views are not stable, they are generated each time even if the underlying component is the same
2. Offset child is generated by us each time and the old id refered to the generated offset child not the underlying object

This diff addresses these 2 cases by allowing a descriptor to choose the ID.

The nodeId convience method was used in a lot of places. For the places where the id ended up in the protocol we have migrated to the descriptors getID. In some other places it is only used internally or for logging.  In this case I have renamed the method and changed the return type from Id to int so it cant be accidently used in the protocol

Reviewed By: lblasa

Differential Revision: D41307239

fbshipit-source-id: 655b230180a6d02d66888e86b2293eead3385455
2022-11-16 10:38:23 -08:00
Luke De Feo
f6060d0046 Fragment return 0 bounds
Summary: In a previous diff the Bounds was made mandatory and the fragment bounds was set to be the same as the underlying view. this caused the offset to be doubled since the underlying view would also apply that offset. Since fragments dont contribute to layout and are purely for lifecycle we can set it to 0 and handle it on the desktop

Reviewed By: lblasa

Differential Revision: D41304500

fbshipit-source-id: 39591b3ef0c746bd7a4ec8d61fed623cc7c94944
2022-11-16 10:38:23 -08:00
Luke De Feo
53c15b2e59 Remove litho observer
Summary:
There seem to be a number of issues with registering to all changes properly for litho observer.

Removing it and allowing the decor view to do a full traversal fixes a number of problems. The performance with hardware rendering seems to be fine. This should be  stopgap untill we tackle time travel properly

Reviewed By: lblasa

Differential Revision: D41304501

fbshipit-source-id: 5b7cdbd0dac04ba0dbf8dd5e449c99f0db4d0863
2022-11-16 10:38:23 -08:00
Luke De Feo
f70b2a2d1e Fragment bounds
Reviewed By: lblasa

Differential Revision: D41220272

fbshipit-source-id: e3ff054c7aa8c290e3c04e70a71cb7d752393cfe
2022-11-14 07:05:58 -08:00
Luke De Feo
1398e2aa8a Make node bounds mandatory in protocol
Summary: This makes life on the desktop easier as 99% of the time bounds were there but we were dealing with non sensical non null branches.

Reviewed By: lblasa

Differential Revision: D41218325

fbshipit-source-id: e490d3775720c1c55dcb8f4a2a85520294f5e2a9
2022-11-14 07:05:58 -08:00
Luke De Feo
a4d3167fae Application, window and activity all inherit window bounds
Reviewed By: lblasa

Differential Revision: D41218326

fbshipit-source-id: aa0fad5c80e482629a70240da81c347217d12ea7
2022-11-14 07:05:58 -08:00
Lorenzo Blasa
7ae0eac13a Litho Props
Summary:
This diff adds support for layout and component props from Litho.

Notes:
- Each component could register a descriptor for itself.

Reviewed By: LukeDefeo

Differential Revision: D40680095

fbshipit-source-id: 57c78a199db58e05dd6dac4ed32ff6a869a73b0a
2022-11-11 04:49:02 -08:00
Lorenzo Blasa
f33e3fc78b Add qualified name to Node
Summary:
Our descriptors currently have a method to return the name as it will be displayed on the elements hierarchy.

However, it doesn't provide enough context if the name is to be used to discover the type in our code base.

This change adds a qualified name method that can provide a more complete name which can indeed be used by the Open In IDE functionality, for example.

Reviewed By: passy

Differential Revision: D40936785

fbshipit-source-id: 790ae02b9ebf37501765c52a24307fcaaaf9c14d
2022-11-11 03:22:39 -08:00
Lorenzo Blasa
01dc22b1ab Attributes Metadata
Summary:
Before this change, attributes and attribute metadata were intermingled and sent as one unit via subtree update event.

This represented a few issues:
- Repetitiveness. For each declared and dynamic attribute, metadata was included on each value unit.
- Metadata can vary in size and thus can have a negative impact on payload size.
- The attribute name which is part of metadata is a string which always overhead on processing.
- Metadata instantiation is not cheap thus this also incurs in processing overhead i.e. even instantiating a single string can have an impact.

The proposal is to separate metadata of attributes from the actual node reported attributes. This solves the problems mentioned above.

Reviewed By: LukeDefeo

Differential Revision: D40674156

fbshipit-source-id: 0788551849fbce53065f819ba503e7e4afc03cc0
2022-11-10 11:52:28 -08:00
Akinola Orederu
42ecf919d6 removing null values for bindArgs so database plugin doesn't throw exception for beta builds
Summary:
Removing use of ```database.query``` with null values because its stopping the database plugin from working for whatsapp android.

The [release version of FrameworkSQLiteDatabase](https://androidx.tech/artifacts/sqlite/sqlite-framework/2.2.0-source/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.java.html) is written in java which accepts a null value (although its still annotated NonNull for Object[] bindArgs)

But the [beta version of FrameworkSQLiteDatabase](https://androidx.tech/artifacts/sqlite/sqlite-framework/2.3.0-beta01-source/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.kt.html) is written in kotlin which throws an exception for null values.

Reviewed By: passy, mweststrate

Differential Revision: D40870552

fbshipit-source-id: 72c99c1b62d052887d298145a3019d6123ea94f3
2022-11-01 09:41:25 -07:00
Lorenzo Blasa
3598fb2cde Use correct bounds for litho debug components
Summary:
This change is a follow-up on Litho release:
https://central.sonatype.dev/artifact/com.facebook.litho/litho-widget-kotlin/0.44.0

This change ensures DebugComponent returns the correct Bounds.

Reviewed By: aigoncharov

Differential Revision: D40678191

fbshipit-source-id: 1d587efa114a9cd5c0b8162d219e93e3cbad282e
2022-10-28 04:58:52 -07:00
Luke De Feo
b1bee28f08 Coordinate update event when litho scrolls or is shifted
Summary: See doc comment for explanation

Reviewed By: lblasa

Differential Revision: D40587610

fbshipit-source-id: f0909440c4e6e3cc9f5c7b557198a93ba8809bd9
2022-10-25 07:10:38 -07:00
Luke De Feo
a447712865 Change Litho observer from on scroll changed listener to on draw listener
Summary:
There are some situatuins where a litho view can move  without a mount occuring in that view. One situation is a litho view in a recycler view. If a neighbouring view is deleted or changes its width/height this will shift the whole recycler view. Since each view in the recycler view is typically a separate comonent tree. The children of the recycler view are not aware of their siblings changes through mount. And these situations do not count as a scroll which was the previous method of detecting change.

This is a work around to listen to on draw which seems to be fired in all situations.

Reviewed By: lblasa

Differential Revision: D40430777

fbshipit-source-id: a9c8196f31a6bdfd4a2fed398cfcaed190972959
2022-10-25 07:10:38 -07:00
Luke De Feo
1aacc51d12 Use mount extension for litho integration
Summary:
Initial implementation of Litho extensions using mount extension. After mount is called on the main thread and we traverse the hierachy. In future we can use mount extensions to construct a sparse tree rather  than sending everything every time.

Scroll is handled with a native UI scroll listener for each litho view. This may break if the litho view is not a direct child of the scroll view.

Reviewed By: mihaelao

Differential Revision: D40021840

fbshipit-source-id: b09086a7a16660225885620609009dddf5b90d3b
2022-10-25 07:10:38 -07:00
Luke De Feo
7c3e28272b Override bounds for view pager
Summary: For view pager we just want to draw the content in the center

Reviewed By: lblasa

Differential Revision: D40478266

fbshipit-source-id: 4fac7e897a0569fed59ef5810ba15300ebe87b5d
2022-10-25 07:10:38 -07:00
Luke De Feo
62167bb69c Fix bounds for children of nested scroll view
Summary:
Android does not set the top/left of the child of view pager. I attempted to solve this by grabbing the offset from the scrollview and passing it down via offset child. The issue is offsetchild has a lot of problems with the partial layout traversal. If the child of the scroll view is an observer root then the layout traversal with short circuit and setup a new observer for the child but we lose the offset child in the process.

This solution is a little dirty but it is functional for now

Reviewed By: lblasa

Differential Revision: D40430778

fbshipit-source-id: 7ad53b2a4818b55515e7662272548e2ce17e6b44
2022-10-25 07:10:38 -07:00
Luke De Feo
a0d1013b94 Dont emit mounted drawables for litho
Summary: Getting the boxes to line up is quite hard to do right and has undetermined value

Reviewed By: mihaelao

Differential Revision: D40430776

fbshipit-source-id: 6093c4874f39ecf0c673407da2bd03ef06ca017e
2022-10-25 07:10:38 -07:00
Lorenzo Blasa
38109eccff Active children and fragments bug
Summary:
Getting the active child was only ever returning the actual active View.

This is correct. However, if the View is backed by a Fragment, then the child is reported as Fragment instead of the actual View.

This was an issue as effectively, the reported children (fragments) were never going to match the active child (view).

Additionally in this change, report back the name of the node even if not active.

Reviewed By: LukeDefeo

Differential Revision: D40632526

fbshipit-source-id: 3560b193b370f19ceabe66980fe23f55ec887274
2022-10-25 03:09:00 -07:00
Lorenzo Blasa
bb3b1cecef Simple antd types for each inspectable type
Summary:
Replace draft inspectors with read-only components.

This is a first step into having a richer UI. At the moment, these are read-only components but will likely be extended in the future as to allow editing of values.

Reviewed By: LukeDefeo

Differential Revision: D40345016

fbshipit-source-id: a6aef5861474b4aa8353c00ef257ab17b4cff00e
2022-10-25 03:09:00 -07:00
Jordan Smith (IGDS)
d28aab50d7 Calculate talkback role based on supported paging actions
Summary:
Google Talkback identifies nodes with supported actions up, down, left and right to be of the role Pager.

Reference here: https://github.com/google/talkback/blob/master/utils/src/main/java/com/google/android/accessibility/utils/Role.java#L376-L385

This diff give us the ability to correctly calculate those roles when we come across them in flipper

Reviewed By: blavalla

Differential Revision: D40449485

fbshipit-source-id: 5a9dfe3f807b7fce8043eaab2695d864f93a1392
2022-10-18 15:52:10 -07:00
Lorenzo Blasa
0572808f1a Add additional inspectables
Summary:
This change adds support for more inspectables and also introduces more complex types to be used as a value.

This become specially useful for more complex yet primitive types like coordinate, size, bounds, etc.

Reviewed By: LukeDefeo

Differential Revision: D40307885

fbshipit-source-id: 125e832f06d6b31f56eb5405182d1c0d61388930
2022-10-18 04:30:51 -07:00
Luke De Feo
9cbf35dea8 Consider local visible rect and translation when calcauating view bounds
Summary: In general we want a child to know its position without having be overriden by it parent via offset child. Therefore we need to consider translation and the result of getLocalVisibleRect. Despite its name it seems to be an offset from its normal bounds after scrolling in certain types of scroll views.

Reviewed By: lblasa

Differential Revision: D40021836

fbshipit-source-id: 4ae9a4b202d7ba201cdb8b6bc8f13e94baf2b37e
2022-10-10 04:13:06 -07:00
Luke De Feo
9f6ba6cf8c Fix issue where tree observer always subscribing
Summary: This was causing all observers to continuously traverse all children since most observers traverse on subscribe

Reviewed By: lblasa

Differential Revision: D40021835

fbshipit-source-id: 6a6fba02523848be37f5e939c7a240ff2958daca
2022-10-10 04:13:06 -07:00
Luke De Feo
b911c49667 Additional Litho descriptors
Summary: Moved to separate directory. These additional descriptors are useful for debugging the implementation but might not be useful for the end users so could potentially be removed down the road

Reviewed By: lblasa

Differential Revision: D40021834

fbshipit-source-id: f88c1186dd65cdabc816d5cd8256bb81c404a80c
2022-10-10 04:13:06 -07:00
Luke De Feo
221f7ac1e5 Generalised mounted object and descriptor into offset child
Summary: There are other situations where we want to overide the offset than for litho mounted views

Reviewed By: lblasa

Differential Revision: D40021833

fbshipit-source-id: 1411a4a67e88f6893bb38e36fb6a81eead3edd1a
2022-10-10 04:13:06 -07:00
Luke De Feo
c9983edb1a Fix superclass chaining when adding descriptor late
Summary: External frameworks such as litho add their descriptors with register descriptor, we need to make sure that we set up the superclass chaing for these

Reviewed By: lblasa

Differential Revision: D40021843

fbshipit-source-id: 41666e5e3a31f249f7dfd550c15d747d394d2a8f
2022-10-10 04:13:06 -07:00
Luke De Feo
de1eece900 Removed chaining of children from chained descriptor
Summary: This chaining needed to be removed to allow for litho view to override the children to be the root debug component

Reviewed By: lblasa

Differential Revision: D40021839

fbshipit-source-id: 1caf30ced14cf582f9e03e87e15f9a8eda5b9c4f
2022-10-10 04:13:06 -07:00
Luke De Feo
8140244f0a Fix null reference error in text view descriptor
Summary: Thanks java / google

Reviewed By: lblasa

Differential Revision: D40021844

fbshipit-source-id: 19d7d04bf8c637964ef6bea5b28224d7b5134c3f
2022-10-10 04:13:06 -07:00
Luke De Feo
23ab1e9127 Added value animator button
Summary: This is usefull to make sure the ui debugger sees changes from value animators

Reviewed By: lblasa

Differential Revision: D40021838

fbshipit-source-id: 1fe18b79a89b43f286aa4e90aa6e850db3e887a5
2022-10-10 04:13:06 -07:00
Luke De Feo
1fd1029a3d Background plugin
Summary: When running in the background in a large app like fb4a it can take a while to reprocess all the events, we can revisit this in the future

Reviewed By: lblasa

Differential Revision: D40021842

fbshipit-source-id: 8e5300e0f8534525bd184c029e523f05f4076695
2022-10-10 04:13:06 -07:00
Lorenzo Blasa
76d6350662 Set jvm flags and kotlin dependencies (#4177)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/4177

^

In an attempt to fix Github actions, may or may not work.

Reviewed By: aigoncharov

Differential Revision: D40074397

fbshipit-source-id: e88039c56876ca21657db4a6d872c46294a4f8c3
2022-10-05 04:30:17 -07:00
Lorenzo Blasa
16983deaaf Upgrade gradle plugin (#4166)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/4166

^

Changelog: Upgrade to gradle plugin 7.3.0

Reviewed By: LukeDefeo

Differential Revision: D40019423

fbshipit-source-id: ab05fd73e942c96601e2291049b1c858408e1192
2022-10-03 07:35:43 -07:00
Luke De Feo
277d730f77 Improve Textview descriptor
Summary: Also removed button descriptor as android doesnt expose anything usefull

Reviewed By: lblasa

Differential Revision: D39732772

fbshipit-source-id: 38d5d2290abf7103650e4260ae1169d8d53b1d9b
2022-09-29 05:31:18 -07:00
Luke De Feo
740f4b3fdc Add basic drawable descriptor
Reviewed By: lblasa

Differential Revision: D39731553

fbshipit-source-id: 77a8ff244b63e2f14c671bbff6c18dbe3ec25257
2022-09-29 05:31:18 -07:00
Luke De Feo
7ae2c35476 Remove redundant native scan event
Summary: It didnt need to exist and can be seen as a subtree update of type full scan

Reviewed By: lblasa

Differential Revision: D39731552

fbshipit-source-id: e351413d9480e118fc000c5e55eae0e7980233f2
2022-09-29 05:31:18 -07:00
Luke De Feo
78e84a0cc3 added metrics for snapshot
Reviewed By: lblasa

Differential Revision: D39886448

fbshipit-source-id: b229f6947d199026c6e4bdc89def6ac0a0fa9d0a
2022-09-29 05:31:18 -07:00
Lorenzo Blasa
8bb711ddfb Use chained descriptor for snapshots
Summary:
This change removes the getSnapshot implementation from ViewGroupDescriptor.

Instead we rely on the chain implementation to get one.

Once we do get a snapshot, return.

Reviewed By: LukeDefeo

Differential Revision: D39849484

fbshipit-source-id: bfa0b1af22cf501777687295b8d792f8144a8d3b
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
ff3fb338ab Use coroutine instead of Handler
Summary: ^

Reviewed By: LukeDefeo

Differential Revision: D39848640

fbshipit-source-id: 31e9ecc6e52105c61c8765d5d8b4c2c493026416
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
fadaf26f1e Single bitmap pool with view size changes support
Summary:
This change aims to reduce the number of bitmap pools by definiting a default pool which can contain bitmaps of different sizes.

A side benefit is that this single pool facilitates handling the case where a view gets resized too.

So overall, this should be both more generic and efficient compared to the previous approach.

Reviewed By: LukeDefeo

Differential Revision: D39815821

fbshipit-source-id: e0aa17ba55db07b74d8f22ea16e0c864288fb169
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
433061d377 Take snapshot on subtree update
Summary:
DecorView owns a BitmapPool to take snapshots of the view. These snapshots are later on serialised by the manager.

There's a couple of unrelated changes in this diff but that were already in place making it hard to split.

(1) Renamed 'traverseAndSend' to 'processUpdate'. Why?

The observers as a whole shouldn't necessary know that their 'observation' is being sent to any place. Future changes should move the send logic altogether from the observer too. But that can be made within the scope of a different diff.

(2) There was a bug for nodes that were being observed but then unsubscribed from. If the nodes were being marked for observation and observer was already into place, these were not being told to subscribe again for changes.

Reviewed By: LukeDefeo

Differential Revision: D39812943

fbshipit-source-id: af98c5caf54e1c69f97043bae95049395a2e4545
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
7017d74821 Cleanup plugin class implementation
Summary:
Remove unnecessary/unused code.

Changed 'uidebugger' -> 'ui-debugger' to match plugin identifier.

Reviewed By: LukeDefeo

Differential Revision: D39812777

fbshipit-source-id: a6010b69cc1d5812ecbe644344efa27bf8ab7cd0
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
08b3489201 Improve getSnapshot
Summary: Addresses a few issues with the existing implementation.

Reviewed By: LukeDefeo

Differential Revision: D39812624

fbshipit-source-id: 6f955f62bc5a7943558541e4cf7b4ccba4fd9be3
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
e7742169f5 Move traversal outside of observers package
Summary: Move partial traversal to the traversal package

Reviewed By: LukeDefeo

Differential Revision: D39812542

fbshipit-source-id: 1efa6f83ce53c49f3d06574cf52b8d065cb0fe22
2022-09-27 13:00:04 -07:00
Lorenzo Blasa
cd7cc37fd3 Bitmap pool
Summary:
Bitmaps are not cheap to create. Also, bitmaps are used from the main thread to capture the contents of a view but can be used and processed by background threads.

BitmapPool aims to solve both problems.

- It is a pool that can be used to recycle bitmaps.
- The recyclable bitmap can be processed by a background thread which can explicitly recycle the bitmap once done with it, hence putting it back into the pool.

UPDATE: D39815821

That diff changes the approach by defining a single default pool which can handle bitmaps of different sizes.

Reviewed By: LukeDefeo

Differential Revision: D39812212

fbshipit-source-id: 065eea656f4139aeb9d09cd5a5c7dddfc9c8edfd
2022-09-27 13:00:04 -07:00