Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Unified Diff: components/tracing/docs/heap_profiler.md

Issue 2494063002: Move memory docs to docs/memory-infra (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/tracing/docs/heap_profiler.md
diff --git a/components/tracing/docs/heap_profiler.md b/components/tracing/docs/heap_profiler.md
index 18d1b44bd72a5e7c0d0d9db33c06c4125aaa3eed..e432b2764e8ee846c0cdcf687e2f4d348b642b02 100644
--- a/components/tracing/docs/heap_profiler.md
+++ b/components/tracing/docs/heap_profiler.md
@@ -1,168 +1,2 @@
-# Heap Profiling with MemoryInfra
+This document has moved to [//docs/memory-infra/heap_profiler.md](/docs/memory-infra/heap_profiler.md).
-As of Chrome 48, MemoryInfra supports heap profiling. The core principle is
-a solution that JustWorks™ on all platforms without patching or rebuilding,
-intergrated with the chrome://tracing ecosystem.
-
-[TOC]
-
-## How to Use
-
- 1. Start Chrome with the `--enable-heap-profiling` switch. This will make
- Chrome keep track of all allocations.
-
- 2. Grab a [MemoryInfra][memory-infra] trace. For best results, start tracing
- first, and _then_ open a new tab that you want to trace. Furthermore,
- enabling more categories (besides memory-infra) will yield more detailed
- information in the heap profiler backtraces.
-
- 3. When the trace has been collected, select a heavy memory dump indicated by
- a purple ![M][m-purple] dot. Heap dumps are only included in heavy memory
- dumps.
-
- 4. In the analysis view, cells marked with a triple bar icon (☰) contain heap
- dumps. Select such a cell.
-
- ![Cells containing a heap dump][cells-heap-dump]
-
- 5. Scroll down all the way to _Heap Details_.
-
- 6. Pinpoint the memory bug and live happily ever after.
-
-[memory-infra]: memory_infra.md
-[m-purple]: https://storage.googleapis.com/chromium-docs.appspot.com/d7bdf4d16204c293688be2e5a0bcb2bf463dbbc3
-[cells-heap-dump]: https://storage.googleapis.com/chromium-docs.appspot.com/a24d80d6a08da088e2e9c8b2b64daa215be4dacb
-
-### Native stack traces
-
-By default heap profiling collects pseudo allocation traces, which are based
-on trace events. I.e. frames in allocation traces correspond to trace events
-that were active at the time of allocations, and are not real function names.
-However, you can build a special Linux / Android build that will collect
-real C/C++ stack traces.
-
- 1. Build with the following GN flags:
-
- Linux
-
- enable_profiling = true
-
-
- Android
-
- arm_use_thumb = false
- enable_profiling = true
-
- 2. Start Chrome with `--enable-heap-profiling=native` switch (notice
- `=native` part).
-
- On Android use the command line tool before starting the app:
-
- build/android/adb_chrome_public_command_line --enable-heap-profiling=native
-
- (run the tool with an empty argument `''` to clear the command line)
-
- 3. Grab a [MemoryInfra][memory-infra] trace. You don't need any other
- categories besides `memory-infra`.
-
- 4. Save the grabbed trace file. This step is needed because freshly
- taken trace file contains raw addresses (which look like `pc:dcf5dbf8`)
- instead of function names, and needs to be symbolized.
-
- 4. Symbolize the trace file. During symbolization addresses are resolved to
- the corresponding function names and trace file is rewritten (but a backup
- is saved with `.BACKUP` extension).
-
- Linux
-
- third_party/catapult/tracing/bin/symbolize_trace <trace file>
-
- Android
-
- third_party/catapult/tracing/bin/symbolize_trace --output-directory out/Release <trace file>
-
- (note `--output-directory` and make sure it's right for your setup)
-
- 5. Load the trace file in `chrome://tracing`. Locate a purple ![M][m-purple]
- dot, and continue from step *3* from the instructions above. Native stack
- traces will be shown in the _Heap Details_ pane.
-
-## Heap Details
-
-The heap details view contains a tree that represents the heap. The size of the
-root node corresponds to the selected allocator cell.
-
-*** aside
-The size value in the heap details view will not match the value in the selected
-analysis view cell exactly. There are three reasons for this. First, the heap
-profiler reports the memory that _the program requested_, whereas the allocator
-reports the memory that it _actually allocated_ plus its own bookkeeping
-overhead. Second, allocations that happen early --- before Chrome knows that
-heap profiling is enabled --- are not captured by the heap profiler, but they
-are reported by the allocator. Third, tracing overhead is not discounted by the
-heap profiler.
-***
-
-The heap can be broken down in two ways: by _backtrace_ (marked with an ƒ), and
-by _type_ (marked with a Ⓣ). When tracing is enabled, Chrome records trace
-events, most of which appear in the flame chart in timeline view. At every
-point in time these trace events form a pseudo stack, and a vertical slice
-through the flame chart is like a backtrace. This corresponds to the ƒ nodes in
-the heap details view. Hence enabling more tracing categories will give a more
-detailed breakdown of the heap.
-
-The other way to break down the heap is by object type. At the moment this is
-only supported for PartitionAlloc.
-
-*** aside
-In official builds, only the most common type names are included due to binary
-size concerns. Development builds have full type information.
-***
-
-To keep the trace log small, uninteresting information is omitted from heap
-dumps. The long tail of small nodes is not dumped, but grouped in an `<other>`
-node instead. Note that altough these small nodes are insignificant on their
-own, together they can be responsible for a significant portion of the heap. The
-`<other>` node is large in that case.
-
-## Example
-
-In the trace below, `ParseAuthorStyleSheet` is called at some point.
-
-![ParseAuthorStyleSheet pseudo stack][pseudo-stack]
-
-The pseudo stack of trace events corresponds to the tree of ƒ nodes below. Of
-the 23.5 MiB of memory allocated with PartitionAlloc, 1.9 MiB was allocated
-inside `ParseAuthorStyleSheet`, either directly, or at a deeper level (like
-`CSSParserImpl::parseStyleSheet`).
-
-![Memory Allocated in ParseAuthorStyleSheet][break-down-by-backtrace]
-
-By expanding `ParseAuthorStyleSheet`, we can see which types were allocated
-there. Of the 1.9 MiB, 371 KiB was spent on `ImmutableStylePropertySet`s, and
-238 KiB was spent on `StringImpl`s.
-
-![ParseAuthorStyleSheet broken down by type][break-down-by-type]
-
-It is also possible to break down by type first, and then by backtrace. Below
-we see that of the 23.5 MiB allocated with PartitionAlloc, 1 MiB is spent on
-`Node`s, and about half of the memory spent on nodes was allocated in
-`HTMLDocumentParser`.
-
-![The PartitionAlloc heap broken down by type first and then by backtrace][type-then-backtrace]
-
-Heap dump diffs are fully supported by trace viewer. Select a heavy memory dump
-(a purple dot), then with the control key select a heavy memory dump earlier in
-time. Below is a diff of theverge.com before and in the middle of loading ads.
-We can see that 4 MiB were allocated when parsing the documents in all those
-iframes, almost a megabyte of which was due to JavaScript. (Note that this is
-memory allocated by PartitionAlloc alone, the total renderer memory increase was
-around 72 MiB.)
-
-![Diff of The Verge before and after loading ads][diff]
-
-[pseudo-stack]: https://storage.googleapis.com/chromium-docs.appspot.com/058e50350836f55724e100d4dbbddf4b9803f550
-[break-down-by-backtrace]: https://storage.googleapis.com/chromium-docs.appspot.com/ec61c5f15705f5bcf3ca83a155ed647a0538bbe1
-[break-down-by-type]: https://storage.googleapis.com/chromium-docs.appspot.com/2236e61021922c0813908c6745136953fa20a37b
-[type-then-backtrace]: https://storage.googleapis.com/chromium-docs.appspot.com/c5367dde11476bdbf2d5a1c51674148915573d11
-[diff]: https://storage.googleapis.com/chromium-docs.appspot.com/802141906869cd533bb613da5f91bd0b071ceb24
« no previous file with comments | « components/tracing/docs/adding_memory_infra_tracing.md ('k') | components/tracing/docs/heap_profiler_internals.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698