4848 Commits

Author SHA1 Message Date
Huy Nguyen
d102ec81ee
Experiment with different strategies for image downloader priority (#1349)
Right now when an image node enters preload state, we kick off an image request with the default priority. Then when it enters display state, we change the priority to "imminent" which is mapped to the default priority as well. This means that requests from preload and display nodes have the same priority and are put to the same pool. The right behavior would be that preload requests should have a lower priority from the beginning.

Another problem is that, due to the execution order of -didEnter(Preload|Display|Visible)State calls, a node may kick off a low priority request when it enters preload state even though it knows that it's also visible. By the time -didEnterVisibleState is called, the low priority request may have already been consumed and the download/data task won't pick up the new higher priority, or some work needs to be done to move it to another queue. A better behavior would be to always use the current interface state to determine the priority. This means that visible nodes will kick off high priority requests as soon as -didEnterPreloadState is called.

The last (and smaller) issue is that a node marks its request as preload/low priority as soon as it exits visible state. I'd argue that this is too agressive. It may be reasonble for nodes in the trailing direction. Even so, we already handle this case by (almost always) have smaller trailing buffers. So this diff makes sure that nodes that exited visible state will have imminent/default priority if they remain in the display range.

All of these new behaviors are wrapped in an experiment and will be tested carefully before being rolled out.

* Add imports

* Fix build failure

* Encapsulate common logics into methods

* Address comments
2019-03-08 08:11:03 -08:00
Adlai Holler
5e8721ebe8
Make ASTextNode2 more forgiving when searching for links (#1374)
* Make ASTextNode2 more forgiving when searching for links by searching a 44x44 square around the touch

* Trailing whitespace

* Safely handle end-of-line
2019-03-07 13:29:13 -08:00
Garrett Moon
fce6f23b97
Launches switching ASNetworkImageNode callbacks to global queue. (#1369)
* Launches switching ASNetworkImageNode callbacks to global queue.

* Good catch configuration tests!
2019-03-07 09:47:56 -08:00
Kevin
4c370a899c [Updated Snapshots] Don't add extraneous truncation token during kCTLineTruncationMiddle (#1375)
* Don't add extraneous truncation token during kCTLineTruncationMiddle

* Expand these comments a little.

* Update snapshot tests with beautiful correct behavior
2019-03-07 07:20:06 -08:00
Garrett Moon
45146ff1cf
Update the FAQ to throw less shade. (#1379)
* Update the FAQ to throw less shade.

Both of these technologies have their place, no point in being assholes.

* Update faq.md
2019-03-06 17:09:49 -08:00
Kevin
7bb3079082 Don't add extraneous truncation token during kCTLineTruncationMiddle. (#1297)
* Don't add extraneous truncation token during kCTLineTruncationMiddle

* Expand these comments a little.
2019-03-06 10:05:30 -08:00
Eric Scheers
a0012d90c2 Add forwarding of UIAccessibilityAction methods (#1344)
* Add forwarding of UIAccessibilityAction methods

* Use OCMock for testing UIAccessibilityAction method forwarding
2019-03-06 10:02:50 -08:00
Michael Schneider
07becd0fc8
Cleanup Yoga Categories (#1364) 2019-03-06 07:37:40 -08:00
Adlai Holler
dd4359db7b
Optimize ASCATransactionQueue (#1350)
* Optimize ASCATransactionQueue. This queue is very busy, and it runs on the main thread so it's important for it to be fast.

Avoid waking up the run loop for every single node.
Avoid a ton of NSPointerArray overhead that we don't need.
Avoid retain/release traffic on the singleton by using an inline function. I confirmed that in release mode, the static __strong is correctly inlined and no ARC traffic is incurred.

* Comment

* Unlock right

* Remove magic number
2019-03-05 18:20:17 -08:00
Xavier Deloge
2a9379248b _ASCollectionViewCell - The point isn't converted before to send to node, impossible to touch button into the node hierarchy (#1362)
* Revert node call, useless, the node has a ASDisplayView, and this view forward on the node in first.

* Use convertPoint to convert the given point in hittest & pointInside methods.
Keep the standard usage if the node didn't rasterized a view.

* Removed isNodeLoaded, finally it's useless in this case
In these methods, we are on the mainThread, we can create the view if the view is not created.
2019-03-05 09:00:38 -08:00
Adlai Holler
17dbd8e1e5
Optimize _assertSubnodeState (#1352)
* Optimize _assertSubnodeState

This method is actually pretty painful in today's world. In one iPad mini trace, the first page of nodes spent 6.6ms in this call, just in time profiler.

* Clean it up, check count

* Check the right value
2019-03-04 21:07:31 -08:00
Jonathan Downing
6dc0edf839 Make ASCollectionElement Public (#1303)
* Update AsyncDisplayKit.h

* Update project.pbxproj
2019-03-04 17:34:56 -08:00
Kevin
babd81bd23 Add setNeedsLayout to yoga tree changes. (#1361) 2019-03-04 17:33:28 -08:00
Kevin
96e6a6c595 Resolve root constrained size before informing delegate to resolve infinite layout loop. (#1359) 2019-03-04 17:21:01 -08:00
Kevin
50e8dbfb9c Do not lock the nodeController if we are not locking to root. (#1360)
Doing so leaves it locked when we elsewhere explicitly unlock the node to ascend.
2019-03-04 17:20:47 -08:00
Garrett Moon
001765a85e If we check for batching before content size is available we'll always fetch (#1355) 2019-03-03 19:33:32 -06:00
Adlai Holler
d14a3b03e9
Optimize ASTwoDimensionalArrayUtils (#1351)
* Optimize ASTwoDimensionalArrayUtils

These methods are called on the main thread during range controller updates (i.e. every frame) and so they should be as fast as possible.

* Rename

* Use vector instead of stack array to handle really big cases (e.g. photos)
2019-03-03 12:49:36 -06:00
dirtmelon
257f5a9a6d Update layout-transition-api.md (#1357) 2019-03-03 08:05:44 -08:00
Kevin
1410b29b63 Lock up to yogaRoot during layout to avoid deadlocks. (#1356)
* Lock up to yogaRoot during layout to avoid dead lock.

1) lock to root for tree
2) lock self to change parent (& consequently root)
3) Implement ASLocking (tryLock) on ASNodeController
4) add lockPair to try-lock node & controller together
5) lock controllers if they exist in lockToRoot...

Disable some asserts due to lock to root. :(

LL# No commands remaining.

* Add macro so non-Yoga still builds :)

* wut
2019-03-03 08:05:01 -08:00
Michael Schneider
ddc4fd2ddb Don't compile out ASExperimentalTextNode if ASTextNode is compiled out (#1353) 2019-03-03 07:56:09 -08:00
Adlai Holler
6428077e01
Revert "Have node and controller share lock (#1227)" (#1347)
This reverts commit 2baa9438d798b9cf5689b46038383d0a9b7d007c.
2019-02-22 11:28:36 -08:00
dirtmelon
333380d465 Fix typos (#1348)
* Update containers-overview.md

* Update subclassing.md

* Update node-overview.md

ASImageNode, ASNetworkImageNode and ASMultiplexImageNode are in place of UIImageView, not UIImage.
2019-02-22 11:28:26 -08:00
Garrett Moon
999cb6e485
Don't return non-animated GIFs for animation (update to latest PINRemoteImage beta) (#940)
* Don't return non-animated GIFs for animation

* Update to latest PINRemoteImage beta
2019-02-21 15:21:19 -08:00
Adlai Holler
efeb3d2749 Add an experimental flag to use native dispatch_apply (#1345)
* Add an experimental flag to use native dispatch_apply instead of our core count * 2 approach. This has shown performance wins in some profiling.

* Add in other places
2019-02-21 12:33:39 -08:00
Michael Schneider
8edb5a45d3
Move ASSectionController and ASSupplementaryNodeSource method to be optional (#1302) 2019-02-20 11:21:47 -08:00
Sudhanshu
d4a1242052 Update layout2-layoutspec-types.md (#1330)
`justifyContent` definition updated.
2019-02-15 12:54:14 -08:00
Leonid Lyadveykin
8908030eeb Add backgroundView for ASCellNode #trivial (#1333) 2019-02-15 12:52:48 -08:00
Michael Schneider
2a1e03fe75 Move ASCellLayoutModeSyncForSmallContent to the end of bitmask (#1341) 2019-02-15 12:52:07 -08:00
Adlai Holler
6e7cdea797
Add extension points for global node behaviors, potentially replacing interface state delegates (#1229)
* Add extension points for global node behaviors via categories and a public ivar

* Update documentation on context ivar
2019-02-14 14:17:03 -08:00
Kevin
affa588654 Correct some dereferences in as_log_verbose invocations (#1317) 2019-02-14 09:22:38 -08:00
Jay Xie
b01ebd6f5f In response to gestures (#1332)
because "Disable user interaction for text node by default." so you need set textNode.userInteractionEnabled = YES to make response
2019-02-14 09:17:38 -08:00
Adlai Holler
a5fec4c3e6
Cut version 2.8 #changelog (#1340) 2019-02-13 22:20:59 -08:00
Max Wang
5f1dc2bc62 Fix a11y update when insert view (#1327)
* fix SIMULATE_WEB_RESPONSE not imported #449

* Fix to make rangeMode update in right time

* remove uncessary assert

* Fix collection cell editing bug for iOS 9 & 10

* Revert "Fix collection cell editing bug for iOS 9 & 10"

This reverts commit 06e18a10596622ff8a68835c95a23986d7bf61ea.

* fix a11y update when insert view
2019-02-12 17:03:36 -08:00
Huy Nguyen
e76272470d
Fix duplicate definition of category "YogaDebugging" (#1331) 2019-02-01 14:57:18 -08:00
Michael Schneider
d4efe95ec5
Improve separation of code for layout method types (#1305)
* Improve separation of code for layout method types

* Address PR comments

- Delegate to layout spec engine if the node is a layout spec node but yoga engine was asked for calculate the layout
- Change ASLayoutType to ASLayoutEngineType
- Improve layout engine fall through code
2019-01-28 07:41:49 -08:00
Huy Nguyen
f1801388be
Add experiments to skip waiting for updates of collection and table views under some circumstances (#1311)
* Add experiment to skip waiting until all updates of collection/table view are committed in -accessibilityElements

The wait was introduced in #1217 which blocks the main thread until updates are proccessed. We suspect this causes perf regressions accross the app and need to confirm this via an experiment.

* Add option to skip default behavior of ASCellLayoutMode

* Fix unit test

* Fix unit test in another way

* Remove import

* Minor change

* Add ASCellLayoutModeSyncForSmallContent

* Update unit tests

* Remove unnecessary change

* Remove unnecessary changes
2019-01-24 10:13:54 -08:00
Michael Schneider
231ba3d6b8
Add Yoga layout to ASDKGram Texture cells (#1315)
- Fix Yoga layout within PhotoCellNode
- Add Yoga layout support to FeedHeaderNode and TailLoadingNode
2019-01-18 08:43:51 -08:00
Adlai Holler
2a4b77b6d5
Remove let and var macros now that we're all-C++ (#1312)
* Remove let and var macros now that we're all-C++

* Another fix

* More!

* And more!
2019-01-17 10:16:53 -08:00
Michael Schneider
7a782f8176 Fix deprecated implementations warning (#1306) 2019-01-16 18:28:37 -08:00
Kevin
9428fd4b9c Add some snapshot tests for ASTextNode2 truncation modes. (#1296)
* Add some snapshot tests for ASTextNode2 truncation modes

* Allow some tolerance in snapshots

* Express tolerance percentage correctly

* Code review comments: Move class methods up, combine declaration&initializaiton lines

* Give png files clearer names

* Oops
2019-01-16 18:26:05 -08:00
dmaclach
d8cc3c9bdd Reduce startup time. (#1294)
Initializing the LUT arrays at file level scope creates a large chunk of code retaining and releasing all of the NSStrings in the tables. Moving them to function level moves the initialization to being lazy.
2019-01-16 18:25:19 -08:00
Kevin
d73c44dffc match AS_USE_VIDEO usage in tests to definitions (#1280) 2019-01-16 18:23:47 -08:00
dmaclach
0a48cd7371 Reduce startup time. (#1293)
Move file level static into a function so that it isn't being initialized pre-main.
2019-01-16 18:23:08 -08:00
wxyong
45f2347367 [Documentation] Performance spell correction (#1298) 2019-01-16 18:21:24 -08:00
dmaclach
e59eff8aa0 Reduce startup time. (#1292)
Move file scope constant that is initialized at startup to function scope to avoid startup hit.
2019-01-15 08:56:43 -08:00
appleguy
2d43f468d0 [ASCollectionView] Supplementary nodes should not enter ASHierarchyStateRangeManaged. (#1310)
As of today, ASRangeController doesn't manage the interfaceState for supplementary nodes. This bug was introduced with a refactoring of this code a couple months ago.

With this change, the supplementary nodes will automatically enter each interfaceState bit when they are added to a view hierarchy.
2019-01-11 08:11:55 +01:00
Michael Schneider
5212d022ab
Fix loading items in ASDKGram IGListKit example (#1300) 2019-01-10 08:56:38 +01:00
Michael Schneider
52b84bac01
Use cell mode while wrapping supplementary nodes (#1282) 2019-01-10 08:50:23 +01:00
Michael Zuccarino
22acb985cb Start a thrash test suite for the collection node (#1246)
* Split up table view thrash tests

* Fix license

* Fix license

* Reenable thrash tests for table view

* Creating the collection view thrash tests

* Batch update animated tests

* Thrash wildly dispatch main

* Reset the thrash count

* One more test

* Lint

* Update Tests/ASThrashUtility.h

Co-Authored-By: mikezucc <mikezuccarino@gmail.com>

* Tiny code style change in ASCollectionViewThrashTests.mm
2019-01-02 16:34:41 -08:00
Huy Nguyen
17e56042d3
Add a way to opt out of always-clear-data behavior in ASCollectionView and ASTableView (#1284) 2018-12-20 13:47:58 -08:00