Skip to content

Improve channel list rendering performance#1529

Open
nuno-vieira wants to merge 24 commits into
developfrom
perf/channel-list-rendering-fixes
Open

Improve channel list rendering performance#1529
nuno-vieira wants to merge 24 commits into
developfrom
perf/channel-list-rendering-fixes

Conversation

@nuno-vieira

@nuno-vieira nuno-vieira commented Jul 9, 2026

Copy link
Copy Markdown
Member

🔗 Issue Links

🎯 Goal

Reduce main-thread hangs while scrolling and paginating the channel list.

📝 Summary

  • Diff channel updates instead of replacing the whole array, so ForEach only reconciles rows that actually changed.
  • Resolve a channel row's index in O(1) via a lookup map instead of scanning the array on every row appearance.
  • Render the channel list divider as a row overlay instead of a separate sibling node.
  • Use the channel list query's default page size when paginating, and only trigger pagination within the last 8 rows.

🛠 Implementation

Channel updates are applied with Array.difference(from:) so unchanged rows keep their identity, and row index resolution is O(1). Pagination fires less eagerly (within the last 8 rows, default page size). Row visuals are unchanged.

Note: We initially explored backing the channel list with a native SwiftUI List on iOS 15+ for true row virtualization, but reverted it since it conflicts with custom swipe-gesture implementations in customized ViewFactorys. The channel list keeps rendering with LazyVStack/ScrollView.

Note: The StreamChat dependency temporarily points at the perf/channel-list-performance-improvements branch (GetStream/stream-chat-swift#4165). It should be pointed back at a released version once that PR is merged.

🎨 Showcase

With all these fixes, including LLC changes, we can drop from around 70 hangs when scrolling fast through new pages to just 14. In order to completely drop the hangs to 0, the only way is actually to bypass the database. I've done a prototype, and only without the CoreData processing can I get a complete 0 hangs.

Before

image-7602a2aa-c70a-48e6-a8bc-e77447d02c94

After

image-ab44ddcc-ef22-4426-aa5d-f37f68790008

🧪 Manual Testing Notes

Scroll a large channel list and paginate; scrolling should stay smooth without main-thread hangs. Row visuals, dividers, selection and swipe actions should be unchanged.

☑️ Contributor Checklist

  • I have signed the Stream CLA (required)
  • This change should be manually QAed
  • Changelog is updated with client-facing changes
  • Changelog is updated with new localization keys
  • New code is covered by unit tests
  • Documentation has been updated in the docs-content repo

Track the perf/channel-list-performance-improvements branch of
stream-chat-swift so the channel list rendering changes build against the
matching core-SDK improvements until they are released.
Apply the difference between the current and new channel arrays when
the channel list controller reports changes, so unchanged channels
keep their identity and position and the list only reconciles rows
that actually changed.
Build a channel id to index map once per body evaluation and use it to
resolve a row's index on appearance, instead of scanning the whole
channel array with firstIndex(where:) for every row.
Attach the divider as a bottom overlay on each row instead of adding it
as a separate sibling node, halving the number of view-list entries the
list has to place on every layout pass.
Drop the hardcoded 30 limit when paginating the channel list so it
follows the page size configured on the channel list query instead.
Add a ChannelsList component that renders the channel list with a native
SwiftUI List, used by default on iOS 15 and later. List truly virtualizes
its rows, keeping layout cost flat as the channel count grows, while the
LazyVStack path remains the fallback on iOS 14.
Load the next page of channels only once one of the last 8 rows appears
instead of the last 15, so pagination fires less eagerly while scrolling.
@nuno-vieira nuno-vieira requested a review from a team as a code owner July 9, 2026 19:01
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

ChannelList now uses an iOS 15+ native List path with shared row rendering and indexed appearance callbacks. Pagination starts earlier, channel updates apply diffs, and tests, changelog, and project dependency configuration are updated.

Changes

Channel List Performance Improvements

Layer / File(s) Summary
iOS version-based scroll implementation
Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift
ChannelList uses channelsList on iOS 15+ and channelsVStack on earlier systems while preserving animated scrolledChannelId scrolling.
Shared list rendering and row styling
Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift, StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelList_Tests.swift
ChannelListItemsContainer supports native and lazy layouts, precomputes channel indexes, applies divider and row styling, and is covered by lookup and rendering tests.
Pagination threshold and channel diffing
Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift, StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift, CHANGELOG.md
Pagination triggers earlier, channel refreshes apply differences, and tests and changelog entries cover the updated behavior.
Package dependency and test wiring
StreamChatSwiftUI.xcodeproj/project.pbxproj
The project tracks the perf/channel-list-performance-improvements branch and includes the new channel list test file in the test target.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ChannelList
  participant ChannelListItemsContainer
  participant ChannelListItemRow
  participant ChannelListViewModel
  ChannelList->>ChannelListItemsContainer: render native or lazy channel items
  ChannelListItemsContainer->>ChannelListItemRow: provide channel and divider state
  ChannelListItemRow->>ChannelListItemsContainer: report appearance with indexed lookup
  ChannelListViewModel->>ChannelListViewModel: apply channel differences
  ChannelListViewModel->>ChannelListViewModel: trigger pagination near list end
Loading

Possibly related PRs

Suggested reviewers: martinmitrevski, laevandus

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change set: channel list rendering and scrolling performance improvements.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch perf/channel-list-rendering-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift (1)

242-355: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract shared row logic to eliminate duplication between ChannelsLazyVStack and ChannelsList.

makeChannelIndexLookup(), name(for:), and the row rendering pipeline (factory.makeChannelListItem.background.overlay.onAppear) are nearly identical across both structs. Any future change to row rendering, divider logic, or index lookup must be applied in two places, risking drift.

Consider extracting a shared row-builder helper (e.g., a @ViewBuilder function or a reusable ViewModifier) that both LazyVStack and List ForEach bodies call, parameterized by the divider visibility and lookup map.

♻️ Suggested shared row builder
+ `@ViewBuilder`
+ fileprivate func channelRow(
+     for channel: ChatChannel,
+     channelIndexLookup: [String: Int],
+     showsDivider: Bool
+ ) -> some View {
+     factory.makeChannelListItem(
+         options: ChannelListItemOptions(
+             channel: channel,
+             channelName: name(for: channel),
+             disabled: swipedChannelId == channel.id,
+             selectedChannel: $selectedChannel,
+             swipedChannelId: $swipedChannelId,
+             channelDestination: channelDestination,
+             onItemTap: onItemTap,
+             trailingSwipeRightButtonTapped: trailingSwipeRightButtonTapped,
+             trailingSwipeLeftButtonTapped: trailingSwipeLeftButtonTapped,
+             leadingSwipeButtonTapped: leadingSwipeButtonTapped
+         )
+     )
+     .background(factory.makeChannelListItemBackground(
+         options: ChannelListItemBackgroundOptions(
+             channel: channel,
+             isSelected: selectedChannel?.channel.id == channel.id
+         )
+     ))
+     .overlay(
+         Group {
+             if showsDivider {
+                 factory.makeChannelListDividerItem(options: ChannelListDividerItemOptions())
+             }
+         },
+         alignment: .bottom
+     )
+     .onAppear {
+         if let index = channelIndexLookup[channel.id] {
+             onItemAppear(index)
+         }
+     }
+ }

Both ChannelsLazyVStack and ChannelsList could then call channelRow(for:channelIndexLookup:showsDivider:) inside their respective ForEach loops, with ChannelsList applying the additional .listRowInsets/.listRowSeparator/.listRowBackground modifiers after the shared builder.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift` around lines
242 - 355, `ChannelsList` duplicates the same row-building logic already present
in `ChannelsLazyVStack`, including `makeChannelIndexLookup()`, `name(for:)`, and
the `factory.makeChannelListItem` chain with background, overlay, and onAppear
handling. Extract that shared row pipeline into a reusable helper such as a
`@ViewBuilder` channel row function or a shared `ViewModifier`, parameterized by
the lookup map and divider visibility, so both structs call the same
implementation and `ChannelsList` only adds its `List`-specific row modifiers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift`:
- Around line 286-334: The ChatChannelList view is only clearing row
backgrounds, so the List still shows its default scroll content background on
iOS 16+. Update the List builder in ChatChannelList to apply
.scrollContentBackground(.hidden) alongside the existing .listStyle(.plain) and
row background settings, keeping the change near the ForEach(channels) list
rendering and footer view.

---

Nitpick comments:
In `@Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift`:
- Around line 242-355: `ChannelsList` duplicates the same row-building logic
already present in `ChannelsLazyVStack`, including `makeChannelIndexLookup()`,
`name(for:)`, and the `factory.makeChannelListItem` chain with background,
overlay, and onAppear handling. Extract that shared row pipeline into a reusable
helper such as a `@ViewBuilder` channel row function or a shared `ViewModifier`,
parameterized by the lookup map and divider visibility, so both structs call the
same implementation and `ChannelsList` only adds its `List`-specific row
modifiers.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4a11e2f3-f9e1-4da1-b7cb-048cae25ccd8

📥 Commits

Reviewing files that changed from the base of the PR and between 7d5bfbc and e4a651c.

📒 Files selected for processing (3)
  • Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift
  • Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift
  • StreamChatSwiftUI.xcodeproj/project.pbxproj

Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift Outdated
Re-record the ChatChannelListView reference snapshots affected by the
switch to a native List-backed channel list. The visuals are unchanged;
only sub-pixel layout differences required new references.
Extract shared row, footer, and index lookup logic used by both the
LazyVStack and native List implementations, and add unit tests for the
lookup helper and pagination prefetch threshold.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift (1)

68-104: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Pagination boundary tests are correct.

The threshold in checkForChannels(index:) is count - 8 = 12 for 20 channels, so index 11 correctly does not trigger and index 12 does. The deterministic channel IDs are an improvement over mockDMChannel() for this scenario.

The 20-channel setup is duplicated verbatim in both new tests. Consider extracting a small helper to reduce duplication.

♻️ Optional: extract shared channel setup
+    private func makeTwentyChannels() -> [ChatChannel] {
+        (0..<20).map {
+            ChatChannel.mock(cid: ChannelId(type: .messaging, id: "\($0)"))
+        }
+    }
+
     func test_channelListVM_onChannelAppear_loadNextChannelsNotCalled() {
         // Given
-        var channels = [ChatChannel]()
-        for index in 0..<20 {
-            channels.append(ChatChannel.mock(cid: ChannelId(type: .messaging, id: "\(index)")))
-        }
+        let channels = makeTwentyChannels()
         let channelListController = makeChannelListController(channels: channels)

Apply the same change to test_channelListVM_onChannelAppear_loadNextChannelsCalledNearEnd.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift`
around lines 68 - 104, The new pagination boundary tests are correct, but the
20-channel setup is duplicated across both ChatChannelListViewModel_Tests cases.
Extract the repeated channel creation into a small shared helper in
ChatChannelListViewModel_Tests, then update
test_channelListVM_onChannelAppear_loadNextChannelsNotCalled and
test_channelListVM_onChannelAppear_loadNextChannelsCalledNearEnd to use it so
the setup stays consistent and easier to maintain.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift`:
- Around line 68-104: The new pagination boundary tests are correct, but the
20-channel setup is duplicated across both ChatChannelListViewModel_Tests cases.
Extract the repeated channel creation into a small shared helper in
ChatChannelListViewModel_Tests, then update
test_channelListVM_onChannelAppear_loadNextChannelsNotCalled and
test_channelListVM_onChannelAppear_loadNextChannelsCalledNearEnd to use it so
the setup stays consistent and easier to maintain.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 65648004-c542-4e97-9163-e79f46125244

📥 Commits

Reviewing files that changed from the base of the PR and between e4a651c and 77d49d0.

⛔ Files ignored due to path filters (6)
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_channelListView_channelAvatarUpdated.1.png is excluded by !**/*.png
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_channelListView_themedNavigationBar.1.png is excluded by !**/*.png
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_chatChannelListViewSansNavigation_snapshot.1.png is excluded by !**/*.png
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_chatChannelListView_showChannelListDividerOnLastItem_snapshot.disabled.png is excluded by !**/*.png
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_chatChannelListView_showChannelListDividerOnLastItem_snapshot.enabled.png is excluded by !**/*.png
  • StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListView_Tests/test_chatChannelListView_snapshot.1.png is excluded by !**/*.png
📒 Files selected for processing (4)
  • Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift
  • StreamChatSwiftUI.xcodeproj/project.pbxproj
  • StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift
  • StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelList_Tests.swift
🚧 Files skipped from review as they are similar to previous changes (2)
  • StreamChatSwiftUI.xcodeproj/project.pbxproj
  • Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift

Route ChannelList through a single items container and keep
ChannelsLazyVStack as a thin compatibility wrapper.
Cover search reset, channel removal, the compatibility wrapper, and
additional index lookup scenarios to satisfy the new-code coverage gate.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelList_Tests.swift`:
- Around line 54-57: The assertion in
test_channelsLazyVStack_rendersProvidedChannels is checking the local channels
array rather than anything produced by evaluating view.body, so it does not
verify rendering. Update the test to assert on actual rendered output from
ChatChannelListContainer or the LazyVStack path, or replace the current count
check with a crash-free body evaluation expectation. Use the existing test
method name and the view.body evaluation in ChatChannelList_Tests to locate the
change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 60da9901-b4c3-4f2e-a452-f98df9a33932

📥 Commits

Reviewing files that changed from the base of the PR and between fc96e45 and 2d72125.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListViewModel_Tests.swift
  • StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelList_Tests.swift
✅ Files skipped from review due to trivial changes (1)
  • CHANGELOG.md

Comment thread StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelList_Tests.swift Outdated
The actual measured reduction is 2.5 MB, not 2 MB.
The native List introduced conflicts with custom swipe-gesture
implementations in customized ViewFactorys. Go back to always
rendering the channel list with LazyVStack/ScrollView, keeping the
other performance fixes (diffing, O(1) index lookup, divider as
overlay) in place.
Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift Outdated
@github-actions

Copy link
Copy Markdown

Public Interface

🚀 No changes affecting the public interface.

Re-record ChatChannelListView reference snapshots on iPhone 17 Pro
(iOS 26.2) after reverting the native List rendering path.
@nuno-vieira nuno-vieira requested a review from laevandus July 10, 2026 12:10

@martinmitrevski martinmitrevski left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if these changes have a big impact on performance tbh. I think the LLC ones contribute more, can you share some more data?

Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift Outdated
Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift
Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelList.swift Outdated
Comment thread Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift Outdated
Drop diffed updates, native List, O(1) index lookup, test additions,
and snapshot changes. Keep only the divider overlay refactor and using
the channel list query page size when loading more channels.
Document divider overlay improvement and 2.5 MB SDK size reduction.

@martinmitrevski martinmitrevski left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice performance boost!

Track perf/channel-list-performance-improvements in Package.swift and
the Xcode project so the SwiftUI PR builds against the LLC perf changes.
@Stream-SDK-Bot

Copy link
Copy Markdown
Collaborator

SDK Size

title develop branch diff status
StreamChatSwiftUI 8.53 MB 6.15 MB -2435 KB 🚀

@Stream-SDK-Bot

Copy link
Copy Markdown
Collaborator

StreamChatSwiftUI XCSize

Object Diff (bytes)
MessageItemView.o -223084
ChatChannelHeaderViewModifier.o -142304
ChatChannelSwipeableListItem.o -141312
MessageComposerView.o -134237
PinnedMessagesView.o -124740
Show 98 more objects
Object Diff (bytes)
ChatThreadListNavigatableItem.o -124000
MessageRepliesView.o -102148
MessageListView.o -101248
MessageView.o -95828
ChatChannelNavigatableListItem.o -94912
ReactionsView.o -75988
MessageContainerView.o -75108
ReactionsOverlayContainer.o -74672
MessageTopView.o -72320
ChatChannelListViewModel.o -69416
ReactionsOverlayView.o -56392
MoreChannelActionsView.o -56000
PollAttachmentView.o -53420
ChatQuotedMessageView.o -49540
MessageListHelperViews.o -47244
TypingIndicatorView.o -45392
ChatChannelListItemPreviewView.o -45140
MediaViewer.o -35636
MessageMediaAttachmentsContainerView.o -29604
GiphyAttachmentView.o -27384
VoiceRecordingContainerView.o -26380
DefaultViewFactory.o -25814
FileAttachmentView.o -25616
MessageAttachmentsView.o -24785
ComposerQuotedMessageView.o -24132
MessageBubble.o -23828
LinkAttachmentView.o -23768
ReactionsBubbleView.o -23672
AttachmentTextView.o -23540
MessageAttachmentPreviewResolver.o -23416
DeletedMessageView.o -23180
DefaultMessageActions.o -14004
DefaultChannelActions.o -10644
MessageViewFactoryOptions.o -9500
ChatChannelViewModel.o -7184
ChatChannelInfoView.o -5344
MessageComposerViewModel.o -4522
ChannelViewFactoryOptions.o -4032
ChatChannelListView.o -3956
MessageViewModel.o -3708
ChatThreadList.o -3612
AttachmentViewFactoryOptions.o -3580
ChatChannelInfoViewModel.o -3182
ChatChannelView.o -3136
ReactionsViewFactoryOptions.o -3040
ComposerViewFactoryOptions.o -2836
MediaAttachmentsView.o -2772
ChatMessage+Extensions.o -2636
ChatChannelListItemViewModel.o -2612
FileAttachmentsView.o -2488
ReactionsDetailView.o -2220
DefaultMessageAttachmentsViewModifier.o -2040
ChatChannelList.o -1304
Styles.o -1200
BouncedMessageActionsModifier.o -1172
ChatChannelExtensions.o -992
ChatChannelDataSource.o -972
ChatThreadListItemViewModel.o +872
ReactionsOverlayViewModel.o -764
SwiftyGifManager.o +572
QuotedMessageViewModel.o -564
MentionsCommandHandler.o -553
ReactionsDetailViewModel.o -532
SearchResultsView.o -532
PinnedMessagesViewModel.o -504
MessageActionsResolver.o -484
SelectionBadgeView.o -432
MessageListDateUtils.o +384
MessageActionsViewModel.o -358
ViewModelsFactory.o -348
EditedMessageViewModel.o -328
ChatChannelListItem.o -328
StreamChat +240
TrailingInputComposerView.o -236
PollAllOptionsView.o +220
CommandsConfig.o -212
ChatThreadListView.o -192
ComposerAttachmentPickerButton.o -180
SearchBar.o +144
ChatThreadListItem.o -132
MediaAttachment.o -128
MediaAttachmentsViewModel.o -124
MessagePreviewFormatter.o -116
EditGroupView.o -112
ChannelPlaceholderAvatarUsersCache.o +100
PollAttachmentViewModel.o -100
ChatChannelInfoHelperViews.o -96
ChatClient+Extensions.o -80
VoiceRecordingGestureOverlay.o -80
MessageAttachmentPreviewKind.o -72
FileAttachmentsViewModel.o +68
JumpToUnreadButton.o -64
BadgeCountView.o -60
AttachmentCameraPickerView.o -60
SendInChannelView.o -52
MemberListView.o -48
StreamChat.o -44
ComposerAttachmentsContainerView.o +44

Restore CI-recorded references for channel list snapshots after keeping
the divider-as-overlay rendering change.
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants