SurfaceAggregator's use of unordered_map is inefficient |
||||||
Issue description
On a memory profile (this is a debug build) I see 20326600 bytes in 253689 allocations in cc::SurfaceAggregator::PrewalkTree over the course of 10 minutes.
A big chunk of these are from the unordered_set in that function, which will allocate a 8-bucket hash table on the heap upon initialization.
I put a histogram in and browsed the web a bit and did not see any entries put in that set:
Histogram: SurfaceAggregator.FilterPasses recorded 34624 samples, mean = 0.0 (flags = 0x41)
0 ------------------------------------------------------------------------O (34624 = 100.0%)
1 ...
The other unordered maps and sets in that object are similarly underutilized:
Histogram: SurfaceAggregator.CopyPixelPasses_Clear recorded 2640 samples, mean = 0.0 (flags = 0x41)
0 ------------------------------------------------------------------------O (2631 = 99.7%)
1 O (0 = 0.0%) {99.7%}
2 O (9 = 0.3%) {99.7%}
3 ...
Histogram: SurfaceAggregator.MovedPixelPasses_Clear recorded 2640 samples, mean = 0.0 (flags = 0x41)
0 ------------------------------------------------------------------------O (2640 = 100.0%)
1 ...
Histogram: SurfaceAggregator.RenderPassDependencies_Clear recorded 2640 samples, mean = 1.0 (flags = 0x41)
0 -----------O (299 = 11.3%)
1 ------------------------------------------------------------------------O (1954 = 74.0%) {11.3%}
2 --------------O (387 = 14.7%) {85.3%}
3 ...
Histogram: SurfaceAggregator.RenderPassDependencies_MemberInsert recorded 10378 samples, mean = 1.2 (flags = 0x41)
0 O (0 = 0.0%)
1 ------------------------------------------------------------------------O (8584 = 82.7%) {0.0%}
2 ---------------O (1731 = 16.7%) {82.7%}
3 O (21 = 0.2%) {99.4%}
4 O (21 = 0.2%) {99.6%}
5 O (21 = 0.2%) {99.8%}
6 ...
Histogram: SurfaceAggregator.ValidSurfaces_Clear recorded 3440 samples, mean = 9.8 (flags = 0x41)
0 O (2 = 0.1%)
1 -O (9 = 0.3%) {0.1%}
2 ------------------------------O (362 = 10.5%) {0.3%}
3 --------------------------------------------------O (611 = 17.8%) {10.8%}
4 --------------------------------------O (463 = 13.5%) {28.6%}
5 -O (11 = 0.3%) {42.1%}
6 ------O (77 = 2.2%) {42.4%}
7 O (0 = 0.0%) {44.6%}
8 -O (17 = 0.5%) {44.6%}
9 O (0 = 0.0%) {45.1%}
10 --O (26 = 0.8%) {45.1%}
11 ---------------------O (253 = 7.4%) {45.9%}
12 ----------O (116 = 3.4%) {53.2%}
13 ------------------------------------------------------------------------O (879 = 25.6%) {56.6%}
14 O (3 = 0.1%) {82.2%}
15 O (6 = 0.2%) {82.2%}
16 O (0 = 0.0%) {82.4%}
17 -O (7 = 0.2%) {82.4%}
18 -O (12 = 0.3%) {82.6%}
19 ---O (31 = 0.9%) {83.0%}
20 -O (8 = 0.2%) {83.9%}
21 -------------------------------------------O (528 = 15.3%) {84.1%}
22 --O (19 = 0.6%) {99.4%}
23 ...
Histogram: SurfaceAggregator.ContainedSurfaces.Clear recorded 3439 samples, mean = 9.8 (flags = 0x41)
0 O (0 = 0.0%)
1 -O (10 = 0.3%) {0.0%}
2 ------------------------------O (362 = 10.5%) {0.3%}
3 --------------------------------------------------O (611 = 17.8%) {10.8%}
4 --------------------------------------O (463 = 13.5%) {28.6%}
5 -O (11 = 0.3%) {42.0%}
6 ------O (77 = 2.2%) {42.4%}
7 O (0 = 0.0%) {44.6%}
8 -O (17 = 0.5%) {44.6%}
9 O (0 = 0.0%) {45.1%}
10 --O (26 = 0.8%) {45.1%}
11 ---------------------O (253 = 7.4%) {45.9%}
12 ----------O (116 = 3.4%) {53.2%}
13 ------------------------------------------------------------------------O (879 = 25.6%) {56.6%}
14 O (3 = 0.1%) {82.1%}
15 O (6 = 0.2%) {82.2%}
16 O (0 = 0.0%) {82.4%}
17 -O (7 = 0.2%) {82.4%}
18 -O (12 = 0.3%) {82.6%}
19 ---O (31 = 0.9%) {83.0%}
20 -O (8 = 0.2%) {83.9%}
21 -------------------------------------------O (528 = 15.4%) {84.1%}
22 --O (19 = 0.6%) {99.4%}
23 ...
Histogram: SurfaceAggregator.PreviousContainedSurfaces.Clear recorded 3439 samples, mean = 9.8 (flags = 0x41)
0 O (2 = 0.1%)
1 -O (9 = 0.3%) {0.1%}
2 ------------------------------O (362 = 10.5%) {0.3%}
3 --------------------------------------------------O (611 = 17.8%) {10.8%}
4 --------------------------------------O (463 = 13.5%) {28.6%}
5 -O (11 = 0.3%) {42.1%}
6 ------O (77 = 2.2%) {42.4%}
7 O (0 = 0.0%) {44.6%}
8 -O (17 = 0.5%) {44.6%}
9 O (0 = 0.0%) {45.1%}
10 --O (26 = 0.8%) {45.1%}
11 ---------------------O (253 = 7.4%) {45.9%}
12 ---------O (115 = 3.3%) {53.2%}
13 ------------------------------------------------------------------------O (879 = 25.6%) {56.6%}
14 O (3 = 0.1%) {82.1%}
15 O (6 = 0.2%) {82.2%}
16 O (0 = 0.0%) {82.4%}
17 -O (7 = 0.2%) {82.4%}
18 -O (12 = 0.3%) {82.6%}
19 ---O (31 = 0.9%) {83.0%}
20 -O (8 = 0.2%) {83.9%}
21 -------------------------------------------O (528 = 15.4%) {84.1%}
22 --O (19 = 0.6%) {99.4%}
23 ...
Histogram: SurfaceAggregator.PrewalkResult_.UndrawnSurfaces.Clear recorded 896 samples, mean = 1.1 (flags = 0x41)
0 --------------------------------------------O (290 = 32.4%)
1 ------------------------------------------------------------------------O (480 = 53.6%) {32.4%}
2 ----------O (67 = 7.5%) {85.9%}
3 ...
5 --O (15 = 1.7%) {93.4%}
6 O (1 = 0.1%) {95.1%}
7 --O (15 = 1.7%) {95.2%}
8 ----O (28 = 3.1%) {96.9%}
9 ...
Histogram: SurfaceAggregator.RenderPassAllocatorMap recorded 25344 samples, mean = 9.3 (flags = 0x41)
0 O (2 = 0.0%)
1 O (32 = 0.1%) {0.0%}
2 -------------------O (2007 = 7.9%) {0.1%}
3 ----------O (1000 = 3.9%) {8.1%}
4 -----------------------------------O (3647 = 14.4%) {12.0%}
5 -O (78 = 0.3%) {26.4%}
6 ----O (381 = 1.5%) {26.7%}
7 ----O (406 = 1.6%) {28.2%}
8 -O (121 = 0.5%) {29.8%}
9 O (4 = 0.0%) {30.3%}
10 --------------------------------------------O (4569 = 18.0%) {30.3%}
11 O (26 = 0.1%) {48.3%}
12 ------------------------------------------------------------------------O (7474 = 29.5%) {48.4%}
13 -----------------------------------------------------O (5484 = 21.6%) {77.9%}
14 -O (113 = 0.4%) {99.6%}
15 ...
These are small sets of integers. Flat_set should be more efficient than unordered maps for these workloads. Even the max of 22 integers are much faster to copy than do one memory allocation as a std::set/map.
,
Apr 17 2017
,
Apr 17 2017
,
Apr 17 2017
,
Apr 17 2017
,
Apr 17 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/95286bcd87997785c90c4194d65a430d082bc784 commit 95286bcd87997785c90c4194d65a430d082bc784 Author: brettw <brettw@chromium.org> Date: Mon Apr 17 22:09:33 2017 Use flat_set in SurfaceAggregator. The sets and maks are typically small or empty and created once. flat_set and flat_map will have better performance for these workloads. See the bug for histograms of sizes. BUG= 712295 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel Review-Url: https://codereview.chromium.org/2823043002 Cr-Commit-Position: refs/heads/master@{#465040} [modify] https://crrev.com/95286bcd87997785c90c4194d65a430d082bc784/cc/surfaces/surface_aggregator.cc [modify] https://crrev.com/95286bcd87997785c90c4194d65a430d082bc784/cc/surfaces/surface_aggregator.h
,
Apr 17 2017
,
Apr 17 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/2ef85417acbbcbb4e8852bed450ea7ac3a5965b8 commit 2ef85417acbbcbb4e8852bed450ea7ac3a5965b8 Author: jbauman <jbauman@chromium.org> Date: Mon Apr 17 23:48:36 2017 Use flat_set for ResourceIdSet For DeclareUsedResourcesFromChild, the caller can accumulate into a vector and create a flat_set from that. ResourceProvider::wants_promotion_hints_set_ should always be small (around 1 entry) so it should be more efficient as a flat_set. Also remove Child::parent_to_child_map and store the child id directly in the Resource, to avoid unnecessary map lookups on resource creation and destruction. This improves the performance of SurfaceAggregatorPerfTest.* by 25-30% BUG= 712295 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel Review-Url: https://codereview.chromium.org/2826583002 Cr-Commit-Position: refs/heads/master@{#465064} [modify] https://crrev.com/2ef85417acbbcbb4e8852bed450ea7ac3a5965b8/cc/base/resource_id.h [modify] https://crrev.com/2ef85417acbbcbb4e8852bed450ea7ac3a5965b8/cc/resources/resource_provider.cc [modify] https://crrev.com/2ef85417acbbcbb4e8852bed450ea7ac3a5965b8/cc/resources/resource_provider.h [modify] https://crrev.com/2ef85417acbbcbb4e8852bed450ea7ac3a5965b8/cc/surfaces/surface_aggregator.cc
,
Apr 18 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/96a94ba94eb9a691ead21e134e28bbe6cd47580a commit 96a94ba94eb9a691ead21e134e28bbe6cd47580a Author: alexmos <alexmos@chromium.org> Date: Tue Apr 18 00:03:57 2017 Revert of Use flat_set in SurfaceAggregator. (patchset #3 id:40001 of https://codereview.chromium.org/2823043002/ ) Reason for revert: Seems to be causing several tests to fail: https://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Tests%20%28dbg%29%281%29/builds/24975 Failure output: ../../build/linux/debian_jessie_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/debug/safe_iterator.210: error: attempt to construct a constant iterator from a singular mutable iterator. Objects involved in the operation: iterator "this" @ 0x0x7fff97b205a0 { state = dereferenceable; references sequence @ 0x0x7fff97b205a0 } iterator "other" @ 0x0x7fff97b20878 { state = singular; references sequence @ 0x0x7fff97b20878 } Received signal 6 #0 0x7f0cbdddb56b base::debug::StackTrace::StackTrace() #1 0x7f0cbddda2ac base::debug::StackTrace::StackTrace() #2 0x7f0cbdddb07f base::debug::(anonymous namespace)::StackDumpSignalHandler() #3 0x7f0cbe22f330 <unknown> #4 0x7f0ca248ac37 gsignal #5 0x7f0ca248e028 abort #6 0x7f0ca2adffe5 __gnu_debug::_Error_formatter::_M_error() #7 0x7f0cb26be3ad _ZN11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIPKN2cc9SurfaceIdENSt9__cxx19986vectorIS4_SaIS4_EEEEENSt7__debug6vectorIS4_S9_EEEC2INS2_IPS4_SA_EEEERKNS0_IT_NS1_11__enable_ifIXsr3std10__are_sameISJ_SI_EE7__valueESE_E6__typeEEE #8 0x7f0cb26ce1de cc::SurfaceAggregator::HandleSurfaceQuad() #9 0x7f0cb26ce94f cc::SurfaceAggregator::CopyQuadsToPass() #10 0x7f0cb26cf76e cc::SurfaceAggregator::CopyPasses() #11 0x7f0cb26d1df6 cc::SurfaceAggregator::Aggregate() #12 0x7f0cb268aacc cc::Display::DrawAndSwap() #13 0x7f0cb269c3ab cc::DisplayScheduler::DrawAndSwap() #14 0x7f0cb269baf6 cc::DisplayScheduler::AttemptDrawAndSwap() #15 0x7f0cb269b3ef cc::DisplayScheduler::OnBeginFrameDeadline() #16 0x7f0cb269c92b cc::DisplayScheduler::OnBeginFrameDerivedImpl() #17 0x7f0cb2f1b179 cc::BeginFrameObserverBase::OnBeginFrame() #18 0x7f0cb2f1cd96 cc::DelayBasedBeginFrameSource::OnTimerTick() #19 0x7f0cb2f34d1a cc::DelayBasedTimeSource::OnTimerTick() #20 0x7f0cb2d90107 _ZN4base8internal13FunctorTraitsIMN2cc28ScrollbarAnimationControllerEFvvEvE6InvokeIRKNS_7WeakPtrIS3_EEJEEEvS5_OT_DpOT0_ #21 0x7f0cb2f354da _ZN4base8internal12InvokeHelperILb1EvE8MakeItSoIRKMN2cc20DelayBasedTimeSourceEFvvERKNS_7WeakPtrIS5_EEJEEEvOT_OT0_DpOT1_ #22 0x7f0cb2f35462 _ZN4base8internal7InvokerINS0_9BindStateIMN2cc20DelayBasedTimeSourceEFvvEJNS_7WeakPtrIS4_EEEEEFvvEE7RunImplIRKS6_RKSt5tupleIJS8_EEJLm0EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEE #23 0x7f0cb2f353ac _ZN4base8internal7InvokerINS0_9BindStateIMN2cc20DelayBasedTimeSourceEFvvEJNS_7WeakPtrIS4_EEEEEFvvEE3RunEPNS0_13BindStateBaseE #24 0x7f0cb2d9044d _ZNKR4base8CallbackIFvvELNS_8internal8CopyModeE1ELNS2_10RepeatModeE1EE3RunEv #25 0x7f0cb2d8fe29 base::CancelableCallback<>::Forward() #26 0x7f0cb2d90107 _ZN4base8internal13FunctorTraitsIMN2cc28ScrollbarAnimationControllerEFvvEvE6InvokeIRKNS_7WeakPtrIS3_EEJEEEvS5_OT_DpOT0_ #27 0x7f0cb2d9005a _ZN4base8internal12InvokeHelperILb1EvE8MakeItSoIRKMNS_18CancelableCallbackIFvvEEEKFvvERKNS_7WeakPtrIS6_EEJEEEvOT_OT0_DpOT1_ #28 0x7f0cb2d8ffe2 _ZN4base8internal7InvokerINS0_9BindStateIMNS_18CancelableCallbackIFvvEEEKFvvEJNS_7WeakPtrIS5_EEEEES4_E7RunImplIRKS7_RKSt5tupleIJS9_EEJLm0EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEE #29 0x7f0cb2d8ff2c _ZN4base8internal7InvokerINS0_9BindStateIMNS_18CancelableCallbackIFvvEEEKFvvEJNS_7WeakPtrIS5_EEEEES4_E3RunEPNS0_13BindStateBaseE #30 0x7f0cbdde126e _ZNO4base8CallbackIFvvELNS_8internal8CopyModeE0ELNS2_10RepeatModeE0EE3RunEv #31 0x7f0cbdde0a61 base::debug::TaskAnnotator::RunTask() #32 0x7f0cbde68f1e base::MessageLoop::RunTask() #33 0x7f0cbde69184 base::MessageLoop::DeferOrRunPendingTask() #34 0x7f0cbde6970c base::MessageLoop::DoDelayedWork() #35 0x7f0cbde7ee68 base::MessagePumpGlib::Run() #36 0x7f0cbde68b02 base::MessageLoop::RunHandler() #37 0x7f0cbdf02a64 base::RunLoop::Run() #38 0x000004f3de76 content::RunThisRunLoop() #39 0x0000089f1d0e extensions::ResultCatcher::GetNextResult() #40 0x000001657c6c ExtensionApiTest::RunExtensionTestImpl() #41 0x000001657685 ExtensionApiTest::RunExtensionTest() #42 0x000000d8d146 extensions::ContentScriptApiTest_ContentScriptExtensionIframe_Test::RunTestOnMainThread() #43 0x000003db23d5 InProcessBrowserTest::RunTestOnMainThreadLoop() #44 0x000004eb9764 content::BrowserTestBase::ProxyRunTestOnMainThreadLoop() #45 0x00000093c845 _ZN4base8internal13FunctorTraitsIM25RenderViewContextMenuBaseFvvEvE6InvokeIP21RenderViewContextMenuJEEEvS4_OT_DpOT0_ #46 0x00000093c761 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKM25RenderViewContextMenuBaseFvvEJP21RenderViewContextMenuEEEvOT_DpOT0_ #47 0x000004eba6a7 _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserTestBaseEFvvEJNS0_17UnretainedWrapperIS4_EEEEEFvvEE7RunImplIRKS6_RKSt5tupleIJS8_EEJLm0EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEE #48 0x000004eba5ec _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserTestBaseEFvvEJNS0_17UnretainedWrapperIS4_EEEEEFvvEE3RunEPNS0_13BindStateBaseE #49 0x00000092405d _ZNKR4base8CallbackIFvvELNS_8internal8CopyModeE1ELNS2_10RepeatModeE1EE3RunEv #50 0x000003e5880e ChromeBrowserMainParts::PreMainMessageLoopRunImpl() #51 0x000003e57450 ChromeBrowserMainParts::PreMainMessageLoopRun() #52 0x000001e20bab chromeos::ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() #53 0x7f0cb55d2931 content::BrowserMainLoop::PreMainMessageLoopRun() #54 0x7f0cb48e4af5 _ZN4base8internal13FunctorTraitsIMN7content13URLLoaderImplEFvvEvE6InvokeIPS3_JEEEvS5_OT_DpOT0_ #55 0x7f0cb55dbae1 _ZN4base8internal12InvokeHelperILb0EiE8MakeItSoIRKMN7content15BrowserMainLoopEFivEJPS5_EEEiOT_DpOT0_ #56 0x7f0cb55dba87 _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserMainLoopEFivEJNS0_17UnretainedWrapperIS4_EEEEEFivEE7RunImplIRKS6_RKSt5tupleIJS8_EEJLm0EEEEiOT_OT0_NS_13IndexSequenceIJXspT1_EEEE #57 0x7f0cb55db9cc _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserMainLoopEFivEJNS0_17UnretainedWrapperIS4_EEEEEFivEE3RunEPNS0_13BindStateBaseE #58 0x7f0cb48cb4bd _ZNKR4base8CallbackIFvvELNS_8internal8CopyModeE1ELNS2_10RepeatModeE1EE3RunEv #59 0x7f0cb60e53cb content::StartupTaskRunner::RunAllTasksNow() #60 0x7f0cb55d0530 content::BrowserMainLoop::CreateStartupTasks() #61 0x7f0cb55ded17 content::BrowserMainRunnerImpl::Initialize() r8: 00007f0ca28149d0 r9: 00007fff97b1ff98 r10: 0000000000000008 r11: 0000000000000202 r12: 0000000000000002 r13: 00007fff97b28ea0 r14: 0000000000000000 r15: 0000000000000000 di: 000000000000266d si: 000000000000266d bp: 00007fff97b20278 bx: 00007fff97b201f8 dx: 0000000000000006 ax: 0000000000000000 cx: ffffffffffffffff sp: 00007fff97b1ffe8 ip: 00007f0ca248ac37 efl: 0000000000000202 cgf: 0000000000000033 erf: 0000000000000000 trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000 [end of stack trace] Original issue's description: > Use flat_set in SurfaceAggregator. > > The sets and maks are typically small or empty and created once. flat_set and > flat_map will have better performance for these workloads. > > See the bug for histograms of sizes. > > BUG= 712295 > CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel > > Review-Url: https://codereview.chromium.org/2823043002 > Cr-Commit-Position: refs/heads/master@{#465040} > Committed: https://chromium.googlesource.com/chromium/src/+/95286bcd87997785c90c4194d65a430d082bc784 TBR=jbauman@chromium.org,brettw@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG= 712295 Review-Url: https://codereview.chromium.org/2824953002 Cr-Commit-Position: refs/heads/master@{#465068} [modify] https://crrev.com/96a94ba94eb9a691ead21e134e28bbe6cd47580a/cc/surfaces/surface_aggregator.cc [modify] https://crrev.com/96a94ba94eb9a691ead21e134e28bbe6cd47580a/cc/surfaces/surface_aggregator.h
,
Apr 18 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/1ac5a973f47b2052df313bab17da120fae22190e commit 1ac5a973f47b2052df313bab17da120fae22190e Author: brettw <brettw@chromium.org> Date: Tue Apr 18 19:22:10 2017 Use flat_set in SurfaceAggregator. The sets and maps are typically small or empty and created once. flat_set and flat_map will have better performance for these workloads. See the bug for histograms of sizes. Reland of https://codereview.chromium.org/2823043002 with fix. BUG= 712295 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel TBR=jbauman@chromium.org Review-Url: https://codereview.chromium.org/2821353002 Cr-Commit-Position: refs/heads/master@{#465324} [modify] https://crrev.com/1ac5a973f47b2052df313bab17da120fae22190e/cc/surfaces/surface_aggregator.cc [modify] https://crrev.com/1ac5a973f47b2052df313bab17da120fae22190e/cc/surfaces/surface_aggregator.h
,
Apr 18 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/1166f4428a18a1cacdeb9e4c310ee7b96cda63b6 commit 1166f4428a18a1cacdeb9e4c310ee7b96cda63b6 Author: ojan <ojan@chromium.org> Date: Tue Apr 18 23:03:51 2017 Revert of Use flat_set in SurfaceAggregator. (patchset #3 id:40001 of https://codereview.chromium.org/2821353002/ ) Reason for revert: Broke cc_unittests SurfaceAggregatorWithResourcesTest.SecureOutputTexture. https://build.chromium.org/p/chromium.win/builders/Win7%20Tests%20%28dbg%29%281%29/builds/59212 https://build.chromium.org/p/chromium.linux/builders/Linux%20Tests%20%28dbg%29%281%29/builds/62502 Original issue's description: > Use flat_set in SurfaceAggregator. > > The sets and maps are typically small or empty and created once. flat_set and > flat_map will have better performance for these workloads. > > See the bug for histograms of sizes. > > Reland of https://codereview.chromium.org/2823043002 with fix. > > BUG= 712295 > CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel > TBR=jbauman@chromium.org > > Review-Url: https://codereview.chromium.org/2821353002 > Cr-Commit-Position: refs/heads/master@{#465324} > Committed: https://chromium.googlesource.com/chromium/src/+/1ac5a973f47b2052df313bab17da120fae22190e TBR=jbauman@chromium.org,danakj@chromium.org,brettw@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG= 712295 Review-Url: https://codereview.chromium.org/2826823002 Cr-Commit-Position: refs/heads/master@{#465413} [modify] https://crrev.com/1166f4428a18a1cacdeb9e4c310ee7b96cda63b6/cc/surfaces/surface_aggregator.cc [modify] https://crrev.com/1166f4428a18a1cacdeb9e4c310ee7b96cda63b6/cc/surfaces/surface_aggregator.h
,
Apr 19 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/8dd06bbc3fd157da89a7ed820b306d39ebea64e2 commit 8dd06bbc3fd157da89a7ed820b306d39ebea64e2 Author: brettw <brettw@chromium.org> Date: Wed Apr 19 18:51:51 2017 Use flat_set in SurfaceAggregator. The sets and maps are typically small or empty and created once. flat_set and flat_map will have better performance for these workloads. See the bug for histograms of sizes. Reland of https://codereview.chromium.org/2821353002 with fix. Reland of https://codereview.chromium.org/2823043002 with fix. BUG= 712295 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel TBR=jbauman@chromium.org Review-Url: https://codereview.chromium.org/2831663002 Cr-Commit-Position: refs/heads/master@{#465681} [modify] https://crrev.com/8dd06bbc3fd157da89a7ed820b306d39ebea64e2/cc/surfaces/surface_aggregator.cc [modify] https://crrev.com/8dd06bbc3fd157da89a7ed820b306d39ebea64e2/cc/surfaces/surface_aggregator.h |
||||||
►
Sign in to add a comment |
||||||
Comment 1 by brettw@chromium.org
, Apr 17 2017