From ea765437ef52e86f3f35ee421cde843d20c6fc31 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 3 Aug 2018 10:25:22 -0400 Subject: [PATCH 1/3] Improve date formatting perf. --- Signal/src/util/DateUtil.m | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Signal/src/util/DateUtil.m b/Signal/src/util/DateUtil.m index ad9c954bf..9f74a0195 100644 --- a/Signal/src/util/DateUtil.m +++ b/Signal/src/util/DateUtil.m @@ -259,14 +259,20 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE"; + (NSString *)formatDateShort:(NSDate *)date { + OWSAssertIsOnMainThread(); OWSAssert(date); + NSDate *now = [NSDate date]; + NSInteger dayDifference = [self daysFromFirstDate:date toSecondDate:now]; + BOOL dateIsOlderThanToday = dayDifference > 0; + BOOL dateIsOlderThanOneWeek = dayDifference > 6; + NSString *dateTimeString; if (![DateUtil dateIsThisYear:date]) { dateTimeString = [[DateUtil dateFormatter] stringFromDate:date]; - } else if ([DateUtil dateIsOlderThanOneWeek:date]) { + } else if (dateIsOlderThanOneWeek) { dateTimeString = [[DateUtil monthAndDayFormatter] stringFromDate:date]; - } else if ([DateUtil dateIsOlderThanToday:date]) { + } else if (dateIsOlderThanToday) { dateTimeString = [[DateUtil shortDayOfWeekFormatter] stringFromDate:date]; } else { dateTimeString = [[DateUtil timeFormatter] stringFromDate:date]; From 21c630c0958fa072ee960ab7d8037929dd2bb257 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 3 Aug 2018 10:25:38 -0400 Subject: [PATCH 2/3] Ignore redundant body text view updates; cache body text view size. --- .../Cells/OWSMessageTextView.m | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m index f2dd320e5..5626d0a8a 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m @@ -7,6 +7,14 @@ NS_ASSUME_NONNULL_BEGIN +@interface OWSMessageTextView () + +@property (nonatomic, nullable) NSValue *cachedSize; + +@end + +#pragma mark - + @implementation OWSMessageTextView // Our message text views are never used for editing; @@ -61,6 +69,61 @@ NS_ASSUME_NONNULL_BEGIN return result; } +- (void)setText:(nullable NSString *)text +{ + if ([NSObject isNullableObject:text equalTo:self.text]) { + return; + } + [super setText:text]; + self.cachedSize = nil; +} + +- (void)setAttributedText:(nullable NSAttributedString *)attributedText +{ + if ([NSObject isNullableObject:attributedText equalTo:self.attributedText]) { + return; + } + [super setAttributedText:attributedText]; + self.cachedSize = nil; +} + +- (void)setTextColor:(nullable UIColor *)textColor +{ + if ([NSObject isNullableObject:textColor equalTo:self.textColor]) { + return; + } + [super setTextColor:textColor]; + self.cachedSize = nil; +} + +- (void)setFont:(nullable UIFont *)font +{ + if ([NSObject isNullableObject:font equalTo:self.font]) { + return; + } + [super setFont:font]; + self.cachedSize = nil; +} + +- (void)setLinkTextAttributes:(nullable NSDictionary *)linkTextAttributes +{ + if ([NSObject isNullableObject:linkTextAttributes equalTo:self.linkTextAttributes]) { + return; + } + [super setLinkTextAttributes:linkTextAttributes]; + self.cachedSize = nil; +} + +- (CGSize)sizeThatFits:(CGSize)size +{ + if (self.cachedSize) { + return self.cachedSize.CGSizeValue; + } + CGSize result = [super sizeThatFits:size]; + self.cachedSize = [NSValue valueWithCGSize:result]; + return result; +} + @end NS_ASSUME_NONNULL_END From 4d2bdf9bd0b019822d8f24995a27838bd018e141 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 3 Aug 2018 13:33:35 -0400 Subject: [PATCH 3/3] Respond to CR. --- .../ViewControllers/ConversationView/Cells/OWSMessageTextView.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m index 5626d0a8a..2ac36ade5 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTextView.m @@ -93,7 +93,7 @@ NS_ASSUME_NONNULL_BEGIN return; } [super setTextColor:textColor]; - self.cachedSize = nil; + // No need to clear cached size here. } - (void)setFont:(nullable UIFont *)font