[ASRunLoopQueue - Performance] Add ASDeallocQueue for efficient object teardown. (#2399)

* [ASRunLoopQueue - Performance] Add ASDeallocQueue for efficient object teardown.

This measurably reduces block overhead and context switching.  In the layout benchmark,
it increases ops/s while actually reducing CPU utilization.  This suggests that we are
now at a lock-bounded local maximum, at least for tri-core devices.

* [ASDeallocQueue] Update convenience helper method and adopt in ASImageNode etc.

* [ASDeallocQueue] Reimplement the queue using a timer-based runloop.

* [Debugging] Re-enable ASDisplayNode Event Log.

* [ASDeallocQueue] Final refinements, comments, code minimization.

* [ASDeallocQueue] Fix for lock release needed in early return (refactoring typo from last commit)
This commit is contained in:
appleguy
2016-10-17 12:24:11 -07:00
committed by GitHub
parent 11293d545a
commit 0a5c1f43a8
8 changed files with 155 additions and 44 deletions

View File

@@ -17,6 +17,7 @@
#import "ASTextKitTailTruncater.h"
#import "ASTextKitFontSizeAdjuster.h"
#import "ASInternalHelpers.h"
#import "ASRunLoopQueue.h"
//#define LOG(...) NSLog(__VA_ARGS__)
#define LOG(...)
@@ -127,17 +128,13 @@ static NSCharacterSet *_defaultAvoidTruncationCharacterSet()
// truncater do it's job again for the new constrained size. This is necessary as after a truncation did happen
// the context would use the truncated string and not the original string to truncate based on the new
// constrained size
__block ASTextKitContext *ctx = _context;
__block ASTextKitTailTruncater *tru = _truncater;
__block ASTextKitFontSizeAdjuster *adj = _fontSizeAdjuster;
ASPerformBackgroundDeallocation(_context);
ASPerformBackgroundDeallocation(_truncater);
ASPerformBackgroundDeallocation(_fontSizeAdjuster);
_context = nil;
_truncater = nil;
_fontSizeAdjuster = nil;
ASPerformBlockOnDeallocationQueue(^{
ctx = nil;
tru = nil;
adj = nil;
});
}
}