Closed
Bug 1271022
Opened 9 years ago
Closed 9 years ago
add Vector::reallocToFit
Categories
(Core :: MFBT, defect)
Core
MFBT
Tracking
()
RESOLVED
FIXED
mozilla49
| Tracking | Status | |
|---|---|---|
| firefox49 | --- | fixed |
People
(Reporter: luke, Assigned: luke)
Details
Attachments
(2 files)
|
2.36 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
|
4.67 KB,
patch
|
bbouvier
:
review+
|
Details | Diff | Splinter Review |
I noticed, while measuring memory use on the wasm demo that several MB were being waste on the excess capacity of Vectors living in the wasm::Module. The classic C++ trick to clear capacity is copy+swap which one can write already in terms of Vector, but I'd like to avoid the copy, so I added a Vector::reallocToFit, which is only defined when IsPod<T> is true, and it uses realloc.
With these patches, I can see savings of 4.2MB (out of 14.0MB) in class(WasmModuleObject)/objects/malloc-heap/misc on http://webassembly.github.io/demo.
| Assignee | ||
Comment 1•9 years ago
|
||
Attachment #8749931 -
Flags: review?(n.nethercote)
| Assignee | ||
Comment 2•9 years ago
|
||
Attachment #8749932 -
Flags: review?(bbouvier)
Comment 3•9 years ago
|
||
Comment on attachment 8749931 [details] [diff] [review]
add-realloc-to-fit
Review of attachment 8749931 [details] [diff] [review]:
-----------------------------------------------------------------
I'm wondering about the name. Should it have "pod" in it to indicate the restriction? Would "resize" be better than "realloc". So... maybe "podResizeToFit"? Not sure.
::: mfbt/Vector.h
@@ +233,5 @@
> + static inline void
> + reallocToFit(Vector<T, N, AP>& aV)
> + {
> + if (aV.usingInlineStorage() || aV.mLength == aV.mCapacity)
> + return;
Nit: MFBT style is Gecko style which braces all if-blocks.
@@ +236,5 @@
> + if (aV.usingInlineStorage() || aV.mLength == aV.mCapacity)
> + return;
> + T* newbuf = aV.template pod_realloc<T>(aV.mBegin, aV.mCapacity, aV.mLength);
> + if (MOZ_UNLIKELY(!newbuf))
> + return;
Ditto.
Attachment #8749931 -
Flags: review?(n.nethercote) → review+
Comment 4•9 years ago
|
||
Comment on attachment 8749931 [details] [diff] [review]
add-realloc-to-fit
Review of attachment 8749931 [details] [diff] [review]:
-----------------------------------------------------------------
::: mfbt/Vector.h
@@ +573,5 @@
>
> /**
> + * Calls the AllocPolicy's pod_realloc to release excess capacity. Since
> + * realloc is only safe on PODs, this method fails to compile if IsPod<T>
> + * is true.
nit: "if IsPod<T> is false" or "unless IsPod<T> is true"
Comment 5•9 years ago
|
||
Comment on attachment 8749932 [details] [diff] [review]
use-realloc-to-fit
Review of attachment 8749932 [details] [diff] [review]:
-----------------------------------------------------------------
Nice savings!
Attachment #8749932 -
Flags: review?(bbouvier) → review+
| Assignee | ||
Comment 6•9 years ago
|
||
(In reply to Nicholas Nethercote [:njn] from comment #3)
Yes, that's a better name. I had been thinking 'realloc' would imply PODness, but that's too subtle.
(In reply to Benjamin Bouvier [:bbouvier] from comment #4)
Oops, good catch!
Comment 8•9 years ago
|
||
| bugherder | ||
https://hg.mozilla.org/mozilla-central/rev/29e3f72069b4
https://hg.mozilla.org/mozilla-central/rev/6f2ac4c6db27
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla49
You need to log in
before you can comment on or make changes to this bug.
Description
•