Commit graph

224 commits

Author SHA1 Message Date
Nika Layzell
c15823d075 Bug 1772006 - Part 5: Simplify and move the string searching APIs from ns[T]StringObsolete, r=xpcom-reviewers,necko-reviewers,eeejay,dragana,barret
The biggest set of APIs from ns[T]StringObsolete which are still heavily used
are the string searching APIs. It appears the intention was for these to be
replaced by the `FindInReadable` APIs, however that doesn't appear to have
happened.

In addition, the APIs have some quirks around their handling of mixed character
widths. These APIs generally supported both narrow strings and the native
string type, probably because char16_t string literals weren't available until
c++11. Finally they also used easy-to-confuse unlabeled boolean and integer
optional arguments to control behaviour.

These patches do the following major changes to the searching APIs:

1. The ASCII case-insensitive search method was split out as
   LowerCaseFindASCII, rather than using a boolean. This should be less
   error-prone and more explicit, and allows the method to continue to use
   narrow string literals for all string types (as only ASCII is supported).
2. The other [R]Find methods were restricted to only support arguments with
   matching character types. I considered adding a FindASCII method which would
   use narrow string literals for both wide and narrow strings but it would've
   been the same amount of work as changing all of the literals to unicode
   literals.
   This ends up being the bulk of the changes in the patch.
3. All find methods were re-implemented using std::basic_string_view's find
   algorithm or stl algorithms to reduce code complexity, and avoid the need to
   carry around the logic from nsStringObsolete.cpp.
4. The implementations were moved to nsTStringRepr.cpp.
5. An overload of Find was added to try to catch callers which previously
   called `Find(..., false)` or `Find(..., true)` to set case-sensitivity, due
   to booleans normally implicitly coercing to `index_type`. This should
   probably be removed at some point, but may be useful during the transition.

Differential Revision: https://phabricator.services.mozilla.com/D148300
2022-07-30 00:12:48 +00:00
criss
c6b2c5db61 Backed out 9 changesets (bug 1772006) causing build bustages on nsTString.cpp. CLOSED TREE
Backed out changeset f17c7565707b (bug 1772006)
Backed out changeset c725fe1f5882 (bug 1772006)
Backed out changeset d19663161261 (bug 1772006)
Backed out changeset b6611ab002d9 (bug 1772006)
Backed out changeset 790f42b64af9 (bug 1772006)
Backed out changeset 79a734b4e4d9 (bug 1772006)
Backed out changeset 42730aae16ea (bug 1772006)
Backed out changeset b2542aef3054 (bug 1772006)
Backed out changeset 962bfea4a309 (bug 1772006)
2022-06-11 01:13:42 +03:00
Nika Layzell
b3c13bf114 Bug 1772006 - Part 6: Simplify and move the string searching APIs from ns[T]StringObsolete, r=xpcom-reviewers,necko-reviewers,eeejay,dragana,barret
The biggest set of APIs from ns[T]StringObsolete which are still heavily used
are the string searching APIs. It appears the intention was for these to be
replaced by the `FindInReadable` APIs, however that doesn't appear to have
happened.

In addition, the APIs have some quirks around their handling of mixed character
widths. These APIs generally supported both narrow strings and the native
string type, probably because char16_t string literals weren't available until
c++11. Finally they also used easy-to-confuse unlabeled boolean and integer
optional arguments to control behaviour.

These patches do the following major changes to the searching APIs:

1. The ASCII case-insensitive search method was split out as
   LowerCaseFindASCII, rather than using a boolean. This should be less
   error-prone and more explicit, and allows the method to continue to use
   narrow string literals for all string types (as only ASCII is supported).
2. The other [R]Find methods were restricted to only support arguments with
   matching character types. I considered adding a FindASCII method which would
   use narrow string literals for both wide and narrow strings but it would've
   been the same amount of work as changing all of the literals to unicode
   literals.
   This ends up being the bulk of the changes in the patch.
3. All find methods were re-implemented using std::basic_string_view's find
   algorithm or stl algorithms to reduce code complexity, and avoid the need to
   carry around the logic from nsStringObsolete.cpp.
4. The implementations were moved to nsTStringRepr.cpp.
5. An overload of Find was added to try to catch callers which previously
   called `Find(..., false)` or `Find(..., true)` to set case-sensitivity, due
   to booleans normally implicitly coercing to `index_type`. This should
   probably be removed at some point, but may be useful during the transition.

Differential Revision: https://phabricator.services.mozilla.com/D148300
2022-06-10 21:12:08 +00:00
Jamie Nicol
30384c7460 Bug 1773128 - Block webrender on several PowerVR GPUs due to crash. r=gfx-reviewers,nical
There is a crash in glFenceSync (used to recycle PBOs when uploading
textures) affecting several PowerVR GPUs. Block webrender on the known
bad combinations of GPU and driver versions.

Differential Revision: https://phabricator.services.mozilla.com/D148638
2022-06-08 13:57:51 +00:00
Emilio Cobos Álvarez
31d3fcdb9b Bug 1767172 - Remove custom screen info handling from GfxInfo, use ScreenManager for that. r=jrmuizel,handyman,stransky
This removes a bunch of custom code from GfxInfo to obtain screen
information, and instead collects that screen information in
ScreenManager.

This, apart of removing duplicated code, has the extra benefit of
reporting multi-monitor information on GTK (and potentially in the
future reporting scale and refresh rate properly as well, I've kept the
telemetry as it was on that regard).

Differential Revision: https://phabricator.services.mozilla.com/D145178
2022-05-06 23:37:25 +00:00
Cosmin Sabou
4ddcb34203 Backed out changeset b2bea8e0b400 (bug 1767172) for causing startup crashes (Bug 1768260). a=backout 2022-05-07 01:28:53 +03:00
Emilio Cobos Álvarez
9d430bf4ed Bug 1767172 - Remove custom screen info handling from GfxInfo, use ScreenManager for that. r=jrmuizel,handyman,stransky
This removes a bunch of custom code from GfxInfo to obtain screen
information, and instead collects that screen information in
ScreenManager.

This, apart of removing duplicated code, has the extra benefit of
reporting multi-monitor information on GTK (and potentially in the
future reporting scale and refresh rate properly as well, I've kept the
telemetry as it was on that regard).

Differential Revision: https://phabricator.services.mozilla.com/D145178
2022-05-05 15:07:03 +00:00
Jamie Nicol
dee7767b62 Bug 1762424 - Unblock GPU process on Android 12. r=gfx-reviewers,nical
With the previous patches in this series we can properly recover from
a GPU process restart, so unblock it.

Differential Revision: https://phabricator.services.mozilla.com/D143487
2022-04-18 18:11:08 +00:00
Jamie Nicol
cee8f98714 Bug 1763392 - Generate SDK bindings for nested Java classes as nested C++ classes. r=agi,media-playback-reviewers,bryce
For example, the SDK class android.media.MediaDrm$KeyStatus will now
be defined as MediaDrm::KeyStatus rather than just KeyStatus.

Not only does this avoid polluting the top-level namespace, but it
also avoids a bug where invalid type names were generated if the
nested class contains a method with a parameter or return of the outer
class' type.

Differential Revision: https://phabricator.services.mozilla.com/D143043
2022-04-07 11:12:20 +00:00
Jamie Nicol
dbde42a288 Bug 1762025 - Block GPU process on Android versions 12 and above. r=gfx-reviewers,aosmond
On Android version 12, it appears as if the EGL context does not
correctly get detached from a Surface when its process dies. This
means that subsequent attempts to create an EGL context fail, meaning
we cannot render anything.

This results in a completely unusable browser following a GPU process
crash, which is worse than the alternative of a parent process crash.

Block the GPU process on Android 12 and above until we have found a
workaround.

Differential Revision: https://phabricator.services.mozilla.com/D142452
2022-03-30 13:37:19 +00:00
Jamie Nicol
85737329f2 Bug 1719327 - Block webrender on Vivante GC7000UL devices. r=gfx-reviewers,jrmuizel
Webrender crashes during draw calls on this GPU. Move users to
software webrender instead.

Differential Revision: https://phabricator.services.mozilla.com/D137666
2022-02-02 17:21:08 +00:00
Andrew Osmond
62fe89a23e Bug 1751252 - Block partial present on Linux NVIDIA and ship X11 EGL with NVIDIA to release. r=rmader,jrmuizel,jnicol
Differential Revision: https://phabricator.services.mozilla.com/D136518
2022-01-21 16:24:06 +00:00
Makoto Kato
aa7a01ca92 Bug 1748955 - Remove AndroidBridge dependencies from GfxInfo. r=geckoview-reviewers,calu
As historical reason, AndroidBridge has a lot of JNI wrappers. But we have
auto-generation JNI wrappers now, so it is unnecessary to keep wrappers in
AndroidBridge for GfxInfo.

So I would like to remove AndroidBridge dependencies from GfxInfo.

Differential Revision: https://phabricator.services.mozilla.com/D135324
2022-01-13 12:09:47 +00:00
Jamie Nicol
effdec8549 Bug 1742987 - Block webrender on Android on PowerVR Rogue G6110 GPUs. r=gfx-reviewers,aosmond
Due to bug 1742986 and bug 1717863 we are blocking webrender on
Android devices PowerVR Rogue G6110 GPUs. These devices will use
software webrender instead.

Differential Revision: https://phabricator.services.mozilla.com/D132170
2021-11-25 20:47:17 +00:00
Andrew Osmond
4a288852e3 Bug 1724794 - Remove Software WebRender allow/blocklist plumbing. r=gfx-reviewers,jrmuizel
We don't use this anymore for anything.

Differential Revision: https://phabricator.services.mozilla.com/D122254
2021-08-11 14:07:02 +00:00
Gabriele Svelto
559377e821 Bug 1723934 - Remove useless nsExceptionHandler.h inclusions and crash reporter service definitions r=necko-reviewers,dragana
Differential Revision: https://phabricator.services.mozilla.com/D121708
2021-08-09 20:08:17 +00:00
Andrew Osmond
be05f05157 Bug 1721407 - Explicitly block Mali 4xx for WR so that they get SW-WR by default. r=jnicol
Differential Revision: https://phabricator.services.mozilla.com/D120359
2021-07-20 16:22:20 +00:00
Andrew Osmond
62ca4d996b Bug 1717862 - Ship Software WebRender and WebRender to remaining Android devices. r=jnicol
Differential Revision: https://phabricator.services.mozilla.com/D118605
2021-06-23 16:55:18 +00:00
Jamie Nicol
c1772d2a60 Bug 1716971 - Enable webrender on Android on NVIDIA Tegra GPUs. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D118156
2021-06-17 13:07:50 +00:00
Jamie Nicol
b773eeb1fd Bug 1715746 - Re-enable webrender on Adreno 505 and 506 devices. r=jrmuizel
While webrender has been shipping for a long time on other Adreno 5xx
devices, we had disabled it on Adreno 505 and 506 due to frequent
crashes during shader compilation. This crash has now been fixed, so
we can ship webrender to these devices.

Depends on D117427

Differential Revision: https://phabricator.services.mozilla.com/D117428
2021-06-10 14:22:31 +00:00
Rob Wu
213c4436bf Bug 1714673 - Fix gfx blocklist support on Android r=jrmuizel
The remote gfx blocklist for Android was broken since 2016 by
https://hg.mozilla.org/mozilla-central/rev/af65533093de as explained at
https://bugzilla.mozilla.org/show_bug.cgi?id=1714673#c2

This patch fixes the issue and re-enables the disabled tests.

Differential Revision: https://phabricator.services.mozilla.com/D116951
2021-06-10 14:15:04 +00:00
Jamie Nicol
a399e95a65 Bug 1712290 - Re-enable webrender on Adreno 3xx Android 9 devices. r=gfx-reviewers,nical
Webrender had previously been disabled on Adreno 3xx devices running
Android 9 due to a rendering issue caused by a driver bug. (See bug
1712148) The issue has now been identified and a workaround put in
place, so we can re-enable webrender.

Depends on D117033

Differential Revision: https://phabricator.services.mozilla.com/D117034
2021-06-08 09:43:44 +00:00
Jamie Nicol
66d429e573 Bug 1712148 - Disable webrender for Adreno 3xx devices running Android 9 and later. r=aosmond
Due to a report of flashing black rectangles on an Adreno 308 device
running Android 9. As a precaution disable webrender for android 9 and
later for all Adreno 3xx GPUs.

Differential Revision: https://phabricator.services.mozilla.com/D115622
2021-05-20 17:01:48 +00:00
Jamie Nicol
ec2d3d2494 Bug 1609191 - Disable webrender on devices affected by Adreno shader compilation crash. r=nical
We encounter frequent crashes in glLinkProgram on some Adreno
devices. This is likely due to a driver bug, but we have been unable
to figure out the exact cause and work around it.

According to the crash data, this bug appears to affect Adreno 505 and
506 devices running Android 9 only. Disable webrender on these devices
in order to avoid the crash.

Depends on D114949

Differential Revision: https://phabricator.services.mozilla.com/D114950
2021-05-12 13:03:51 +00:00
Jamie Nicol
7c83f7a154 Bug 1707283 - Disable optimized shaders for all Mali-T devices. r=nical
Previously we had disabled optimized shaders on Mali-T devices running
Android versions up to 5.1, due to broken rendering. We have now had a
report of the same issue on Android 7.1. As a precaution, disable
optimized shaders for all Mali-T devices regardless of android version.

Differential Revision: https://phabricator.services.mozilla.com/D113913
2021-04-30 09:01:45 +00:00
Nicolas Silva
249ff5c29e Bug 1706396 - Enable WebRender on android with mesa (intel chromebooks). r=jnicol,aosmond
Differential Revision: https://phabricator.services.mozilla.com/D112990
2021-04-26 13:19:21 +00:00
Jamie Nicol
dba7f2b57e Bug 1707283 - Re-enable webrender on Mali T devices running android 5.1 or below. r=nical
An earlier patch in this bug disabled webrender on these devices due
to reports of broken rendering. Now that the cause of the broken
rendering has been worked around, we can re-enable webrender.

Depends on D113313

Differential Revision: https://phabricator.services.mozilla.com/D113319
2021-04-26 12:21:09 +00:00
Jamie Nicol
519010985e Bug 1707283 - Disable optimized shaders on Mali T devices running android 5.1 or below. r=nical
Previously in bug 1689064 we disabled our usage of optimized shaders
to work around a driver bug affecting Mali-T6xx devices. It now
appears this bug affects Mali-T7xx and T8xx devices too, only on
Android versions 5.1 or below. This patch disables shader optimization
for all Mali-T devices when the Android version is 5.1 or below.

Differential Revision: https://phabricator.services.mozilla.com/D113313
2021-04-26 12:21:09 +00:00
Jamie Nicol
4340dddd3f Bug 1707283 - Disable webrender on Mali-T devices running Android 5. r=nical
There appears to be a driver issue causing the browser to be unusable
on such devices. Disable webrender until we diagnose the issue and
find a workaround.

Differential Revision: https://phabricator.services.mozilla.com/D113296
2021-04-26 09:44:02 +00:00
Jamie Nicol
2c893aa32d Bug 1706267 - Enable webrender for Adreno 3xx devices. r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D112696
2021-04-20 12:29:29 +00:00
Jamie Nicol
df306cce64 Bug 1704818 - Enable webrender on PowerVR Rogue devices. r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D111843
2021-04-14 18:42:37 +00:00
Jamie Nicol
db97bf93e3 Bug 1704783 - Disable texture swizzling support on PowerVR Rogue devices. r=kvark
Running webrender on PowerVR Rogue devices results in some images
being rendered with swapped R and B channels. This is because we use
texture swizzling for images in the shared texture cache, and
presumably the driver has a buggy implementation. This patch disables
texture swizzling on all PowerVR Rogue devices as a precaution.

It also ensures that we always use BGRA format textures in cases where
texture swizzling is unsupported, otherwise we encounter GL errors
when attempting to upload BGRA data to RGBA format textures, as GLES
does not support format conversion during upload. Furthermore, we make
it so that using RGBA+glTexStorage+swizzling is preferred to
BGRA+glTexImage in cases where swizzling is actually supported, as we
generally want to prefer glTexStorage to glTexImage.

Lastly, in cases where neither BGRA or swizzling are supported, rather
than attempting to upload BGRA data to RGBA textures (which will
result in a GL error) we pretend the BGRA data is RGBA. This will
result in the channels being swapped when rendering, but that is
preferable to the alternative of images not being uploaded at
all. This configuration shouldn't actually exist in the wild anyway.

Differential Revision: https://phabricator.services.mozilla.com/D111840
2021-04-14 18:42:36 +00:00
Jamie Nicol
7abb7ce304 Bug 1615574 - Disable webrender shader cache on Adreno 3xx. r=aosmond
Loading cached shaders with glProgramBinary fails consistently for all
but the most trivial of our shaders on Adreno 3xx, so caching and
attempting to load them is a waste of time. Chromium and other
projects also appear to have disabled their shader caches on Adreno
3xx due to bugs.

This patch moves the gfx.webrender.program-binary-disk pref
declaration from all.js to StaticPrefList.yaml. Rather than directly
using the value of the pref to decide whether to create the shader
cache, we now initialize a Feature in gfxConfigManager with a default
value from the pref and then configure it from the blocklist. On
Android we block the feature on Adreno 3xx devices. The pref remains
true by default on Android and Windows, and false by default on Linux
and Macos.

Differential Revision: https://phabricator.services.mozilla.com/D111427
2021-04-12 15:14:12 +00:00
Jamie Nicol
2f1a0ff30d Bug 1703532 - Let webrender ride the trains for Adreno 4xx devices. r=aosmond
It has been enabled on nightly for a cycle without any issues.

Differential Revision: https://phabricator.services.mozilla.com/D111097
2021-04-07 15:20:11 +00:00
Sebastian Hengst
e073a4ee20 Bug 1703502 - move closing curly brace out of ifdef block to fix non-Nightly Android builds. r=emilio
Curly brace got moved into ifdef block in bug 1803140

Differential Revision: https://phabricator.services.mozilla.com/D111077
2021-04-07 11:18:42 +00:00
sotaro
4b3f251745 Bug 1703140 - Enable software webrender on Nightly for Mali-4XX devices r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D110886
2021-04-07 03:14:34 +00:00
Jamie Nicol
ac9cef0aca Bug 1507074 - Don't block webrender due to lack of GL_OES_EGL_image_external_essl3 support. r=aosmond
Thanks to the previous patch in this series we can now play video
using the non-essl3 GL_OES_EGL_image_external extension, therefore we
no longer require the essl3 version.

It is assumed that all android devices support
GL_OES_EGL_image_external (non-essl3). Even if that is not the case,
webrender is no worse off than layers in that regard.

Differential Revision: https://phabricator.services.mozilla.com/D108909
2021-03-18 18:31:26 +00:00
Jamie Nicol
4fbbd0370b Bug 1692848 - Work around Mali driver crash caused by textureSize(samplerExternalOES). r=kvark
On some Mali devices we have encountered driver crashes caused by
calling textureSize(samplerExternalOES) in a shader without also
potentially sampling from the texture in the shader. ARM's suggested
workaround was to trick the driver in to thinking that the texture may
be sampled from (ie by sampling in a branch which is never dynamically
taken).

This is done by checking the value of a dummy uniform, and sampling
the texture if the value is non-default. Using a constant expression
did not work because the compiler would optimize the condition (and
therefore the sample) away.

Also re-enable webrender on Mali-72 and G76 devices, as it was blocked
due to this bug.

Differential Revision: https://phabricator.services.mozilla.com/D105493
2021-02-17 20:59:06 +00:00
Jamie Nicol
62ee003e4e Bug 1693082 - Enable webrender for Mali-Txxx devices on release. r=aosmond
Note that quite a few Mali-Txxx devices still won't get webrender, due
to lack of GL_OES_EGL_image_external_essl3 support. Bug 1507074 tracks
lifting this requirement.

Depends on D105338

Differential Revision: https://phabricator.services.mozilla.com/D105339
2021-02-16 16:46:36 +00:00
Jamie Nicol
55937b85b5 Bug 1693072 - Enable webrender for Adreno 505 and 506 devices on release. r=aosmond
Webrender has been enabled for most Adreno 5xx and 6xx devices for a
while now, but 505 and 506 were held back due to bug 1609191. We were
seeing a moderate number of crashes during what we suspected was
shader compilation.

The crashes on 505 and 506 have all but disappeared. Additionally,
after shipping to the wider release audience we saw the same crashes
on other 5xx devices, not just 505 and 506, but the numbers were never
so high as to be worrying. So we are safe to ship to 505 and 506 as
well.

Depends on D105337

Differential Revision: https://phabricator.services.mozilla.com/D105338
2021-02-16 16:46:36 +00:00
Jamie Nicol
1552fafd9d Bug 1693094 - Enable webrender for Adreno 4xx devices on nightly. r=aosmond
It appears to work well based on local testing, so let's enable in on
nightly and see if any bugs are reported.

Differential Revision: https://phabricator.services.mozilla.com/D105337
2021-02-16 16:46:36 +00:00
Jamie Nicol
bb557e823d Bug 1688705 - Block webrender on Mali-G72 and G76 on Android 11. r=aosmond
In bug 1688017 we blocked webrender on Mali-G76 devices due to reports
of crashes when playing video. Based on more reports by users and
further investigation of the crash data, it appears that Mali-G72 GPUs
are also affected by the same bug, but only on Android 11 (for both
GPUs). Crashes on other Mali GPUs and earlier android versions do
exist, but in much lower numbers.

Update the block to include G72 as well as G76, but only for Android
11.

Differential Revision: https://phabricator.services.mozilla.com/D105047
2021-02-12 21:18:34 +00:00
Jamie Nicol
2bc946d133 Bug 1689064 - Disable optimized shaders on Mali-T6xx. r=aosmond
Webrender's pre-optimized shaders result in completely broken
rendering on a Huawei MediaPad M2 (Mali-T628). As a precaution,
disable optimized shaders on all Mali-T6xx devices.

Differential Revision: https://phabricator.services.mozilla.com/D104752
2021-02-11 13:47:59 +00:00
Brindusan Cristian
8859fc3907 Backed out changeset e602ff8fea83 (bug 1689064) for assertion failures in gfxFeature.cpp. CLOSED TREE 2021-02-11 13:28:24 +02:00
Jamie Nicol
e97cf43b8c Bug 1689064 - Disable optimized shaders on Mali-T6xx. r=aosmond
Webrender's pre-optimized shaders result in completely broken
rendering on a Huawei MediaPad M2 (Mali-T628). As a precaution,
disable optimized shaders on all Mali-T6xx devices.

Differential Revision: https://phabricator.services.mozilla.com/D104752
2021-02-11 10:54:15 +00:00
Noemi Erli
06eb4d31ad Backed out changeset 5338c029ee7c (bug 1689064) for causing GTest failures CLOSED TREE 2021-02-11 02:02:45 +02:00
Jamie Nicol
6bd22ad430 Bug 1689064 - Disable optimized shaders on Mali-T6xx. r=aosmond
Webrender's pre-optimized shaders result in completely broken
rendering on a Huawei MediaPad M2 (Mali-T628). As a precaution,
disable optimized shaders on all Mali-T6xx devices.

Differential Revision: https://phabricator.services.mozilla.com/D104752
2021-02-10 23:09:19 +00:00
Jamie Nicol
9e0bc84dcd Bug 1691925 - Block webrender on android devices which don't support GL_OES_EGL_image_external_essl3 r=aosmond
Currently webrender requires the extension
GL_OES_EGL_image_external_essl3 to render video. There exist some
older GLES 3 devices which do not support this extension, and
attempting to render video on these devices results in a shader
compilation error and falling back to OpenGL layers.

In bug 1507074 we will implement a long term solution for such
devices, but in the meantime block webrender on devices which do not
support this extension.

Differential Revision: https://phabricator.services.mozilla.com/D104669
2021-02-10 16:00:16 +00:00
Narcis Beleuzu
2d9a1618aa Backed out changeset 6bdd49767079 (bug 1691925) for crashes on GLContext . CLOSED TREE 2021-02-10 15:17:53 +02:00
Jamie Nicol
34795f555a Bug 1691925 - Block webrender on android devices which don't support GL_OES_EGL_image_external_essl3 r=aosmond
Currently webrender requires the extension
GL_OES_EGL_image_external_essl3 to render video. There exist some
older GLES 3 devices which do not support this extension, and
attempting to render video on these devices results in a shader
compilation error and falling back to OpenGL layers.

In bug 1507074 we will implement a long term solution for such
devices, but in the meantime block webrender on devices which do not
support this extension.

Differential Revision: https://phabricator.services.mozilla.com/D104669
2021-02-10 12:12:43 +00:00