Граф коммитов

2818 Коммитов

Автор SHA1 Сообщение Дата
Masatoshi Kimura f143125cc2 Bug 1326520 - Rename nsIURI.path to pathQueryRef. r=valentin.gosu
MozReview-Commit-ID: DqJdTGopR9G

--HG--
extra : rebase_source : e8c9eb03468c075b79013b6e0bd8b367229c24cd
2017-07-29 20:50:21 +09:00
Andrew Osmond 9bc359ef2c Bug 1385409 - Ignore ICO resource entries which contain little or no data. r=tnikkel 2017-08-01 07:21:14 -04:00
Andrew Osmond 9ea902f3c5 Bug 1383404 - Part 4. imgTools::DecodeImage should set the source size hint to optimize the allocation. r=tnikkel 2017-08-01 06:59:12 -04:00
Andrew Osmond af89f9b9b6 Bug 1383404 - Part 3. SourceBuffer::mChunks should be an AutoTArray instead of FallibleTArray. r=tnikkel
We should use AutoTArray instead because telemetry shows that the vast
majority of images loaded (95%+) contain only a single chunk when
decoding finishes. Even if part 2 of this bug increases the number of
images loaded with multiple chunks, we still call SourceBuffer::Compact
after the decode is complete, which typically will reduce the number of
chunks to 1 (unless memory is very low and we fail to consolidate the
chunks). Thus it should be rare to contain more than 1 chunk on
anything but a temporary basis, and we can easily save the malloc
overhead.

Note that SourceBuffer::AppendChunk still uses the fallible variant of
nsTArray::AppendElement.
2017-08-01 06:59:11 -04:00
Andrew Osmond f072d8f9e8 Bug 1383404 - Part 2. When SourceBuffer::ExpectLength creates the initial buffer, it should not round up. r=tnikkel
Currently SourceBuffer::ExpectLength will allocate a buffer which is a
multiple of MIN_CHUNK_CAPACITY (4096) bytes, no matter what the expected
size is. While it is true that HTTP servers can lie, and that we need to
handle that for legacy purposes, it is more likely the HTTP servers are
telling the truth when it comes to the content length. Additionally
images sourced from other locations, such as the file system or data
URIs, are always going to have the correct size information (barring a
bug elsewhere in the file system or our code). We should be able to
trust the size given as a good first guess.

While overallocating in general is a waste of memory,
SourceBuffer::Compact causes a far worse problem. After we have written
all of the data, and there are no active readers, we attempt to shrink
the allocated buffer(s) into a single contiguous chunk of the exact
length that we need (e.g. N allocations to 1, or 1 oversized allocation
to 1 perfect). Since we almost always overallocate, that means we almost
always trigger the logic in SourceBuffer::Compact to reallocate the data
into a properly sized buffer. If we had simply trusted the expected size
in the first place, we could have avoided this situation for the
majority of images.

In the case that we really do get the wrong size, then we will allocate
additional chunks which are multiples of MIN_CHUNK_CAPACITY bytes to fit
the data. At most, this will increase the number of discrete allocations
by 1, and trigger SourceBuffer::Compact to consolidate at the end. Since
we are almost always doing that before, and now we rarely do, this is a
significant win.
2017-08-01 06:59:11 -04:00
Andrew Osmond e0e5004eb0 Bug 1383404 - Part 1. SourceBuffer::Compact should use realloc to grow the first chunk to try to avoid a copy. r=tnikkel
SourceBuffer::Compact attempts to consolidate multiple, discrete
allocations into a single buffer, as well as trim excess capacity from a
singular allocation if we set aside too much. Using realloc lets
jemalloc (or whatever heap implementation we have) decide which is
better -- growing the existing buffer if there is sufficient free memory
contiguous with the first chunk, or allocating a new buffer entirely.
Since we were going to copy regardless, this should result either in an
improvement or the status quo. Brief empirical testing on Linux suggests
somewhere from 1/3 to 1/2 of allocations resulted in reusing the same
data pointer (and presumably avoided a copy as a result). This also has
the advantage of potentially reducing OOM errors, as it may have enough
room to satisfy an expansion, but not an entirely new buffer.
2017-08-01 06:59:11 -04:00
Nicholas Nethercote 72c884bf74 Bug 1384835 (part 3, attempt 2) - Remove the Preferences::Get*CString() variants that return nsAdoptingCString. r=froydnj.
--HG--
extra : rebase_source : d317b25be2ec21d1a60d25da3689e46cdce0b649
2017-07-31 14:28:48 +10:00
Nicholas Nethercote 49eb219ff5 Bug 1383982 (attempt 2) - Introduce a general mechanism for measuring memory usage of graph-like structures. r=erahm.
--HG--
extra : rebase_source : 7075f9570a4262158351ce9ac3ca8360ea4d5394
2017-07-28 20:10:04 +10:00
Sebastian Hengst 744a0a216b Backed out changeset ef5feef07bed (bug 1384835) 2017-07-28 10:29:24 +02:00
Sebastian Hengst 9077ac8886 Backed out changeset a57d8f30d1bf (bug 1383982) for build bustage at nsGlobalWindow.cpp:13826: 'class nsWindowSizes' has no member named 'mMallocSizeOf'. r=backout 2017-07-28 09:50:48 +02:00
Nicholas Nethercote 5c3abe8aab Bug 1383982 - Introduce a general mechanism for measuring memory usage of graph-like structures. r=erahm.
All the SizeOf{In,Ex}cludingThis() functions take a MallocSizeOf function
which measures memory blocks. This patch introduces a new type, SizeOfState,
which includes a MallocSizeOf function *and* a table of already-measured
pointers, called SeenPtrs. This gives us a general mechanism to measure
graph-like data structures, by recording which nodes have already been
measured. (This approach is used in a number of existing reporters, but not in
a uniform fashion.)

The patch also converts the window memory reporting to use SizeOfState in a lot
of places, all the way through to the measurement of Elements. This is a
precursor for bug 1383977 which will measure Stylo elements, which involve
Arcs.

The patch also converts the existing mAlreadyMeasuredOrphanTrees table in the
OrphanReporter to use the new mechanism.

--HG--
extra : rebase_source : 2c23285f8b6c3b667560a9d14014efc4633aed51
2017-07-28 15:03:44 +10:00
Nicholas Nethercote 200d8ec18b Bug 1384835 (part 3) - Remove the Preferences::Get*CString() variants that return nsAdoptingCString. r=froydnj.
This is similar like the previous patch, but for the 8-bit string variants.
Also, it changes assignment to Adopt() in GetCString() and GetDefaultCString()
to avoid an extra copy.

--HG--
extra : rebase_source : eba805c3a7b809d5ccd6e853b1c9010db9477667
2017-07-27 16:45:10 +10:00
Andrew Osmond 16a218837a Bug 1383579 - SourceBufferIterator::SetWaiting should not assert for spurious wakeups if no consumer was given. r=tnikkel
The ICO decoder creates a cloned SourceBufferIterator for its own
SourceBuffer bounded by the resource size. This iterator is used by the
child decoder (PNG, BMP) for decoding the actual image. However we rely
upon the ICO decoder and its iterator to drive event loop, rather than
the child decoder and the cloned iterator. The cloned iterator knows how
many bytes it requires, but it is problematic to give it a consumer to
tell us when to resume without changes to StreamingLexer.

Without a consumer (IResumable), we won't have anything to notify when
we get the appropriate amount of data for the caller. If the caller
tries to advance after some, unknown amount of data has been written to
the SourceBuffer, then it may need to go back to waiting. Thus it should
only assert for a spurious wakeup if we have an actual consumer.
2017-07-27 21:18:17 -04:00
Honza Bambas eafe13d61a Bug 1381048 - Add few object tracking logs to imagelib. r=tnikkel 2017-07-25 11:14:00 -04:00
Andrew Osmond 1c78f9203b Bug 1315554 - Part 10b. Force CMS output profile to be sRGB for gtests. r=me
Thus far gtests have only tested fairly simple images which already
render the same on all platforms (e.g. solid green 100x100 square).
If we want to test more complicated images consistently across
platforms, we need to ensure the color adjustments we perform are
also consistent. Using the pref gfx.color_management.force_srgb to
force an sRGB CMS profile makes us consistent with the reftests and
mochitests.

However an additional quirk of the gtests is that we own the main
thread and we never check our event queue to see if anything is
pending. Depending on the initialization order of our graphics
dependencies, it may or may not have created pending runnables to
process the pref change. As such, we need to change the pref,
initialize imagelib/gfx and then check for, and if present execute,
any necessary runnables. Only then can we be sure that our desired
CMS profile is applied.
2017-07-22 07:50:32 -04:00
Andrew Osmond 3155630a3f Bug 1315554 - Part 10a. Add large embedded PNG/BMP ICO tests. r=me 2017-07-22 07:50:32 -04:00
Andrew Osmond cd5abe3e4e Bug 1315554 - Part 9. Get the ICO size from the resource instead of the dir entry if unspecified. r=tnikkel 2017-07-22 07:50:32 -04:00
Andrew Osmond d400495cf1 Bug 1315554 - Part 8. Allow DecoderFactory::CreateDecoderForICOResource to create metadata decoders. r=tnikkel 2017-07-22 07:50:32 -04:00
Andrew Osmond 99d43905e2 Bug 1315554 - Part 7. Remove unnecessary buffering of BMP header in ICO decoder. r=tnikkel 2017-07-22 07:50:32 -04:00
Andrew Osmond a162fde8c7 Bug 1315554 - Part 6. Reuse the same SourceBuffer when decoding a resource within an ICO. r=tnikkel 2017-07-22 07:50:31 -04:00
Andrew Osmond 6d97dbaa41 Bug 1315554 - Part 5. Add method to clone a SourceBufferIterator when decoding. r=tnikkel 2017-07-22 07:50:31 -04:00
Andrew Osmond 35f9b857b0 Bug 1315554 - Part 4. Combine nsICODecoder::ReadBMP and ::ReadPNG. r=tnikkel 2017-07-22 07:50:31 -04:00
Andrew Osmond 93efb56fbf Bug 1315554 - Part 3. Expose Decoder::IsValidICOResource for all decoders. r=tnikkel 2017-07-22 07:50:31 -04:00
Andrew Osmond e5537d8caf Bug 1315554 - Part 2. The BMP decoder should be responsible for adjusting its size when embedded inside an ICO. r=tnikkel 2017-07-22 07:50:31 -04:00
Andrew Osmond ac14e4f8f5 Bug 1315554 - Part 1. Enforce the parent decoder size (ICO) for child decoders (BMP, PNG). r=tnikkel 2017-07-22 07:50:31 -04:00
Sebastian Hengst cc27374338 Backed out changeset fd310390a64a (bug 1315554) for failing GTest's ImageDecoders.LargeICOWithPNGSingleChunk on OS X opt. r=backout 2017-07-22 11:05:35 +02:00
Sebastian Hengst b33e39c76b Backed out changeset e1eec63b920f (bug 1315554) 2017-07-22 11:04:22 +02:00
Sebastian Hengst 7197a59a77 Backed out changeset 9780a01b3e94 (bug 1315554) 2017-07-22 11:04:17 +02:00
Sebastian Hengst 501b9eab08 Backed out changeset e67f6df41836 (bug 1315554) 2017-07-22 11:04:12 +02:00
Sebastian Hengst c8ba1dd256 Backed out changeset 6fa3ad97ce9c (bug 1315554) 2017-07-22 11:04:07 +02:00
Sebastian Hengst b2ef50b2fe Backed out changeset e39309b6fe7f (bug 1315554) 2017-07-22 11:04:02 +02:00
Sebastian Hengst 767a09b296 Backed out changeset dbae61d1cbee (bug 1315554) 2017-07-22 11:03:57 +02:00
Sebastian Hengst 5981e481e8 Backed out changeset d46b7e02802c (bug 1315554) 2017-07-22 11:03:52 +02:00
Sebastian Hengst 8604a9cc71 Backed out changeset 18614b05270d (bug 1315554) 2017-07-22 11:03:46 +02:00
Sebastian Hengst d4bb320357 Backed out changeset abc949687bdc (bug 1315554) 2017-07-22 11:03:41 +02:00
Andrew Osmond 8202116fbd Bug 1315554 - Part 10. Add large embedded PNG/BMP ICO tests. r=me 2017-07-22 00:15:00 -04:00
Andrew Osmond 081dd8f0be Bug 1315554 - Part 9. Get the ICO size from the resource instead of the dir entry if unspecified. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond ea108d0367 Bug 1315554 - Part 8. Allow DecoderFactory::CreateDecoderForICOResource to create metadata decoders. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 1c5f449591 Bug 1315554 - Part 7. Remove unnecessary buffering of BMP header in ICO decoder. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 88e2751836 Bug 1315554 - Part 6. Reuse the same SourceBuffer when decoding a resource within an ICO. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 1404a847cc Bug 1315554 - Part 5. Add method to clone a SourceBufferIterator when decoding. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 10a558df00 Bug 1315554 - Part 4. Combine nsICODecoder::ReadBMP and ::ReadPNG. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond a5bb792dc9 Bug 1315554 - Part 3. Expose Decoder::IsValidICOResource for all decoders. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 27542e8875 Bug 1315554 - Part 2. The BMP decoder should be responsible for adjusting its size when embedded inside an ICO. r=tnikkel 2017-07-22 00:14:59 -04:00
Andrew Osmond 1e83b97079 Bug 1315554 - Part 1. Enforce the parent decoder size (ICO) for child decoders (BMP, PNG). r=tnikkel 2017-07-22 00:14:58 -04:00
Andrew Osmond 6764b5b440 Bug 1382495 - Fix assert in imgRequestProxy::Dispatch to accept a listener or a tab group. r=me
imgRequestProxy::IsOnEventTarget must return false in order for imgRequestProxy::Dispatch to be called. Typically we check for mListener before any of this but in imgRequest::OnLoadComplete, we have other things to do besides notifying the listener. As such, we want to dispatch even if there is no listener, and that is when the assert can fail. Since IsOnEventTarget can only return false if it has either a tab group *or* a listener, we can change the assert to match.
2017-07-20 07:53:53 -04:00
Andrew Osmond 7deae0134b Bug 1359833 - Part 10. Add telemetry to track how often imgRequestProxy needs to dispatch. r=tnikkel data-r=bsmedberg 2017-07-19 14:15:12 -04:00
Andrew Osmond 9cc95e86c2 Bug 1359833 - Part 9. Fix image mochitests to not assume a particular order of events. r=tnikkel 2017-07-19 14:15:12 -04:00
Andrew Osmond 3f2ef119ba Bug 1359833 - Part 8. ScriptedNotificationObserver should use nsAutoScriptBlocker when issuing notifications. r=tnikkel 2017-07-19 14:15:12 -04:00
Andrew Osmond 02a3031379 Bug 1359833 - Part 4. imgLoader should pass down the loading document to the imgRequest. r=tnikkel 2017-07-19 14:15:11 -04:00