- Rename `ASDisplayNodeAssertLockUnownedByCurrentThread` to `ASAssertUnlocked`, and `ASDisplayNodeAssertLockOwnedByCurrentThread` to `ASAssertLocked` -> shorter and hopefully easier to distinguish between the two.
- Add assertions to `_locked_` and `_u_` (i.e "unlocked") methods.
- Turn `CHECK_LOCKING_SAFETY` flag on by default. After #1022 and #1023, we're in a good shape to actually enforce locked/unlocked requirements of internal methods. Our test suite passed, and we'll test more at Pinterest after the sync this week.
- Fix ASVideoNode to avoid calling `play` while holding the lock. That method inserts a subnode and must be called lock free.
- Simplify `_loaded(node)` to only nil-check `_layer` because regardless of whether the node is view or layer backed, the layer should always be set if loaded. Use it throughout.
- Other minor changes.
* Add move detection and support to ASLayoutTransition
...and NSArray+Diffing.
Add some tests.
* Update CHANGELOG.md
* Update CHANGELOG.md
* Update ASLayout+IGListKit.h
* Update ASLayout+IGListKit.mm
* Use std collections to avoid NSNumber boxing
* Update ASLayoutTransition.mm
* Code review updates.
* Use `unordered_multimap` on stack instead of unordered_map<id,queue> on heap
* Remove notFound BOOL (use NSNotFound sentinel value) and put some vars inside the if (insertions/moves) loop
* Don't copy defaultCompare block (redundant under ARC)
* Whitespace
* Remove unneeded mutableCopy-s in ArrayDiffingTests
* Code review updates.
* Type _subnodeMoves pair.first to ASDisplayNode * instead of id
* C++ enumeration
* unowned refs for adding previousLayout nodes to _subnodeMoves
* Remove unreleated ASDynamicCast that is probably right though
* Add commentary to NSArray+Diffing.h; make multimap elements unowned
* Use std::make_pair, optimize ASLayout+IGListKit
* Oops I thought I had added these headers but nope
* Simplify simplify
* Diff subnodes instead of sublayouts
* Another randomized test with actual ASLayouts
* 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
* [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
* 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
* [ASDisplayNode] Add safeAreaInsets, layoutMargins and related properties to ASDisplayNode
* Add layoutMargins bridged to the underlying view
* Add safeAreaInsets bridged to the underlying view
* Add fallback calculation of safeAreaInsets for old iOS versions
* Add automaticallyRelayoutOnSafeAreaChanges and automaticallyRelayoutOnLayoutMarginsChanges properties
* Add additionalSafeAreaInsets property to ASViewController for compatibility with old iOS versions
* Provide safeAreaInsets for layer-backed nodes.
This also fixes tests.
* Fix crash when insetsLayoutMarginsFromSafeArea is set from a background thread
* Changes requested at code review:
* Update documentation for layoutMargins and safeAreaInsets properties. Suggest that users set the automaticallyRelayout* flags to ensure that their layout is synchronized to the margin's values.
* Fix accessing ASDisplayNode internal structures without a lock.
* Add shortcut in -[ASDisplayNode _fallbackUpdateSafeAreaOnChildren] to skip a child when possible.
* Add shortcut in ASViewController to avoid fallback safe area insets recalculation in iOS 11. Fix fallback safe area insets recalculation when the additionalSafeAreaInsets are set.
* Add debug check that a view controller's node is never reused without its view controller, so the viewControllerRoot flag value is always consistent.
* Use getters instead of reading ivars directly in -layoutMarginsDidChange and -safeAreaInsetsDidChange.
* Minor change in CHANGELOG
* Minor change in ASDisplayNodeTests.mm
* Update the dangerfile
* Make a trivial change to test new dangerfile
* Try out the new value with another trivial change
* Add a configuration API to make a unified place for pulling config from clients safely
* Specify properties for delegate
* Finish removing text experiment global enable
* Generate the config file
* Clean up configuration to fix tests
* Work on making it serializable
* Finish it up
* Fix example code
* Update sample project
* Clean up a few things
* Align with new project order
* Make it faster and update license header
* Add an option to specify your config at compile time
* Update another license header
* Add a version field, and bring interface state coalescing into configuration
* Update CA queue code
* Update CATransactionQueue tests
* Turn transaction queue on by default (for now, see comment)
* Update the tests
* Update the tests AGAIN
* Remove unused ordered set
* Make display node, layout spec, and style conform to NSLocking so that users/subclasses can access their locks
* Update the changelog
* Align slashes
* Put it back, when we're in ASDisplayNode
* Go a little further
* Put back the changes I didn't mean to commit
* Kick the CI
* Fix yoga build
* Put back non-locking change
* Address comments from Scott
* Fix ASPrimitiveTraitCollection initialization on iOS 9.
Add nil-value checks for preferredContentSizeCategory.
* * Mark -[ASTraitCollection init] as deprecated.
* Mark [ASViewController overrideDisplayTraitsWithWindowSize] as deprecated.
Code review changes:
* Remove unneeded nonnull annotations
* Add null check in ASTraitCollection constructor implementation
* Codestyle
* Add some documentation about ASPrimitiveTraitCollection vs ASTraitCollection usage
* Rename safeContentSizeCategory to AS_safeContentSizeCategory.
Remove safePrimitiveContentSizeCategory in favour of AS_safeContentSizeCategory.
* [Contexts] Use mmap directly for possible perf gain and to tag the memory as CGImage
* Wrap the mmap in an object
* Go straight to dataprovider
* Tweak it
* Remove wrong comment
* Finish that comment
* Address warnings
* - [ASWrapperCellNode] Introduce a new class allowing more control of UIKit passthrough cells.
A few minor fixes to Collections behavior as well, including a new isSynchronized
API. The difference from processingUpdates is that after Synchronized, all animations
have also completed (or runloop turn if animations disabled, so .collectionViewLayout
can be relied on being fully in sync).
More upstreaming to come after this can land...
* Fix -[ASDataController clearData] to take no action before initial data loading.
* Empty commit to kick CI
* Spacing change to kick CI (since an empty commit doesn't work...)
* Tweak ASDataController changes to handle an edge case in _editingTransactionQueueCount management.
* Avoid excess cyclic calls to onDidFinishProcessingUpdates: by avoiding ASMainSerialQueue.
* Reverting my initial change as it wasn't the right approach, following the real fix before this.
* [tvOS] Fixes errors when building against tvOS SDK
* Update CHANGELOG.md
* [tvOS] Fixes implicit conversion between UIViewAnimationCurve +
UIViewAnimationOptions
* Enable tvOS deployment target in Texture.podspec (for CI)
* [ASMultiplexImageNode] Fixes typo
* [tvOS] Fixes warnings related to @available guards in Xcode 9
[ASMultiplexImageNode] Enables support for Photos framework on tvOS 10+
[ASMultiplexImageNode] Fixes comment depth
[ASAvailability] Adjust logic in AS_AVAILABLE_IOS_TVOS to account for
both versions
Adjusts API_AVAILABLE to minimum deployment target
* [ASAvailability] Update AS_AVAILABLE_XXX fallbacks to function more like
the built-in solution (more accurately target OS by checking target)
Change AS_AVAILABLE_IOS -> AS_AVAILABLE_IOS_TVOS in places that shoud
allow for both
[ASAvailability] Simplify AS_AVAILABLE_IOS_TVOS
* [ASControlNode] Adds missing 'super' call in -[ASControlNode didLoad]
when targeting tvOS
* Fix API_AVAILABLE iOS requirement
* [ASDisplayNode] Fixes last of the linker warnings related to category
overrides. Removes methods already implemented in
ASDisplayNode+UIViewBridge category.
[ASControlNode] Moves tvOS category declaration to ASControlNode header
[ASImageNode] Moves tvOS category declaration to ASImageNode header
[ASControlNode+Private] Adds private category for ASControlNode to
access private selectors
* [NSParagraphStyle+ASText] Fixes typo related to testing
* [ASControlNode] Re-add helpful comment
* [ASTextKitCoreTextAdditions] Adds mappings for kCTParagraphStyleSpecifierMinimumLineSpacing, kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineSpacingAdjustment when mapping CTParagraphStyle onto NSParagraphStyle
[ASTextNode] Uses CoreText-cleansed attributed string when assigning ascender/descender to avoid crash when a CTParagraphStyle is passed as an attribute
* [AsyncDisplayKit] Update project file to include new/deleted files
* [ASControlNode+tvOS] Add missing Foundation import (whoops!)
[ASImageNode+tvOS] Add missing Foundation import (whoops!)
* Update podspec to only link AssetsLibrary framework on iOS
* [ASTextKitCoreTextAdditions] If kCTParagraphStyleAttributeName key-value
evaluates to an NSParagraphStyle, pass through to cleansed attributes. This
fixes a bug that would occur if a CTParagraphStyle was passed as an
attribute _alone_ (would not be caught by unsupported attributes
check)
* [ASMultiplexImageNode] Bump availability check to support < Xcode 9
* [ASTraitCollection] Fixes typo that was causing build to fail
* Clean up formatting to adhere to character/line limit + braces
* Add support for piping arbitrary user info from ASImageDownloader to the ASNetworkImageNodeDelegate
* s/source/sourceType
* Fix stuff and take Michael's advice
* Faster collection operations
* Fix a few things
* Put the stupid semicolon
* Address warning
* Cut down retain/releases during collection operations
* Update CHANGELOG.md
* [ASTraitCollection] Add missing properties to ASTraitCollection
* ASTraitCollection now completely reflects UITraitCollection
* Add ASContentSizeCategory enum that corresponds to
UIContentSizeCategory and can be used inside a struct.
* * Remove enum ASContentSizeCategory.
* Use __unsafe_unretained UIContentSizeCategory instead of the enum.
* Added ASPrimitiveTraitCollection lifetime test
* Changes requested at code review:
* Restore one of the ASTraitCollection constructors with a deprecation notice.
* Clean up API by the separation of tvOS-specific interfaces.
* Use [NSString -isEqualToString:] for ASPrimitiveContentSizeCategory equality tests for better readability.
* Encapsulate fallback logic for UIContentSizeCategoryUnspecified.
* Fix failing test
* Add "ASGraphicsContext" to skip copying our rendered images
* Zero the buffer before making a context
* Update license header
* Update dangerfile
* Make it a runtime flag
* Restore GState for good measure
* Free buffer if end without image
* Enable the experiment, and cut out the middle-man
* Fix typo
* Add support for interactive moves
* Enable drag & drop in collection view example
* Update changelog
* Change the gating logic to match UIKit
* Add a warning when we prevent interactive movement due to async layout