* fix SIMULATE_WEB_RESPONSE not imported #449
* Fix to make rangeMode update in right time
* Renew supplementary node on relayout.
* Add support for layoutDelegate (ASCollectionLayout).
* revert space
* Update change log
* fix build error
* refactor
* set default size
* return early when can delegate
* fix SIMULATE_WEB_RESPONSE not imported #449
* Fix to make rangeMode update in right time
* Match interface update closer to UIKit.
* allow the correct exiting sequence for thrashing
* refactor
* Fork dealloc queue in an experiment
* Fix and put back
* Use the right selector
* Go simpler
* Clarify name
* Type inference
* Use CFTypeRefs like a boss
* Improve comments
* License header
* [ASNetworkImageNodeTests] Add defaultImage test and improve image test. #trivial
* [ASImageNode+AnimatedImage] Fix early return when animatedImage is nil in setAnimatedImage. #trivial
* fix SIMULATE_WEB_RESPONSE not imported #449
* Fix to make rangeMode update in right time
* Fix pager node for interface coalescing
* Fix typo
* change log
* [ASTextNode2] Upgrade lock safety by protecting all ivars (including rarely-changed ones).
Although I don't know of any specific crashes caused by this, I think we should
lock all properties by default. There are also some indications of premature
optimization in keeping lock scope small, where it is actually important to
have transactional integrity, and also where the ASDisplayNode base class is
otherwise going to repeatedly re-lock the object anyway.
I think this will remain pretty efficient, especially with os_unfair_lock enabled.
* Use compare-assign macros
Because multiple threads can enter this allocWithZone: method around the same time, it is possible for one of them to setSuperclass first, and then the second thread would get stuck in an infinite loop. When climbing the inheritance heirarchy, ASTextNode2 would be encountered by this second thread, and it would continue until reaching c == Nil. Since there was no case to catch this, an infinite loop would result. Then the main thread can be deadlocked if a method like waitUntilAllUpdatesAreProcessed is called on ASCollectionView.
* fix SIMULATE_WEB_RESPONSE not imported #449
* Fix to make rangeMode update in right time
* This is for cases when CollectionNode is created in cell of another collectionNode, the interfaceState(say didEnterVisible) is not called as expected.
It's because interfaceCoalescing alter the time line and cause RangeController update before actual interface applied.
* [Issue 838] Update ASCeilPixelValue and ASRoundPixelValue
Layouts can come back for 3x devices as a repeating decimal. Floats/doubles have a hard time representing these values and often the last digit or two will be garbage. This garbage can result in unexpected values from `ceil` or `round`. I try to fix this by subtracting `FLT_EPSILON` from the value before calling `ceil` or `round`
https://github.com/TextureGroup/Texture/issues/838
* addressed comments on the pr
* fix SIMULATE_WEB_RESPONSE not imported #449
* Fix to make rangeMode update in right time
* disable interface coalescing and fix tests
* Revert to before coalescing for ease of reading
* refactor, make min change
* refactor
* add comments
* Add change log
* Introduce ASRecursiveUnfairLock and tests
* Document it and put underscores to scare people away
* Increment changelog
* Integrate it with ASDN::Mutex behind experiment
* Rename the experiment
* Love these license headers oh so much
* Move internal header because we have to
* Address Jon's feedback