Chrome hangs for minutes on large dataurl |
||||
Issue descriptionTo reproduce om macOS: 1. Make a large dataurl >10MB and put it into the clipboard, e.g. echo "data:image/jpeg;base64,$(base64 somelargeimage.jpeg)" | pbcopy 2. Paste the contents of your clipboard to the omnibox 3. Chrome hangs for minutes.
,
Nov 6
Attaching the symbolized profile.
,
Nov 12
Mac triage: to jdonnelly@ for omnibox triage.
,
Nov 12
Marking as untriaged so it get picks up during omnibox triage.
,
Nov 12
What kind of machine do you have? When I try this on my macbook pro, Chrome pauses for a while, but not minutes. The key here is that the paste is being cut off at some length (4k? 10k? 32k?). Before we added that, it was easy to reproduce. I can't even figure out whether this is mainly a Mac issue or not. My Linux machine has a similar length pause. The machines have very different specs though, so it's hard for me to compare. For some reason in the past (in the cocoa days), we had stricter limitations on paste on Mac than in other platforms; I think we lost that when we converted Mac to Views. I'm not sure if losing that logic was okay. Was Mac's performance is bad because it was using Cocoa, or bad because it of something else about Mac (and hence it's naturally worse than Linux anyway). In any case, this (hopefully) isn't that common these days, so switching to P-3 and marking as available. Any answers to the above questions might make it an easy fix; otherwise, I'm okay with letting this sit. For history: here's the change that added the cocoa-specific paste threshold. https://chromium.googlesource.com/chromium/src.git/+/18016982fceb8 |
||||
►
Sign in to add a comment |
||||
Comment 1 by alph@chromium.org
, Nov 6Here's a part of the call stack sampled in macOS Activity Monitor: 1345 OmniboxEditModel::OnAfterPossibleChange(OmniboxView::StateChanges const&, bool) (in Google Chrome Framework) load address 0x10def4000 + 0x4a57c92 [omnibox_edit_model.cc:1234] 1345 OmniboxEditModel::UpdateInput(bool, bool) (in Google Chrome Framework) load address 0x10def4000 + 0x4a55547 [omnibox_edit_model.cc:0] 1345 OmniboxEditModel::StartAutocomplete(bool, bool) (in Google Chrome Framework) load address 0x10def4000 + 0x4a55868 [string:1406] 1345 AutocompleteController::Start(AutocompleteInput const&) (in Google Chrome Framework) load address 0x10def4000 + 0x4a2728b [autocomplete_controller.cc:362] 1187 AutocompleteController::UpdateResult(bool, bool) (in Google Chrome Framework) load address 0x10def4000 + 0x4a276ee [autocomplete_controller.cc:522] ! 859 AutocompleteResult::CopyOldMatches(AutocompleteInput const&, AutocompleteResult*, TemplateURLService*) (in Google Chrome Framework) load address 0x10def4000 + 0x4a303c0 [__tree:1092] ! : 859 AutocompleteResult::SortAndCull(AutocompleteInput const&, TemplateURLService*) (in Google Chrome Framework) load address 0x10def4000 + 0x4a3081e [iterator:1372] ! : 858 <name omitted> (in Google Chrome Framework) load address 0x10def4000 + 0x4a2d897 [autocomplete_match.cc:646] ! : | 379 AutocompleteMatch::GURLToStrippedGURL(GURL const&, AutocompleteInput const&, TemplateURLService const*, std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> > const&) (in Google Chrome Framework) load address 0x10def4000 + 0x4a2d4a4 [autocomplete_match.cc:62] ! : | + 379 url_formatter::FormatUrl(GURL const&, unsigned int, unsigned int, url::Parsed*, unsigned long*, unsigned long*) (in Google Chrome Framework) load address 0x10def4000 + 0x3b82e5e [url_formatter.cc:436] ! : | + 379 url_formatter::FormatUrlWithAdjustments(GURL const&, unsigned int, unsigned int, url::Parsed*, unsigned long*, std::__1::vector<base::OffsetAdjuster::Adjustment, std::__1::allocator<base::OffsetAdjuster::Adjustment> >*) (in Google Chrome Framework) load address 0x10def4000 + 0x3b83b70 [url_formatter.cc:608] ! : | + 362 url_formatter::(anonymous namespace)::AppendFormattedComponent(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, url::Component const&, url_formatter::(anonymous namespace)::AppendComponentTransform const&, std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >*, url::Component*, std::__1::vector<base::OffsetAdjuster::Adjustment, std::__1::allocator<base::OffsetAdjuster::Adjustment> >*) (in Google Chrome Framework) load address 0x10def4000 + 0x3b840e8 [string:1406] ! : | + ! 362 url_formatter::(anonymous namespace)::NonHostComponentTransform::Execute(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<base::OffsetAdjuster::Adjustment, std::__1::allocator<base::OffsetAdjuster::Adjustment> >*) const (in Google Chrome Framework) load address 0x10def4000 + 0x3b854bd [url_formatter.cc:119] ! : | + ! 212 net::UnescapeAndDecodeUTF8URLComponentWithAdjustments(base::BasicStringPiece<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, unsigned int, std::__1::vector<base::OffsetAdjuster::Adjustment, std::__1::allocator<base::OffsetAdjuster::Adjustment> >*) (in Google Chrome Framework) load address 0x10def4000 + 0x27b9b48 [escape.cc:468] ! : | + ! : 91 bool base::ConvertUnicode<char, std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> > >(char const*, unsigned long, std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >*, std::__1::vector<base::OffsetAdjuster::Adjustment, std::__1::allocator<base::OffsetAdjuster::Adjustment> >*) (in Google Chrome Framework) load address 0x10def4000 + 0x247160f [utf_offset_string_conversions.cc:193] ! : | + ! : | 57 base::WriteUnicodeCharacter(unsigned int, std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >*) (in Google Chrome Framework) load address 0x10def4000 + 0x24720f4 [utf_string_conversion_utils.cc:96] ! : | + ! : | + 9 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656ca [string:1468] ! : | + ! : | + 8 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656ea [string:1465] ! : | + ! : | + 6 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656da [string:2441] ! : | + ! : | + 6 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x246573d [string:2453] ! : | + ! : | + 4 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656de [string:1485] ! : | + ! : | + 3 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656b6 [string:2421] ! : | + ! : | + 3 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656ed [string:0] ! : | + ! : | + 3 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x2465744 [string:2453] ! : | + ! : | + 2 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656bd [string:2421] ! : | + ! : | + 2 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656c3 [string:2425] ! : | + ! : | + 2 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x2465741 [string:2453] ! : | + ! : | + 1 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656b0 [string:2421] ! : | + ! : | + 1 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656b1 [string:2421] ! : | + ! : | + 1 std::__1::basic_string<unsigned short, base::string16_internals::string16_char_traits, std::__1::allocator<unsigned short> >::push_back(unsigned short) (in Google Chrome Framework) load address 0x10def4000 + 0x24656b4 [string:2421]