Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013

Google Chrome DevTools: Rendering & Memory profiling on Open Academy 2013

Google Chrome DevTools presentation about Memory and Rendering profiling on Open Academy 2013 (05.23).

Mate Nadasdi

May 23, 2013
Tweet

More Decks by Mate Nadasdi

Other Decks in Technology

Transcript

  1. • Javascript is an interpreted language • HTML, CSS debugging

    have to happen in the browser • Logging, debugging network requests is essential • Source and the final output could be totally different • Performance optimization is becoming increasingly important, especially on mobile
  2. Google is leading in new technologies Native implementation and really

    fast support Canary build deliver new features in really short intervals Deep configuration possibilites Early experimental access Rendering / Memory Profiling tools Why Google Chrome?
  3. Red - Yellow - Blue? Chrome channels • Stable (Releases

    in every 6 weeks) • Beta (1 month before stable, weekly releases) • Dev (twice weekly) • Canary (daily) Chromium
  4. Parsing (HTML, XML, CSS, Javascript) Layout Text and graphics rendering

    Image Decoding GPU interaction Network access Hardware acceleration Webkit / Blink rendering engine Image Source: HTML5Rocks
  5. From source to display - The ordinary way HTML HTML

    Parser Attachment CSS Parser Stylesheets Layout Shared bitmap DOM tree CSSOM tree Render Object tree Render Layer tree n..1
  6. Layout (Reflow) & Repaint Layout (reflow): ! Parts of the

    render tree needs to be revalidated and node dimensions should be recalculated. ! ! Repaint: ! Some part of the screen needs to be updated because of a reflow, node geometric change or style change.
  7. Possible reflows & repaints • DOM actions (Add, Remove, Update

    DOM nodes) • Hide/show with display: none (reflow & repaint) • Hide/show with visibility: hidden (repaint only because of no geometric change) • Adding stylesheet dynamically • scrolling, resizing the window • DOM queries can cause a reflow too • offsetTop/Left/Right/Height • scrollTop/Left/Right/Height • clientTop/Left/Right/Height • getComputedStyle !
  8. Tips to minimize reflow & repaint • Try to minimize

    layout cost with smaller subtree modification • Detach DOM nodes before huge manipulation • Do not change styles one by one (use classes instead) • Group DOM read and write actions to let the browser optimize reflows for you (DOM queries flush the browser’s queue of changes) ! • Cache queried values, do not query them in every case you use it !
  9. Compositing, You Are Welcome! • There are more GraphicContexts •

    New tree in our forest, Graphic Layer tree • Composited RenderLayers get their own backing surface • Upload painted bitmaps to the GPU as textures • 256x256 tiles • Different thread for compositing • Much cheaper then paint
  10. Frames & Jank • 60 Hz = We have got

    16.66 ms only! ( 60 Hz = 1 / ~0,016) • 60FPS is important, because 60Hz is average refresh rate of devices • Jank: every time you can’t create a frame when your screen refreshes • vSync - generating new frames only between screen refreshes • JavaScript timers fails because of inaccuracy and different frame rates • requestAnimationFrame is a good solution 20ms 20ms 20ms 20ms 20ms 20ms 20ms Display refresh at 60 hz: Our frame creation:
  11. DEMO! Rock with timeline panel! Tips: • Show paint rectangles:

    Use it to show expensive paints • Show composited layer borders: Check your GPU compositing layers easily • Enable continuous page repainting: Easy to find the most expensive layers • chrome://tracing/: Detailed tracing system to track core functionalities • Use JavaScript CPU profile with Flame chart to diagnose your yellow pieces.
  12. Javascript memory basics Root object • Top of the memory

    management system • We cannot manipulate • References global variables Object variable • Can reference other variables Scalar variable • number, boolean, etc
  13. Object sizes Shallow size • Memory held directly by the

    object • It can be significant for arrays and strings Retained size • Indirect memory hold • A size what will be freed if the object will be terminated • For primitive types retained size equals shallow size
  14. Object’s retaining tree Roo A G C D B H

    D object’s retaining tree is a graph, where paths are retaining paths from GC root to A.
  15. Garbage Garbage: Variables wich are unreachable from the GC root

    node ! Garbage collection: Finds all garbages and frees it’s memory to the system ! Leak: Object that still has retaining path accidently
  16. Possible leaks • Closures • Deleting DOM nodes without removing

    event handlers • DOM could hold event listeners to objects wich are inactive already • Cycles: two objects reference to each other when they retain each other
  17. DevTools workflow tips 1. Search for possible memory leaks with

    timeline panel 2. Use heap snapshots to capture object graph 3. Use all four views of the snapshot panel: • Summary: An overview of our heap grouped by constructor name • Comparison: Compare two snapshots • Containment: Structured view of object graph • Dominators: Find the most dominant points of the heap 4. Use the new Object Allocation Tracker in DevTools experiments “Memory Lane with Gmail” talk about this new tool on Google IO 2013 https://developers.google.com/events/io/sessions/325547004
  18. DEMO! Tips: • Check counters during your interaction on the

    examined page • Use GC force button to see how it impacts on your memory • Use it in incognito window, because extension allocated memory will be listed too • Ignore: • line in parentheses • lines in light gray • GC collects garbage before snapshot execution
  19. Use Google Canary as it has all the features I

    have shown and more including lots of profiling experiments https://www.google.com/intl/en/chrome/browser/canary.html