New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 902203 link

Starred by 2 users

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Bug



Sign in to add a comment

Potential jank caused by sync_sessions::OnReadAllMetadata()

Project Member Reported by ssid@chromium.org, Nov 6

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*)
 
Cc: mastiz@chromium.org
Project Member

Comment 2 by bugdroid1@chromium.org, 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

Components: Services>Sync
Owner: ssid@chromium.org
I'll assign to myself till I get better metrics. There might not be lot of users affected.
Status: Assigned (was: Untriaged)
ssid@: any updates here? Thx.

Sign in to add a comment