Commit Graph

53 Commits

Author SHA1 Message Date
sotaro
14dfec520a Bug 1742767 - Revive UnbindTextureSource() r=gfx-reviewers,mstange
UnbindTextureSource() was removed by mistake. UnbindTextureSource() is necessary to call ReadUnlock().

Differential Revision: https://phabricator.services.mozilla.com/D132029
2021-11-24 22:06:48 +00:00
sotaro
0a31a20caa Bug 1742052 - Remove unused code around TextureHost r=gfx-reviewers,nical
Differential Revision: https://phabricator.services.mozilla.com/D131701
2021-11-22 09:49:59 +00:00
Gerald Squelart
8c94ff82ed Bug 1738627 - profiler_thread_is_being_profiled_for_markers - r=canaltinova
`profiler_thread_is_being_profiled` is used a lot for markers, so it makes sense to have a specialized version, which is a bit shorter, and lives in ProfilerMarkers.h.

Differential Revision: https://phabricator.services.mozilla.com/D130009
2021-11-08 23:59:35 +00:00
Cristian Tuns
839b72e1d3 Backed out 5 changesets (bug 1738627) for causing xpcshell failures on test_ext_geckoProfiler_schema.js CLOSED TREE
Backed out changeset 42d385d7da97 (bug 1738627)
Backed out changeset edeb3a338954 (bug 1738627)
Backed out changeset 98f02e35134d (bug 1738627)
Backed out changeset 711daa6dd24b (bug 1738627)
Backed out changeset 49e12753a40c (bug 1738627)
2021-11-05 05:12:28 -04:00
Gerald Squelart
019bfd575e Bug 1738627 - profiler_thread_is_being_profiled_for_markers - r=canaltinova
`profiler_thread_is_being_profiled` is used a lot for markers, so it makes sense to have a specialized version, which is a bit shorter, and lives in ProfilerMarkers.h.

Differential Revision: https://phabricator.services.mozilla.com/D130009
2021-11-05 05:52:28 +00:00
Gerald Squelart
e52556d921 Bug 1735697 - Remove profiler_can_accept_markers(), use profiler_thread_is_being_profiled() instead - r=florian
Differential Revision: https://phabricator.services.mozilla.com/D128577
2021-10-18 23:11:30 +00:00
Florian Quèze
7ca337c131 Bug 1699742 - Remove MOZ_GECKO_PROFILER ifdefs that are no longer needed, r=gerald.
Differential Revision: https://phabricator.services.mozilla.com/D109078
2021-03-22 16:29:52 +00:00
Andi-Bogdan Postelnicu
e89c7568d8 Bug 1694161 - some fixes for the MacOS non unified environment. r=sg
Differential Revision: https://phabricator.services.mozilla.com/D106616
2021-02-27 08:05:46 +00:00
smolnar
973811895c Backed out 2 changesets (bug 1694161) as requested by dev. DONTBUILD CLOSED TREE
Backed out changeset 0fb8a1114e84 (bug 1694161)
Backed out changeset 453ce7dffdcc (bug 1694161)
2021-02-26 18:52:04 +02:00
Andi-Bogdan Postelnicu
a8e208c764 Bug 1694161 - some fixes for the MacOS non unified environment. r=sg
Depends on D105977

Differential Revision: https://phabricator.services.mozilla.com/D106616
2021-02-26 16:39:18 +00:00
Jean-Yves Avenard
f8e17f9bc9 Bug 1630733 - Only attempt to use TextureHost if it's valid. r=mattwoodrow,nical
It is possible that when the ImageBridge received a new image to composite, that image hasn't yet been registered via the VideoBridge.

This can happen if the decoding occurs in the different process than the content process. Even though the VideoBridge registration message was sent earlier by the RDD process, the ImageBridge message sent by the content process reached the compositor earlier.

So we only attempt to use the TextureHost if it is valid and the underlying image has been properly registered. Otherwise we will continue to use the previous image.

Some methods are modified to lazily perform their action only once the image has been registered from the PVideoBridge.

Differential Revision: https://phabricator.services.mozilla.com/D92234
2020-10-09 02:54:30 +00:00
Gerald Squelart
313fddf4f9 Bug 1667915 - Separate marker category from marker options - r=gregtatum
The `category.WithOptions(...)` syntax was a bit strange and difficult to explain.

Now the category and options are separate parameters. Default options can be specified with `MarkerOptions{}` or just `{}`.

As a special case, defaulted-NoPayload functions don't need `<>`, and defaulted-NoPayload functions and macros don't even need `{}` for default options, e.g.:
`profiler_add_marker("name", OTHER); PROFILER_MARKER_UNTYPED("name", OTHER);`

Differential Revision: https://phabricator.services.mozilla.com/D91680
2020-10-01 11:02:23 +00:00
Bogdan Tara
6fe40f83f1 Backed out 2 changesets (bug 1667915) for platform related bustage CLOSED TREE
Backed out changeset e7a0788a1741 (bug 1667915)
Backed out changeset d34505b2d81b (bug 1667915)
2020-10-01 12:34:39 +03:00
Gerald Squelart
4eb5bd3574 Bug 1667915 - Separate marker category from marker options - r=gregtatum
The `category.WithOptions(...)` syntax was a bit strange and difficult to explain.

Now the category and options are separate parameters. Default options can be specified with `MarkerOptions{}` or just `{}`.

As a special case, defaulted-NoPayload functions don't need `<>`, and defaulted-NoPayload functions and macros don't even need `{}` for default options, e.g.:
`profiler_add_marker("name", OTHER); PROFILER_MARKER_UNTYPED("name", OTHER);`

Differential Revision: https://phabricator.services.mozilla.com/D91680
2020-10-01 01:44:47 +00:00
Gerald Squelart
e68ad94607 Bug 1663554 - Convert AUTO_PROFILER_TEXT_MARKER_... to new AUTO_PROFILER_MARKER_TEXT - r=gregtatum
The name `AUTO_PROFILER_MARKER_TEXT` is more consistent with the equivalent non-`AUTO` macro, and similarly arguments have been re-ordered to be the same, i.e.: Name, category&options, text.

The different macros with different argument sets can now be collapsed into one macro, and the optional arguments (timing, inner window id, backtrace) can easily be added to the `MarkerOptions` where needed.

As a bonus, a specific start time can optionally be provided at construction time.

Differential Revision: https://phabricator.services.mozilla.com/D89588
2020-09-11 00:42:51 +00:00
Gerald Squelart
8c49ce00f7 Bug 1663554 - Convert PROFILER_ADD_TEXT_MARKER and friends to PROFILER_MARKER_TEXT - r=gregtatum
Mostly mechanical changes, with some work needed to convert the different payloads (with optional timestamps, inner window id, and/or backtrace) to the equivalent MarkerOptions.

Differential Revision: https://phabricator.services.mozilla.com/D89587
2020-09-11 00:41:27 +00:00
Markus Stange
1378cc77d3 Bug 1654091 - Widen the biasing threshold to 1.5ms. r=nical
We still keep the actual biasing amount (BIAS_TIME_MS) at 1.0ms.

This makes it possible to switch from negative bias to positive bias in an
instant, at the frame that is repeated. Here's how:

While the bias is negative, it means that we're allowed to pick frames up to
1.0ms in the future. But we've drifted far enough that the next frame's
timestamp is more than 1.0ms in the future, for example 1.3ms, we cannot pick
it, so we're at a composite that repeats a frame. This is the point where we
want to switch to positive bias. In order to switch to positive bias, the next
frame's timestamp must be within the biasing threshold of the current
composition time. But if that threshold is at 1.0ms, then the 1.3ms falls
outside of that and we keep the negative bias, which is bad. With the widened
threshold of 1.5ms, we successfully switch to the positive bias in that case.

There would be no harm in keeping the negative bias if the video frames were
going to be *consistently* further than 1.0ms away from the composition time
from now on, because then even a negative bias would not make them eligible to
be picked. But whenever we have small fluctuations, which is the case when we
actually *need* the bias for consistent playback, it means that the next frame
might again be within 1.0ms of the composition time, and the negative bias would
cause a frame to be skipped.

One source of such fluctuations is the fact that WebM video frames only have
*integer millisecond* precision on their timestamps. That means they're off by
up to 0.5ms from their desired timestamp.

So the frame that's 1.3ms in the future could be one that was supposed to be at
composition time + 0.9ms, but happened to be off by 0.4ms from its desired
timestamp due to the integer millisecond restriction. This frame could then be
followed by another frame that also wanted to be at +0.9ms (compared to the next
frame's composition time), but ended up being at +0.6ms. So at that point it is
important to no longer have the negative bias, because otherwise a frame would
be skipped.

Profile before: https://share.firefox.dev/3hnOOtk
Profile after: https://share.firefox.dev/3fIfEf4

Differential Revision: https://phabricator.services.mozilla.com/D84285
2020-07-29 17:58:02 +00:00
Markus Stange
76e89dea2d Bug 1654091 - Add a profiler marker for the current and next video frame timestamp offsets from the composition time. r=nical
Differential Revision: https://phabricator.services.mozilla.com/D84284
2020-07-29 17:57:50 +00:00
Markus Stange
ccbbb1e7e8 Bug 1654091 - Update ImageComposite bias even on frames where the video frame doesn't update. r=nical
However, don't reset the bias to NONE in those cases.

Differential Revision: https://phabricator.services.mozilla.com/D84283
2020-07-29 17:57:44 +00:00
Markus Stange
b5c9f3cc25 Bug 1654091 - Pick the frame in the first call to ChooseImageIndex and then don't look at timestamps again for the remainder of the composition. r=nical
Differential Revision: https://phabricator.services.mozilla.com/D84282
2020-07-29 17:57:16 +00:00
Markus Stange
081c5117e1 Bug 1654040 - Add an ImageComposite::SetImages marker that records the supplied frameIDs. r=nical
Depends on D84212

Differential Revision: https://phabricator.services.mozilla.com/D84213
2020-07-21 07:46:45 +00:00
Markus Stange
43282d2103 Bug 1654040 - Add the number of remaining images in mImages to the UpdateCompositedFrame compositor marker. r=nical
Differential Revision: https://phabricator.services.mozilla.com/D84212
2020-07-21 07:45:26 +00:00
Gerald Squelart
3e624e91bc Bug 1654106 - Check that image timestamps are not null before subtracting them - r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D84257
2020-07-20 22:50:34 +00:00
Markus Stange
ad7823345f Bug 1578042 - Call UpdateCompositedFrame from ChooseImageIndex so that the frame drop detection works for non-WebRender too. r=nical
Non-WebRender calls ChooseImageIndex multiple times per frame, and only calls
FinishRendering if it actually rendered the video. This makes some of the
bookkeeping here a bit annoying.

This patch introduces a behavior difference as to when mLastFrameID is updated.
It is now updated during the first ChooseImageIndex inside of a composition,
rather than from FinishRendering. But the bias is still updated from
FinishRendering. I don't think this will make an actual difference in practice.

Differential Revision: https://phabricator.services.mozilla.com/D84072
2020-07-20 21:47:07 +00:00
Markus Stange
78b00dfb7d Bug 1578042 - Ignore skipped frames when the video was offscreen. r=jya,nical
This patch makes it work for WebRender. The next patch in the series makes it
work for non-WebRender, too.

Differential Revision: https://phabricator.services.mozilla.com/D83463
2020-07-20 21:47:07 +00:00
Markus Stange
9f18e24862 Bug 1578042 - Improve dropped frames reporting for videos, by counting all frames in mImages that were never composited. r=jya,nical
In the current state this also counts frame drops while the video is offscreen,
but this will be fixed in a later patch in the series.

This patch also adjusts the time delta check: It now compares floored milliseconds.
In 60fps WebM videos, the video frame durations are 16.0, 17.0, 17.0, 16.0, 17.0, 17.0, ...
so we need to consider frames with 16.0ms as displayable even when the target
frame duration is 16.67ms, otherwise we gloss over one third of the frames when
counting potentially dropped frames.

Differential Revision: https://phabricator.services.mozilla.com/D82635
2020-07-20 21:56:21 +00:00
Bogdan Tara
57678c5547 Backed out 4 changesets (bug 1578042) for test_memory_usage.py crash CLOSED TREE
Backed out changeset 24d56f3c7678 (bug 1578042)
Backed out changeset e32e69b9bdc4 (bug 1578042)
Backed out changeset 3fbf9c0203dd (bug 1578042)
Backed out changeset 57f65280709f (bug 1578042)
2020-07-21 00:42:47 +03:00
Markus Stange
d38dd95e1f Bug 1654060 - Fix comments about positive bias for video frame timestamps. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D84225
2020-07-20 19:47:13 +00:00
Markus Stange
d78dc80a2d Bug 1578042 - Call UpdateCompositedFrame from ChooseImageIndex so that the frame drop detection works for non-WebRender too. r=nical
Non-WebRender calls ChooseImageIndex multiple times per frame, and only calls
FinishRendering if it actually rendered the video. This makes some of the
bookkeeping here a bit annoying.

This patch introduces a behavior difference as to when mLastFrameID is updated.
It is now updated during the first ChooseImageIndex inside of a composition,
rather than from FinishRendering. But the bias is still updated from
FinishRendering. I don't think this will make an actual difference in practice.

Differential Revision: https://phabricator.services.mozilla.com/D84072
2020-07-20 16:20:53 +00:00
Markus Stange
f6fc159f19 Bug 1578042 - Ignore skipped frames when the video was offscreen. r=jya,nical
This patch makes it work for WebRender. The next patch in the series makes it
work for non-WebRender, too.

Differential Revision: https://phabricator.services.mozilla.com/D83463
2020-07-20 16:20:12 +00:00
Markus Stange
d21cace678 Bug 1578042 - Improve dropped frames reporting for videos, by counting all frames in mImages that were never composited. r=jya,nical
In the current state this also counts frame drops while the video is offscreen,
but this will be fixed in a later patch in the series.

This patch also adjusts the time delta check: It now compares floored milliseconds.
In 60fps WebM videos, the video frame durations are 16.0, 17.0, 17.0, 16.0, 17.0, 17.0, ...
so we need to consider frames with 16.0ms as displayable even when the target
frame duration is 16.67ms, otherwise we gloss over one third of the frames when
counting potentially dropped frames.

Differential Revision: https://phabricator.services.mozilla.com/D82635
2020-07-20 16:19:51 +00:00
Markus Stange
565754095b Bug 1653679 - Don't call UpdateCompositedFrame outside of a composition. r=jya,nical
Correctly indicate that we're not in a composition during SetDisplayList or
during empty transactions, by making sure the composition timestamp is null
outside of a composition.

We also now return 0 rather than -1 from the first call to ChooseImageIndex
outside of a composition, so that static images (like canvases) default to
the correct initial frame. We don't call ChooseImageIndex for them again once
we composite them.
This is different from non-WebRender, which would call ChooseImageIndex on
canvas layers during every composition.

This introduces a behavior difference for static images when WebRender is enabled:
Those images will no longer update mLastFrameID, because UpdateCompositedFrame
will not be called during a composition for them.

I'm also removing a comment that seems like it's unnecessarily duplicating
information from another comment a few lines further up. That other comment is
also easier to understand.

Differential Revision: https://phabricator.services.mozilla.com/D83460
2020-07-18 05:13:16 +00:00
Markus Stange
8b2e12370f Bug 1653679 - Move more logic into UpdateCompositedFrame. r=jya,nical
This also makes it so that UpdateBias for non-WebRender is only called when the
video frame changes. This mirrors the recent change that we made for WebRender
in bug 1652181. Non-WebRender only calls UpdateCompositedFrame when it actually
draws the video onto the screen, so when the video is the only thing that was
updating, the new behavior is equivalent. But the new behavior makes more sense
if you have a 30fps video and a 60fps animation running on a 60fps screen at the
same time - now the bias won't be accidentally reset every other frame.

Differential Revision: https://phabricator.services.mozilla.com/D83459
2020-07-18 05:05:27 +00:00
Markus Stange
991a03feeb Bug 1653679 - Update mLastFrameID in a new method UpdateCompositedFrame. r=jya,nical
Differential Revision: https://phabricator.services.mozilla.com/D82634
2020-07-18 05:28:56 +00:00
Markus Stange
bfcbd3e71a Bug 1653350 - Add a marker that shows variations in video frame timestamps. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D83832
2020-07-18 05:12:30 +00:00
Razvan Maries
5abc4423b7 Backed out 7 changesets (bug 1578042) for perma failures on TimeStamp.h. CLOSED TREE
Backed out changeset ff727e9821be (bug 1578042)
Backed out changeset 94159598ab2a (bug 1578042)
Backed out changeset e26e1db6309b (bug 1578042)
Backed out changeset 0e658297a2ba (bug 1578042)
Backed out changeset 035199ba3d5a (bug 1578042)
Backed out changeset 0306fe17b5aa (bug 1578042)
Backed out changeset b0d63daa5d60 (bug 1578042)
2020-07-17 02:09:40 +03:00
Markus Stange
f4c9a803e2 Bug 1578042 - Ignore skipped frames when the video was offscreen. r=jya,nical
This currently only works for WebRender. In non-WR, no frame drops are reported.

There are two reasons why it doesn't work for non-WR:
 - Non-WR currently does not increment the composition opportunity ID.
 - In non-WR, UpdateCompositedFrame is only called for videos when they are
   drawn. But this detection relies on it being called on every composite, if
   the video is part of the on-screen scene. (WR does that.)

To make this detection work for non-WR as well, we would need to address both
of those points. The latter point is somewhat tricky because non-WR calls
ChooseImageIndex many times throughout a composite, and we would need to choose
a point in the composite at which to "lock in" the image for that composite and
cache the image index on the ImageHost somewhere, and then also find a way to
reset that locked-in index in the next composite. I haven't come up with a way
to do that and I do not know if it is worth the effort.

Differential Revision: https://phabricator.services.mozilla.com/D83463
2020-07-16 03:37:03 +00:00
Markus Stange
a54aa1a398 Bug 1578042 - Improve dropped frames reporting for videos, by counting all frames in mImages that were never composited. r=jya,nical
In the current state this also counts frame drops while the video is offscreen,
but this will be fixed in a later patch in the series.

This patch also adjusts the time delta check: It now compares floored milliseconds.
In 60fps WebM videos, the video frame durations are 16.0, 17.0, 17.0, 16.0, 17.0, 17.0, ...
so we need to consider frames with 16.0ms as displayable even when the target
frame duration is 16.67ms, otherwise we gloss over one third of the frames when
counting potentially dropped frames.

Differential Revision: https://phabricator.services.mozilla.com/D82635
2020-07-16 03:37:02 +00:00
Markus Stange
9a32a1e0be Bug 1578042 - Don't call UpdateCompositedFrame outside of a composition. r=jya,nical
Correctly indicate that we're not in a composition during SetDisplayList or
during empty transactions, by making sure the composition timestamp is null
outside of a composition.

We also now return 0 rather than -1 from the first call to ChooseImageIndex
outside of a composition, so that static images (like canvases) default to
the correct initial frame. We don't call ChooseImageIndex for them again once
we composite them.
This is different from non-WebRender, which would call ChooseImageIndex on
canvas layers during every composition.

This introduces a behavior difference for static images when WebRender is enabled:
Those images will no longer update mLastFrameID, because UpdateCompositedFrame
will not be called during a composition for them.

I'm also removing a comment that seems like it's unnecessarily duplicating
information from another comment a few lines further up. That other comment is
also easier to understand.

Differential Revision: https://phabricator.services.mozilla.com/D83460
2020-07-16 08:47:21 +00:00
Markus Stange
be17c96c26 Bug 1578042 - Move more logic into UpdateCompositedFrame. r=jya,nical
This also makes it so that UpdateBias for non-WebRender is only called when the
video frame changes. This mirrors the recent change that we made for WebRender
in bug 1652181. Non-WebRender only calls UpdateCompositedFrame when it actually
draws the video onto the screen, so when the video is the only thing that was
updating, the new behavior is equivalent. But the new behavior makes more sense
if you have a 30fps video and a 60fps animation running on a 60fps screen at the
same time - now the bias won't be accidentally reset every other frame.

Differential Revision: https://phabricator.services.mozilla.com/D83459
2020-07-16 03:37:02 +00:00
Markus Stange
d9421080f4 Bug 1578042 - Update mLastFrameID in a new method UpdateCompositedFrame. r=jya,nical
Differential Revision: https://phabricator.services.mozilla.com/D82634
2020-07-16 03:37:01 +00:00
Simon Giesecke
83e48517da Bug 1613985 - Use default for equivalent-to-default constructors/destructors in gfx. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D65288
2020-03-04 15:39:20 +00:00
alwu
1aaf6e7caf Bug 1579127 - only count the frame dropping due to system overload. r=mattwoodrow
When user adjusts the video playback rate, which might cause we sending images in a speed that is faster than the speend we composite images.

In this situation, the frame dropping actually won't cause any visual defect and we also don't want to report this frame dropping to user, because it's not caused by system overloading, it's just our compositor doesn't support compositing images in such a high rate.

Therefore, we should check if the dropped images are caused by system overload or high update rate, and only report the former to user.

Differential Revision: https://phabricator.services.mozilla.com/D46236
2019-10-08 08:06:13 +00:00
Gurzau Raul
6433fd2a12 Backed out changeset 348fa5ed7407 (bug 1579127) for image raster crashes on a CLOSED TREE. 2019-10-02 12:38:29 +03:00
alwu
4c75c7ead6 Bug 1579127 - only count the frame dropping due to system overload. r=mattwoodrow
When user adjusts the video playback rate, which might cause we sending images in a speed that is faster than the speend we composite images.

In this situation, the frame dropping actually won't cause any visual defect and we also don't want to report this frame dropping to user, because it's not caused by system overloading, it's just our compositor doesn't support compositing images in such a high rate.

Therefore, we should check if the dropped images are caused by system overload or high update rate, and only report the former to user.

Differential Revision: https://phabricator.services.mozilla.com/D46236
2019-10-02 01:23:47 +00:00
Matt Woodrow
c745fcf843 Bug 1529795 - Record profiler markers when we drop video frames. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D20755
2019-02-27 17:35:05 +00:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Jean-Yves Avenard
200075c10c Bug 1245400 - P2. Keep track of frames that should have been painted but didn't. r=nical, r=mattwoodrow
We can't rely on the FrameID continuity to determine if a frame has been dropped due to timing or not.
The reason being that the VideoSink will not send to the compositor frames it knows as being late already (causing a discontinuity in the frames IDs), and count them as being dropped.
If we were to look at discontinuity on the compositor we would account for those frames twice.

FramesID will also increase non-linearly if a frame isn't painted because it's not visible (either out of the visible tree or in a hidden tab).

What we can measure however, is when a frame should have been painted but didn't because it was too late by looking at the value returned by ImageComposite::ChooseImageIndex() or when a new set of images is being received by the ImageComposite.
Any images found in the earlier array but never returned must have been dropped due to timing.

Looking at the index continuity greatly simplify the logic as we no longer need to worry if a video is hidden or not, or be part of a layer that is itself hidden as neither SetImages will be called then, nor ChooseImage

For now, we only account for those frames dropped, and do not report them yet.

Differential Revision: https://phabricator.services.mozilla.com/D2176
2018-08-22 17:26:36 +02:00
Jean-Yves Avenard
d15afe2811 Bug 1245400 - P1. Make ImageComposite::mImages a private member. r=nical
We will use the characteristic of which TimedImage is returned to keep track on how many frames were dropped because they were too old. As such, we must make sure the retrieval of the current image is serialised.

This allows to reduce duplicated code between WebRenderImageHost and ImageHost classes.

Additionally, make RenderInfo::img member const as really, we never want to modify that one.

A future change will enforce that RenderInfo.img never survives longer than the ChooseImage()'s caller to clarify the lifetime of the TimedImage.

Differential Revision: https://phabricator.services.mozilla.com/D2175
2018-08-22 17:26:36 +02:00
Daniel Holbert
bb0a8b6602 Bug 1412427 part 8: (automated patch) Switch a bunch of C++ files in gfx to use our standard mode lines. r=jrmuizel
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: 77D61xpSmIl
2017-10-27 16:10:06 -07:00