Commit Graph
589 Commits
Author SHA1 Message Date
Kevin 510000ee85 Correct attributes lookup for supplementary elements. (#1318) 2019-03-08 09:41:25 -08:00
Greg Bolsinga dffe22f12d Fix CTLineRef leaks (#1386)
Found by Clang Static Analyzer:

~/Texture/Source/ASTextNode2.mm:663:39: warning: Potential leak of an object stored into 'truncationTokenLine'
      CTLineRef truncationTokenLine = CTLineCreateWithAttributedString((CFAttributedStringRef)_truncationAttributedText);
                                      ^
~/Texture/Source/ASTextNode2.mm:666:49: warning: Potential leak of an object stored into 'additionalTruncationTokenLine'
      CTLineRef additionalTruncationTokenLine = CTLineCreateWithAttributedString((CFAttributedStringRef)_additionalTruncationMessage);
                                                ^
2 warnings generated.
2019-03-08 09:40:51 -08:00
Michael Schneider bb6102aa18 Add Yoga support to ASButtonNode (#1381)
* Add Yoga support to ASButtonNode

* Drop unowned ASLayoutElementStyle parameter

* Fix access of Yoga properties

* Move ASButtonNode Yoga logic to Category

* Update header
2019-03-08 08:32:57 -08:00
Kevin aeb370ff13 Fix an issue where state change notifications can be sent mulitple times. (#1372)
Before the change: both - (void)setShouldInvertStrongReference:(BOOL)shouldInvertStrongReference and - (void)setNode:(ASDisplayNode *)node will call through [self setupReferencesWithNode:node]; which call the [node addInterfaceStateDelegate:self];
2019-03-08 08:27:49 -08:00
Kevin d7eda2ec34 Assert for context creation failure during displayBlock. (#1373)
Nothing good can possibly happen if we continue without one.
2019-03-08 08:26:52 -08:00
Kevin 3089a3e3b0 Expose initial constrained size before layout in case anyone is interested later during the layout on the same thread. (#1377)
Optionally, clients are expected to clean it up after usage to avoid accessing outdated data.
2019-03-08 08:26:35 -08:00
Kevin 65061b9d3d Catch invalid sizes during yoga layout (#1376) 2019-03-08 08:24:08 -08:00
Garrett Moon 3547f5add3 Whoops, someone forgot an else! (#1385)
Luckily it seems this didn't cause huge memory bloat because there's
a check below that keeps the display flag from being set in low memory
conditions when the node is off the screen.
2019-03-08 08:18:11 -08:00
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 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
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 2baa9438d7.
2019-02-22 11:28:36 -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
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
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 06e18a1059.

* 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
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
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
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
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 52b84bac01 Use cell mode while wrapping supplementary nodes (#1282) 2019-01-10 08:50:23 +01: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
Michael Schneider ab0a00c21c Copy yogaChildren in accessor method. Avoid using accessor method internally (#1283)
* Copy yogaChildren in accessor method. Avoid using accessor method internally.

* Further improvements
2018-12-20 17:45:52 +01:00
dmaclach 4982c84640 Reduce startup time. (#1291)
Get rid of file scope initialization that causes a premain startup hit.
2018-12-20 11:17:00 +01:00
dmaclach 7cddc2b1be Reduce startup time. (#1288)
Make global static a function local static. This stops it from being
initialized premain and affecting startup time.
2018-12-18 16:45:00 -08:00
Wu Zhong 351e402426 Remove UIKit header import in AsyncTransaction file (#1275) 2018-12-17 11:27:57 +01:00
Kevin ee9ecc4025 Access thread safe property to avoid assertion (#1281)
* Access thread safe property to avoid assertion after the ASDisplayNode's view or layer have been created.

* Oops add these headers
2018-12-15 13:18:46 -08:00