New issue
Advanced search Search tips

Issue 916791 link

Starred by 4 users

Issue metadata

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



Sign in to add a comment

Potential jank caused by a mojo message handler

Project Member Reported by ssid@chromium.org, Dec 19

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:
// MediaRouterAndroidBridge()
60c97cb9cea9221e ,1476.603
45b29788bb0fb2df ,1162.389

// FeedNetworkBridge::OnResult
47203c5cf9f7e3ad ,915.528
d441787efd79b2a2 ,231.865

// NotificationResourcesDataView::ReadBadge<SkBitmap>
126f9019a38b7a02 ,341.332
fe7c12d401f08431 ,266.736


Go to crash/ReportID to view the traces.

The most common stack traces:

media_router::MediaRouterAndroidBridge::MediaRouterAndroidBridge(media_router::MediaRouterAndroid*)
media_router::MediaRouterAndroid::MediaRouterAndroid(content::BrowserContext*)
media_router::MediaRouterFactory::BuildServiceInstanceFor(content::BrowserContext*) const
BrowserContextKeyedServiceFactory::BuildServiceInstanceFor(base::SupportsUserData*) const
KeyedServiceFactory::GetServiceForContext(base::SupportsUserData*, bool)
CastRemotingConnector::Get(content::WebContents*)
CastRemotingConnector::CreateMediaRemoter(content::RenderFrameHost*, mojo::InterfacePtr<media::mojom::RemotingSource>, mojo::InterfaceRequest<media::mojom::Remoter>)
ChromeContentBrowserClient::CreateMediaRemoter(content::RenderFrameHost*, mojo::InterfacePtr<media::mojom::RemotingSource>, mojo::InterfaceRequest<media::mojom::Remoter>)
_ZN7content12_GLOBAL__N_118RemoterFactoryImpl6CreateEN4mojo12InterfacePtrIN5media5mojom14RemotingSourceEEENS2_16InterfaceRequestINS5_7RemoterEEE$0d23968f3b9b341f816f8f9299dfe39e
media::mojom::RemoterFactoryStubDispatch::Accept(media::mojom::RemoterFactory*, mojo::Message*)
mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*)
mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*)
mojo::internal::MultiplexRouter::Accept(mojo::Message*)
mojo::Connector::ReadSingleMessage(unsigned int*)
mojo::Connector::OnHandleReadyInternal(unsigned int)
mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&)
base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
base::MessageLoopImpl::DoWork()
base::MessagePumpForUI::OnNonDelayedLooperCallback()
base::(anonymous namespace)::NonDelayedLooperCallback(int, int, void*)


Java_Helper_onObjectResultFromNative(_JNIEnv*, base::android::JavaRef<_jobject*> const&, base::android::JavaRef<_jobject*> const&) (.llvm.15103438533664174642)
feed::FeedNetworkBridge::OnResult(base::android::ScopedJavaGlobalRef<_jobject*> const&, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)
base::internal::Invoker<base::internal::BindState<void (feed::FeedNetworkBridge::*)(base::android::ScopedJavaGlobalRef<_jobject*> const&, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >), base::WeakPtr<feed::FeedNetworkBridge>, base::android::ScopedJavaGlobalRef<_jobject*> >, void (int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)>::RunOnce(base::internal::BindStateBase*, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >&&)
base::OnceCallback<void (bool, std::__ndk1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__ndk1::allocator<unsigned short> > const&)>::Run(bool, std::__ndk1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__ndk1::allocator<unsigned short> > const&) &&
feed::FeedNetworkingHost::NetworkFetchFinished(feed::NetworkFetch*, base::OnceCallback<void (int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)>, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)
base::internal::Invoker<base::internal::BindState<void (feed::FeedNetworkingHost::*)(feed::NetworkFetch*, base::OnceCallback<void (int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)>, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >), base::internal::UnretainedWrapper<feed::FeedNetworkingHost>, feed::NetworkFetch*, base::OnceCallback<void (int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)> >, void (int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >)>::RunOnce(base::internal::BindStateBase*, int, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >&&)
base::OnceCallback<void (bool, std::__ndk1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__ndk1::allocator<unsigned short> > const&)>::Run(bool, std::__ndk1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__ndk1::allocator<unsigned short> > const&) &&
feed::NetworkFetch::OnSimpleLoaderComplete(std::__ndk1::unique_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::default_delete<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > >)
base::internal::Invoker<base::internal::BindState<void (GaiaAuthFetcher::*)(std::__ndk1::unique_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::default_delete<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > >), base::internal::UnretainedWrapper<GaiaAuthFetcher> >, void (std::__ndk1::unique_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::default_delete<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > >)>::RunOnce(base::internal::BindStateBase*, std::__ndk1::unique_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::default_delete<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > >&&)
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&) &&
_ZN7network12_GLOBAL__N_123SaveToStringBodyHandler26NotifyConsumerOfCompletionEb$8e1712ac27cd56437b19d97c577dae92
_ZN7network12_GLOBAL__N_119SimpleURLLoaderImpl16FinishWithResultEi$8e1712ac27cd56437b19d97c577dae92
network::mojom::URLLoaderClientStubDispatch::Accept(network::mojom::URLLoaderClient*, mojo::Message*)
mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*)
mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*)
mojo::internal::MultiplexRouter::Accept(mojo::Message*)
mojo::Connector::ReadSingleMessage(unsigned int*)
mojo::Connector::OnHandleReadyInternal(unsigned int)
mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&)
base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
base::MessageLoopImpl::DoWork()
base::MessagePumpForUI::OnNonDelayedLooperCallback()
base::(anonymous namespace)::NonDelayedLooperCallback(int, int, void*)




 
Cc: gangwu@chromium.org s...@chromium.org pnoland@chromium.org fgor...@chromium.org
Adding people looking at feed performance.
How are you getting stack traces? I can find the offending event in the trace, but it only shows the root file/function (i.e. mojo/public/cpp/system/simple_watcher.cc/"Notify")

Project Member

Comment 4 by bugdroid1@chromium.org, Dec 21

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/23f9b2c08f567cd8b3ab8c67bd342e2c17e271a8

commit 23f9b2c08f567cd8b3ab8c67bd342e2c17e271a8
Author: Siddhartha <ssid@chromium.org>
Date: Fri Dec 21 18:47:20 2018

Add trace event to debug janks at startup

The number of janks caused by mojo handlers have increased recently.
The suspected feature is feed network request. Add a trace event to
debug if this is the case.

BUG=916791
R=fgorski@chromium.org

Change-Id: I4daf735d1fc90d9488324c83f7af7b5f4990b833
Reviewed-on: https://chromium-review.googlesource.com/c/1388031
Reviewed-by: Filip Gorski <fgorski@chromium.org>
Commit-Queue: ssid <ssid@chromium.org>
Cr-Commit-Position: refs/heads/master@{#618559}
[modify] https://crrev.com/23f9b2c08f567cd8b3ab8c67bd342e2c17e271a8/chrome/browser/android/feed/feed_network_bridge.cc

Sign in to add a comment