Potential jank caused by sync_sessions::OnReadAllMetadata() |
||||
Issue description
We collected slow reports from users facing janks and found that the function mentioned above is taking too much time on the main thread, potentially causing janks.
The issue can be found in reports:
Go to crash/ReportID to view the traces.
1def0ff4a6b2e7c3 - 1821 ms
The stack traces that were hit the most:
url::CanonicalizeScheme(char const*, url::Component const&, url::CanonOutputT<char>*, url::Component*)
bool url::(anonymous namespace)::DoCanonicalizeStandardURL<char, unsigned char>(url::URLComponentSource<char> const&, url::Parsed const&, url::SchemeType, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*)
url::CanonicalizeStandardURL(char const*, int, url::Parsed const&, url::SchemeType, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*)
bool url::(anonymous namespace)::DoCanonicalize<char>(char const*, int, bool, url::(anonymous namespace)::WhitespaceRemovalPolicy, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*)
url::Canonicalize(char const*, int, bool, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*)
GURL::GURL(base::BasicStringPiece<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >)
sync_sessions::FaviconCache::UpdateMappingsFromForeignTab(sync_pb::SessionTab const&, base::Time)
sync_sessions::(anonymous namespace)::FactoryImpl::OnReadAllMetadata()
base::OnceCallback<void (std::__ndk1::unique_ptr<media::AudioDecoder, std::__ndk1::default_delete<media::AudioDecoder> >, std::__ndk1::unique_ptr<media::DecryptingDemuxerStream, std::__ndk1::default_delete<media::DecryptingDemuxerStream> >)>::Run(std::__ndk1::unique_ptr<media::AudioDecoder, std::__ndk1::default_delete<media::AudioDecoder> >, std::__ndk1::unique_ptr<media::DecryptingDemuxerStream, std::__ndk1::default_delete<media::DecryptingDemuxerStream> >) &&
syncer::ModelTypeStoreImpl::ReadAllMetadataDone(base::OnceCallback<void (base::Optional<syncer::ModelError> const&, std::__ndk1::unique_ptr<syncer::MetadataBatch, std::__ndk1::default_delete<syncer::MetadataBatch> >)>, std::__ndk1::unique_ptr<syncer::MetadataBatch, std::__ndk1::default_delete<syncer::MetadataBatch> >, base::Optional<syncer::ModelError> const&)
base::OnceCallback<void (std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)>::Run(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&) &&
base::(anonymous namespace)::PostTaskAndReplyRelay::RunReply(base::(anonymous namespace)::PostTaskAndReplyRelay)
base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
base::MessageLoop::RunTask(base::PendingTask*)
base::MessageLoop::DoWork()
base::MessagePumpForUI::OnNonDelayedLooperCallback()
base::(anonymous namespace)::NonDelayedLooperCallback(int, int, void*)
std::__ndk1::vector<sessions::SerializedNavigationEntry, std::__ndk1::allocator<sessions::SerializedNavigationEntry> >::__swap_out_circular_buffer(std::__ndk1::__split_buffer<sessions::SerializedNavigationEntry, std::__ndk1::allocator<sessions::SerializedNavigationEntry>&>&)
void std::__ndk1::vector<sessions::SerializedNavigationEntry, std::__ndk1::allocator<sessions::SerializedNavigationEntry> >::__push_back_slow_path<sessions::SerializedNavigationEntry>(sessions::SerializedNavigationEntry&&)
sync_sessions::SetSessionTabFromSyncData(sync_pb::SessionTab const&, base::Time, sessions::SessionTab*)
sync_sessions::UpdateTrackerWithSpecifics(sync_pb::SessionSpecifics const&, base::Time, sync_sessions::SyncedSessionTracker*)
sync_sessions::(anonymous namespace)::FactoryImpl::OnReadAllMetadata()
syncer::ModelTypeStoreImpl::ReadAllMetadataDone(base::OnceCallback<void (base::Optional<syncer::ModelError> const&, std::__ndk1::unique_ptr<syncer::MetadataBatch, std::__ndk1::default_delete<syncer::MetadataBatch> >)>, std::__ndk1::unique_ptr<syncer::MetadataBatch, std::__ndk1::default_delete<syncer::MetadataBatch> >, base::Optional<syncer::ModelError> const&)
base::OnceCallback<void (std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)>::Run(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&) &&
base::(anonymous namespace)::PostTaskAndReplyRelay::RunReply(base::(anonymous namespace)::PostTaskAndReplyRelay)
void base::internal::FunctorTraits<void (*)(base::(anonymous namespace)::PostTaskAndReplyRelay), void>::Invoke<void (*)(base::(anonymous namespace)::PostTaskAndReplyRelay), base::(anonymous namespace)::PostTaskAndReplyRelay>(void (*&&)(base::(anonymous namespace)::PostTaskAndReplyRelay), base::(anonymous namespace)::PostTaskAndReplyRelay&&)
base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
base::MessageLoop::RunTask(base::PendingTask*)
base::MessageLoop::DoWork()
base::MessagePumpForUI::OnNonDelayedLooperCallback()
base::(anonymous namespace)::NonDelayedLooperCallback(int, int, void*)
,
Nov 7
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/9004be20a4cfde70456579489258c3aca4ed45a4 commit 9004be20a4cfde70456579489258c3aca4ed45a4 Author: ssid <ssid@chromium.org> Date: Wed Nov 07 19:12:48 2018 Add trace event to sync_sessions::OnReadAllMetadata() It is likely a cause of janks on UI thread on Android. Add a trace event to get metrics about the duration. BUG=902203 Change-Id: I4c4e9c2a20790264b982007ea7ee88ddfa7b972c Reviewed-on: https://chromium-review.googlesource.com/c/1319369 Reviewed-by: Mikel Astiz <mastiz@chromium.org> Commit-Queue: ssid <ssid@chromium.org> Cr-Commit-Position: refs/heads/master@{#606104} [modify] https://crrev.com/9004be20a4cfde70456579489258c3aca4ed45a4/components/sync_sessions/session_store.cc
,
Nov 16
,
Nov 16
I'll assign to myself till I get better metrics. There might not be lot of users affected.
,
Nov 19
,
Jan 15
ssid@: any updates here? Thx. |
||||
►
Sign in to add a comment |
||||
Comment 1 by mastiz@google.com
, Nov 7