Chromium Blog

Chromium Blog

News and developments from the open source browser project

Don’t Copy That Surface

Monday, April 5, 2021

It doesn’t look like much, but I recognized immediately that the 124 samples in KiPageFault were worth investigating. Most of the CPU-intensive work in this trace was important and unavoidable work but I had a hunch that these samples represented avoidable work - something that I could fix. And, even though they represented just 0.75% of the samples I suspected that they indicated a somewhat greater cost.

I recognized their importance immediately because this is something that I have seen before.
hidden costs of memory allocation in a 2014 blog post. The basic memory architecture of Windows hasn’t changed since then so the hidden costs remain about the same.

In addition to CPU samples my ETW trace contained call stacks for every call to VirtualAlloc. This WPA screenshot shows a 10-second period where the OnSample function does 298 allocations that are each 1.320 MB, roughly 30 per second:

backported to M84.

You’d have to be paying very close attention to see the difference - spread across a Chrome process and the system process - but I hope that this helped some computers run a bit cooler and last longer on their batteries. And, while this inefficiency was found by profiling Google Meet, the improvement actually benefits any product that uses the webcam inside Chrome (and other Chromium-based browsers).

Verification

After the fix landed I compared two 10-second ETW traces from Chrome Canary before and after the change, each taken with no other programs running except a single Chrome tab running the Google Meet pre-meeting page. In both cases I looked at a 10-second period of time in the profiler. This showed:

CPU time in OnSample:
Before: 458 ms (432 ms of which were in Lock/Unlock/KiPageFault)
After: 27 ms


Allocations:
Before: 30 allocations per second of 1.32 MB (one per frame, running at 30 fps - a higher framerate would mean more allocations), totalling 396 MB over 10 seconds
After: 0 allocations


CPU time in the System process's MiZeroPageThread:
Before: 36 ms
After: 0 ms

These measurements showed - in three different ways - that the performance problem was fixed. The memory copying in OnSample was gone, the repeated allocations were gone, and the system process was doing less work. Mission accomplished, bug closed.

Share on Twitter Share on Facebook
Google
Labels: performance , the fast and the curious
  

Labels


  • $200K 1
  • 10th birthday 4
  • abusive ads 1
  • abusive notifications 2
  • accessibility 3
  • ad blockers 1
  • ad blocking 2
  • advanced capabilities 1
  • android 2
  • anti abuse 1
  • anti-deception 1
  • background periodic sync 1
  • badging 1
  • benchmarks 1
  • beta 83
  • better ads standards 1
  • billing 1
  • birthday 4
  • blink 2
  • browser 2
  • browser interoperability 1
  • bundles 1
  • capabilities 6
  • capable web 1
  • cds 1
  • cds18 2
  • cds2018 1
  • chrome 35
  • chrome 81 1
  • chrome 83 2
  • chrome 84 2
  • chrome ads 1
  • chrome apps 5
  • Chrome dev 1
  • chrome dev summit 1
  • chrome dev summit 2018 1
  • chrome dev summit 2019 1
  • chrome developer 1
  • Chrome Developer Center 1
  • chrome developer summit 1
  • chrome devtools 1
  • Chrome extension 1
  • chrome extensions 3
  • Chrome Frame 1
  • Chrome lite 1
  • Chrome on Android 2
  • chrome on ios 1
  • Chrome on Mac 1
  • Chrome OS 1
  • chrome privacy 4
  • chrome releases 1
  • chrome security 10
  • chrome web store 32
  • chromedevtools 1
  • chromeframe 3
  • chromeos 4
  • chromeos.dev 1
  • chromium 9
  • cloud print 1
  • coalition 1
  • coalition for better ads 1
  • contact picker 1
  • content indexing 1
  • cookies 1
  • core web vitals 2
  • csrf 1
  • css 1
  • cumulative layout shift 1
  • custom tabs 1
  • dart 8
  • dashboard 1
  • Data Saver 3
  • Data saver desktop extension 1
  • day 2 1
  • deceptive installation 1
  • declarative net request api 1
  • design 2
  • developer dashboard 1
  • Developer Program Policy 2
  • developer website 1
  • devtools 13
  • digital event 1
  • discoverability 1
  • DNS-over-HTTPS 4
  • DoH 4
  • emoji 1
  • emscriptem 1
  • enterprise 1
  • extensions 27
  • Fast badging 1
  • faster web 1
  • features 1
  • feedback 2
  • field data 1
  • first input delay 1
  • Follow 1
  • fonts 1
  • form controls 1
  • frameworks 1
  • fugu 2
  • fund 1
  • funding 1
  • gdd 1
  • google earth 1
  • google event 1
  • google io 2019 1
  • google web developer 1
  • googlechrome 12
  • harmful ads 1
  • html5 11
  • HTTP/3 1
  • HTTPS 4
  • iframes 1
  • images 1
  • incognito 1
  • insecure forms 1
  • intent to explain 1
  • ios 1
  • ios Chrome 1
  • issue tracker 3
  • jank 1
  • javascript 5
  • lab data 1
  • labelling 1
  • largest contentful paint 1
  • launch 1
  • lazy-loading 1
  • lighthouse 2
  • linux 2
  • Lite Mode 2
  • Lite pages 1
  • loading interventions 1
  • loading optimizations 1
  • lock icon 1
  • long-tail 1
  • mac 1
  • manifest v3 2
  • metrics 2
  • microsoft edge 1
  • mixed forms 1
  • mobile 2
  • na 1
  • native client 8
  • native file system 1
  • New Features 5
  • notifications 1
  • octane 1
  • open web 4
  • origin trials 2
  • pagespeed insights 1
  • pagespeedinsights 1
  • passwords 1
  • payment handler 1
  • payment request 1
  • payments 2
  • performance 20
  • performance tools 1
  • permission UI 1
  • permissions 1
  • play store 1
  • portals 3
  • prefetching 1
  • privacy 2
  • privacy sandbox 4
  • private prefetch proxy 1
  • profile guided optimization 1
  • progressive web apps 2
  • Project Strobe 1
  • protection 1
  • pwa 1
  • QUIC 1
  • quieter permissions 1
  • releases 3
  • removals 1
  • rlz 1
  • root program 1
  • safe browsing 2
  • Secure DNS 2
  • security 36
  • site isolation 1
  • slow loading 1
  • sms receiver 1
  • spam policy 1
  • spdy 2
  • spectre 1
  • speed 4
  • ssl 2
  • store listing 1
  • strobe 2
  • subscription pages 1
  • suspicious site reporter extension 1
  • TCP 1
  • the fast and the curious 26
  • TLS 1
  • tools 1
  • tracing 1
  • transparency 1
  • trusted web activities 1
  • twa 2
  • user agent string 1
  • user data policy 1
  • v8 6
  • video 2
  • wasm 1
  • web 1
  • web apps 1
  • web assembly 2
  • web developers 1
  • web intents 1
  • web packaging 1
  • web payments 1
  • web platform 1
  • web request api 1
  • web vitals 1
  • web.dev 1
  • web.dev live 1
  • webapi 1
  • webassembly 1
  • webaudio 3
  • webgl 7
  • webkit 5
  • WebM 1
  • webmaster 1
  • webp 5
  • webrtc 6
  • websockets 5
  • webtiming 1
  • writable-files 1
  • yerba beuna center for the arts 1


Archive


  •     2025
    • Oct
    • Jul
    • Jun
    • May
    • Jan
  •     2024
    • Dec
    • Aug
    • Jun
    • May
    • Apr
    • Mar
    • Feb
  •     2023
    • Nov
    • Oct
    • Sep
    • Aug
    • Jun
    • May
    • Apr
    • Feb
  •     2022
    • Dec
    • Sep
    • Aug
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2021
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2020
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2019
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2018
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2017
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2016
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2015
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2014
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2013
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2012
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2011
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2010
    • Dec
    • Nov
    • Oct
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2009
    • Dec
    • Nov
    • Sep
    • Aug
    • Jul
    • Jun
    • May
    • Apr
    • Mar
    • Feb
    • Jan
  •     2008
    • Dec
    • Nov
    • Oct
    • Sep

Feed

Give us feedback in our Product Forums.
  • Google
  • Privacy
  • Terms

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant