Closed Bug 655638 Opened 13 years ago Closed 13 years ago

Negative values for "heap-used/other" in about:memory due to overlap between image and canvas memory reporters

Categories

(Toolkit :: General, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: n.nethercote, Assigned: n.nethercote)

Details

Attachments

(1 file)

While running www.thewildernessdowntown.com I saw this about:memory?verbose report:

Used Heap Memory
318,096,000 B (100.0%) -- heap-used
├──143,534,760 B (45.12%) -- content
│  └──143,534,760 B (45.12%) -- canvas
│     └──143,534,760 B (45.12%) -- 2d-pixel-bytes
├──117,853,666 B (37.05%) -- images
│  ├──117,632,046 B (36.98%) -- content
│  │  ├──117,632,046 B (36.98%) -- used
│  │  │  ├──109,251,088 B (34.35%) -- uncompressed
│  │  │  └────8,380,958 B (02.63%) -- raw
│  │  └────────────0 B (00.00%) -- unused
│  │               ├──0 B (00.00%) -- raw
│  │               └──0 B (00.00%) -- uncompressed
│  └──────221,620 B (00.07%) -- chrome
│         ├──221,620 B (00.07%) -- used
│         │  ├──221,620 B (00.07%) -- uncompressed
│         │  └────────0 B (00.00%) -- raw
│         │  ├──221,620 B (00.07%) -- uncompressed
│         │  └────────0 B (00.00%) -- raw
│         └────────0 B (00.00%) -- unused
│                  ├──0 B (00.00%) -- raw
│                  └──0 B (00.00%) -- uncompressed
├───82,941,384 B (26.07%) -- js
│   ├──80,740,352 B (25.38%) -- gc-heap
│   ├───1,188,336 B (00.37%) -- tjit-data
│   │   └──1,188,336 B (00.37%) -- allocators
│   │      ├────888,000 B (00.28%) -- reserve
│   │      └────300,336 B (00.09%) -- main
│   └───1,012,696 B (00.32%) -- mjit-data
├────3,208,944 B (01.01%) -- storage
│    └──3,208,944 B (01.01%) -- sqlite
│       ├──2,150,264 B (00.68%) -- places.sqlite
│       │  ├──1,884,568 B (00.59%) -- cache-used
│       │  ├────188,104 B (00.06%) -- stmt-used
│       │  └─────77,592 B (00.02%) -- schema-used
│       ├────610,576 B (00.19%) -- other
│       ├────214,304 B (00.07%) -- urlclassifier3.sqlite
│       │    ├──109,120 B (00.03%) -- cache-used
│       │    ├──100,944 B (00.03%) -- stmt-used
│       │    └────4,240 B (00.00%) -- schema-used
│       ├────146,992 B (00.05%) -- cookies.sqlite
│       │    ├──131,520 B (00.04%) -- cache-used
│       │    ├───12,528 B (00.00%) -- stmt-used
│       │    └────2,944 B (00.00%) -- schema-used
│       ├─────29,720 B (00.01%) -- formhistory.sqlite
│       │     ├──22,736 B (00.01%) -- stmt-used
│       │     ├───4,328 B (00.00%) -- cache-used
│       │     └───2,656 B (00.00%) -- schema-used
│       ├─────21,808 B (00.01%) -- content-prefs.sqlite
│       │     └───2,656 B (00.00%) -- schema-used
│       ├─────21,808 B (00.01%) -- content-prefs.sqlite
│       │     ├───9,632 B (00.00%) -- stmt-used
│       │     ├───8,152 B (00.00%) -- cache-used
│       │     └───4,024 B (00.00%) -- schema-used
│       ├─────13,848 B (00.00%) -- downloads.sqlite
│       │     ├───6,704 B (00.00%) -- stmt-used
│       │     ├───4,320 B (00.00%) -- cache-used
│       │     └───2,824 B (00.00%) -- schema-used
│       ├─────13,160 B (00.00%) -- permissions.sqlite
│       │     ├───6,776 B (00.00%) -- stmt-used
│       │     ├───4,328 B (00.00%) -- cache-used
│       │     └───2,056 B (00.00%) -- schema-used
│       └──────8,272 B (00.00%) -- search.sqlite
│              ├──4,312 B (00.00%) -- cache-used
│              ├──2,000 B (00.00%) -- schema-used
│              └──1,960 B (00.00%) -- stmt-used
├────1,236,113 B (00.39%) -- layout
│    ├──1,236,113 B (00.39%) -- all
│    └──────────0 B (00.00%) -- bidi
├──────177,276 B (00.06%) -- gfx
│      └──177,276 B (00.06%) -- surface
│         └──177,276 B (00.06%) -- image
└──-30,856,143 B (-9.70%) -- other

"heap-used/other" is negative, which indicates that some of the heap-used reporters are overlapping.  I bet that "content/canvas/2d-pixel-bytes" and "images/content/used", the two biggest numbers here, are the culprits.
I talked with Bas about this on IRC.  He thinks that "images/content/used" and "content/canvas/2d-pixel-bytes" can overlap.  He also thinks that "content/canvas/2d-pixel-bytes" can be in VRAM, on Windows at least.  Both of those points sound like arguments for moving content/canvas/2d-pixel-bytes out of the "Used Heap" tree into the "Other Measurements" list.
Attached patch patchSplinter Review
Trivial patch.
Assignee: nobody → nnethercote
Attachment #531237 - Flags: review?(bas.schouten)
Comment on attachment 531237 [details] [diff] [review]
patch

Review of attachment 531237 [details] [diff] [review]:
-----------------------------------------------------------------

Looks good in general, only a small comment.

::: content/canvas/src/nsCanvasRenderingContext2D.cpp
@@ +173,5 @@
>  }
>  
> +// This isn't "heap-used/content/canvas/2d-pixel-bytes" because it overlaps
> +// with "heap-used/images/content/used", and so has to go in the "Other
> +// Measurements" section of about:memory.  See bug 655638 for details.

Are we sure that's actually what it overlaps with? It can also simply not be on the heap for example (but in VRAM), I'd rather say something like: "This isn't "heap-used/content/canvas/2d-pixel-bytes" because the pixels of a canvas do not necessarily exist on the heap. And if they do, should be tracked by underlying surface implementations. See bug 655638 for details."
Attachment #531237 - Flags: review?(bas.schouten) → review+
(In reply to comment #3)
>
> "This
> isn't "heap-used/content/canvas/2d-pixel-bytes" because the pixels of a
> canvas do not necessarily exist on the heap. And if they do, should be
> tracked by underlying surface implementations. See bug 655638 for details."

I'll update, thanks!
http://hg.mozilla.org/mozilla-central/rev/5ba52131c1a2
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: