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

2113 Коммитов

Автор SHA1 Сообщение Дата
Simon Giesecke 2e6385ca34 Bug 1626570 - Improve handling of copying arrays in gfx/. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D73635
2020-05-05 12:55:27 +00:00
Stephen A Pohl ee3fa26401 Bug 1616404: Change macOS version detection to accommodate major versions between 10 and 255 as well as minor and bugfix versions between 0 and 255. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D73180
2020-05-04 21:11:09 +00:00
Dorel Luca 34f3c60771 Backed out changeset 06fadee788b3 (bug 1616404) for XPCShell failures on OSX in xpcshell/rs-blocklist/test_gfxBlacklist_OK.js. CLOSED TREE 2020-05-04 22:46:01 +03:00
Stephen A Pohl 056c89cd8c Bug 1616404: Change macOS version detection to accommodate major versions between 10 and 255 as well as minor and bugfix versions between 0 and 255. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D73180
2020-05-04 17:01:45 +00:00
sotaro 74fce68a04 Bug 1632096 - Forward WebRender gl(ANGLE) error message to gfx critical note r=gw
Differential Revision: https://phabricator.services.mozilla.com/D72123
2020-04-24 11:32:05 +00:00
Narcis Beleuzu 3eaaf8fd77 Backed out changeset d84032238d5f (bug 1632096) for bustages on GLContext.h . CLOSED TREE 2020-04-24 05:46:10 +03:00
sotaro 41ebbb733f Bug 1632096 - Forward WebRender gl(ANGLE) error message to gfx critical note r=gw
Differential Revision: https://phabricator.services.mozilla.com/D72123
2020-04-23 22:58:27 +00:00
Robert Mader cd16f095fa Bug 1632137 - Do not require GL compat profile for Webrender, r=jgilbert
This mirrors GLX behaviour.

Differential Revision: https://phabricator.services.mozilla.com/D71993
2020-04-22 20:25:44 +00:00
Martin Stransky e3d81b0f91 Bug 1474281 - Make EGL-provider support OGL. r=jgilbert
In the past EGL only supported GLES, not OGL. This has not been true
for a very long time, so lets support OGL context creation in the EGL
backend.

This allows e.g. the Wayland backend to use OGL contexts, which brings
it on par with the X11/GLX backend.

Differential Revision: https://phabricator.services.mozilla.com/D48096
2020-04-21 05:43:35 +00:00
Botond Ballo 22d1a37a79 Bug 1627482 - Fix non-unified build errors in gfx/gl. r=tnikkel
Differential Revision: https://phabricator.services.mozilla.com/D69731

--HG--
extra : moz-landing-system : lando
2020-04-05 03:50:33 +00:00
Sylvestre Ledru 734f79b541 Bug 1624237 - Run misc-unused-using-decls - Remove useless declarations r=andi
$ ./mach static-analysis check --checks="-*, misc-unused-using-decls" --fix <path>

Differential Revision: https://phabricator.services.mozilla.com/D67811

--HG--
extra : moz-landing-system : lando
2020-03-23 13:15:33 +00:00
Martin Stransky 3e8ae1409e Bug 1619270 [Wayland] Check we're really on Wayland and not on headless, r=jhorak
Differential Revision: https://phabricator.services.mozilla.com/D65489

--HG--
extra : moz-landing-system : lando
2020-03-05 10:20:48 +00:00
Simon Giesecke dce1e48caf Bug 1613985 - Use default for equivalent-to-default constructors/destructors in gfx. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D65288

--HG--
extra : moz-landing-system : lando
2020-03-04 15:39:20 +00:00
Sylvestre Ledru ca6530131a Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan,kvark
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D63787

--HG--
extra : moz-landing-system : lando
2020-02-24 15:33:38 +00:00
Martin Stransky 905e0e97e8 Bug 1614568 [Wayland] Implement fence sync to dmabuf surfaces for WebGL rendering, r=jgilbert
Use ANDROID_native_fence_sync to synchronize WebGL renderin. It's similar to KHR_fence_sync
but it the fence can be exported to file descriptor and shared among processes so we can create
the fence by WebGL producer and then wait in renderer.

Use glFinish() as a fallback when ANDROID_native_fence_sync is not available.

Differential Revision: https://phabricator.services.mozilla.com/D62712

--HG--
extra : moz-landing-system : lando
2020-02-19 15:13:28 +00:00
Jeff Gilbert b8111d92ec Bug 1615751 - Prune unused parts of GLScreenBuffer. r=lsalzman
Differential Revision: https://phabricator.services.mozilla.com/D62979

--HG--
extra : moz-landing-system : lando
2020-02-15 22:48:36 +00:00
Arthur Iakab fa5241b0f1 Backed out changeset 57fa22ef0461 (bug 1615751) for multiple build bustages.
DONTBUILD
CLOSED TREE
2020-02-15 22:19:55 +02:00
Jeff Gilbert 739ec46d60 Bug 1615751 - Prune unused parts of GLScreenBuffer. r=lsalzman
Differential Revision: https://phabricator.services.mozilla.com/D62979

--HG--
extra : moz-landing-system : lando
2020-02-15 04:15:21 +00:00
Greg V e5dcb46da9 Bug 1615465 - fix missing nsString include in GLContext r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D62843

--HG--
extra : moz-landing-system : lando
2020-02-14 00:25:19 +00:00
Martin Stransky 0c0169aabe Bug 1613364 [Wayland] Update gfx code to derived WaylandDMABufSurfaceRGBA class, r=sotaro
WaylandDMABufSurface/WaylandDMABufSurfaceRGBA uses textures interface instead of EGLImages so we need
to update gfx code accordingly:

- rename CreateEGLImage() -> CreateTexture()
- rename ReleaseEGLImage() -> ReleaseTextures()
- rename GetGLTexture() -> GetTexture()
- rename WaylandDMABufSurface::CreateDMABufSurface() to WaylandDMABufSurfaceRGBA::CreateDMABufSurface()

Differential Revision: https://phabricator.services.mozilla.com/D62005

--HG--
extra : moz-landing-system : lando
2020-02-12 22:35:02 +00:00
Emilio Cobos Álvarez d7841a5f17 Bug 1614208 - Remove some include dependencies in nsStyleConsts.h. r=jfkthame,jgilbert
We include it everywhere because it's included from gfxTypes.h.

This should avoid including all the generated bindings _everywhere_.

Differential Revision: https://phabricator.services.mozilla.com/D62174

--HG--
extra : moz-landing-system : lando
2020-02-11 01:23:37 +00:00
Martin Stransky 7e18aeed6a Bug 1613358 [Wayland] Implement WaylandDMABUFSurfaceImage dmabuf image, r=sotaro
Implement WaylandDMABUFSurfaceImage which is backed by dma buf memory on Wayland and it holds
decoded video images produced by ffmpeg va-api decoder.

Differential Revision: https://phabricator.services.mozilla.com/D61678

--HG--
extra : moz-landing-system : lando
2020-02-06 15:15:02 +00:00
Brindusan Cristian 443b32771a Backed out changeset 6381c1f2aedc (bug 1613358) for build bustages at GLBlitHelper.cpp. CLOSED TREE 2020-02-06 16:15:27 +02:00
Martin Stransky f6d5f48d74 Bug 1613358 [Wayland] Implement WaylandDMABUFSurfaceImage dmabuf image, r=sotaro
Implement WaylandDMABUFSurfaceImage which is backed by dma buf memory on Wayland and it holds
decoded video images produced by ffmpeg va-api decoder.

Differential Revision: https://phabricator.services.mozilla.com/D61678

--HG--
extra : moz-landing-system : lando
2020-02-06 12:10:57 +00:00
Martin Stransky 849ffb22b3 Bug 1586696 [Wayland] Use wayland dmabuf as WebGL backend, r=jgilbert
- Create new SharedSurfaceType called EGLSurfaceDMABUF
- Implement EGLSurfaceDMABUF by SharedSurfaceDMABUF which is backed by WaylandDMABufSurface.
  It can be used by Wayland/EGL WebGL backend.
- It's disabled by default, can be enabled by widget.wayland_dmabuf_webgl.enabled pref.

Differential Revision: https://phabricator.services.mozilla.com/D60114

--HG--
extra : moz-landing-system : lando
2020-02-05 06:32:25 +00:00
Robert Mader 829aab8587 Bug 1474281 - Remove unneeded debug print. r=jgilbert
Differential Revision: https://phabricator.services.mozilla.com/D48102

--HG--
extra : moz-landing-system : lando
2020-01-31 17:17:49 +00:00
Greg V 2befd54d63 Bug 1484812 - Use SwapBuffersWithDamage on EGL platforms (Wayland/Android) r=jnicol,mstange,jgilbert
EGL_KHR_swap_buffers_with_damage (or EGL_EXT_swap_buffers_with_damage)
is an EGL extension that allows the application to inform the display
server (system compositor) which areas of the window have changed.

This commit implements support for that extension in the layers compositor.
The layers compositor always renders the whole frame, so we're only getting
the benefit of not redrawing unchanged areas *in the system compositor*,
not actually doing partial invalidation/compositing,
but that makes the implementation simpler (no need to track buffer age).

Differential Revision: https://phabricator.services.mozilla.com/D51517

--HG--
extra : moz-landing-system : lando
2020-01-30 10:46:54 +00:00
Eric Rahm cfd1cc461f Bug 1610388 - Remove nsAutoPtr usage from gfx/. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D60456

--HG--
extra : moz-landing-system : lando
2020-01-21 01:25:28 +00:00
Emilio Cobos Álvarez 256c124f94 Bug 1609996 - Reorder some includes affected by the previous patches. r=froydnj
This was done by:

This was done by applying:

```
diff --git a/python/mozbuild/mozbuild/code-analysis/mach_commands.py b/python/mozbuild/mozbuild/code-analysis/mach_commands.py
index 789affde7bbf..fe33c4c7d4d1 100644
--- a/python/mozbuild/mozbuild/code-analysis/mach_commands.py
+++ b/python/mozbuild/mozbuild/code-analysis/mach_commands.py
@@ -2007,7 +2007,7 @@ class StaticAnalysis(MachCommandBase):
         from subprocess import Popen, PIPE, check_output, CalledProcessError

         diff_process = Popen(self._get_clang_format_diff_command(commit), stdout=PIPE)
-        args = [sys.executable, clang_format_diff, "-p1", "-binary=%s" % clang_format]
+        args = [sys.executable, clang_format_diff, "-p1", "-binary=%s" % clang_format, '-sort-includes']

         if not output_file:
             args.append("-i")
```

Then running `./mach clang-format -c <commit-hash>`

Then undoing that patch.

Then running check_spidermonkey_style.py --fixup

Then running `./mach clang-format`

I had to fix four things:

 * I needed to move <utility> back down in GuardObjects.h because I was hitting
   obscure problems with our system include wrappers like this:

0:03.94 /usr/include/stdlib.h:550:14: error: exception specification in declaration does not match previous declaration
0:03.94 extern void *realloc (void *__ptr, size_t __size)
0:03.94              ^
0:03.94 /home/emilio/src/moz/gecko-2/obj-debug/dist/include/malloc_decls.h:53:1: note: previous declaration is here
0:03.94 MALLOC_DECL(realloc, void*, void*, size_t)
0:03.94 ^
0:03.94 /home/emilio/src/moz/gecko-2/obj-debug/dist/include/mozilla/mozalloc.h:22:32: note: expanded from macro 'MALLOC_DECL'
0:03.94     MOZ_MEMORY_API return_type name##_impl(__VA_ARGS__);
0:03.94                                ^
0:03.94 <scratch space>:178:1: note: expanded from here
0:03.94 realloc_impl
0:03.94 ^
0:03.94 /home/emilio/src/moz/gecko-2/obj-debug/dist/include/mozmemory_wrap.h:142:41: note: expanded from macro 'realloc_impl'
0:03.94 #define realloc_impl mozmem_malloc_impl(realloc)

   Which I really didn't feel like digging into.

 * I had to restore the order of TrustOverrideUtils.h and related files in nss
   because the .inc files depend on TrustOverrideUtils.h being included earlier.

 * I had to add a missing include to RollingNumber.h

 * Also had to partially restore include order in JsepSessionImpl.cpp to avoid
   some -WError issues due to some static inline functions being defined in a
   header but not used in the rest of the compilation unit.

Differential Revision: https://phabricator.services.mozilla.com/D60327

--HG--
extra : moz-landing-system : lando
2020-01-20 16:19:48 +00:00
Emilio Cobos Álvarez aa3a695712 Bug 1609996 - Remove mozilla/Move.h. r=froydnj
rg -l 'mozilla/Move.h' | xargs sed -i 's/#include "mozilla\/Move.h"/#include <utility>/g'

Further manual fixups and cleanups to the include order incoming.

Differential Revision: https://phabricator.services.mozilla.com/D60323

--HG--
extra : moz-landing-system : lando
2020-01-20 16:18:20 +00:00
Emilio Cobos Álvarez 5cd5e6f148 Bug 1609996 - Remove mozilla::Swap in favor of std::swap. r=froydnj
Now mfbt/Move.h is empty except for that excellent comment about move
semantics... Should we put it somewhere else and delete the header as a
follow-up? Or just delete the header and carry on?

Differential Revision: https://phabricator.services.mozilla.com/D60297

--HG--
extra : moz-landing-system : lando
2020-01-20 16:17:06 +00:00
Sylvestre Ledru cc2040bf21 Bug 1605934 - Use nested namespaces r=sg
Done with:
./mach static-analysis check --checks="-*, modernize-concat-nested-namespaces" --fix .
and then clang-format on the files

Differential Revision: https://phabricator.services.mozilla.com/D58217

--HG--
extra : moz-landing-system : lando
2020-01-18 13:48:34 +00:00
Dorel Luca 506e65bcab Backed out changeset bbb39655cf71 (bug 1605934) for build bustage in widget/gtk/mozwayland/mozwayland.c 2020-01-18 15:39:55 +02:00
Sylvestre Ledru 6689a37527 Bug 1605934 - Use nested namespaces r=sg
Done with:
./mach static-analysis check --checks="-*, modernize-concat-nested-namespaces" --fix .
and then clang-format on the files

Differential Revision: https://phabricator.services.mozilla.com/D58217

--HG--
extra : moz-landing-system : lando
2020-01-18 13:16:39 +00:00
Martin Stransky 508b813eb7 Bug 1608379 [Wayland] Don't use LOCAL_GL_TEXTURE_EXTERNAL on Wayland, r=sotaro
Differential Revision: https://phabricator.services.mozilla.com/D59480

--HG--
extra : moz-landing-system : lando
2020-01-11 17:50:20 +00:00
Jeff Gilbert f26e4d546b Bug 1477756 - Fix non-webgl CI tests. r=handyman
* Revert some partial webgl+oop+vr code.
* More missing FuncScope.
* Fix compile errors.
* Refactor some ifdef'd code to branch and compile on all platforms.
* -Wno-error=unused-result for GCC to allow for (void)MustUse().

Depends on D55739

Differential Revision: https://phabricator.services.mozilla.com/D56169

--HG--
extra : moz-landing-system : lando
2020-01-08 22:19:26 +00:00
Jeff Gilbert 0dfd1a2a0d Bug 1477756 - Fix all webgl regression tests according to CI. r=handyman
(This is a combination of 31 commits)

* Fix Linux compilation.

* Fix mac compilation.

* CI compile fixes.

* printf's size_t is %zu. %tu would be unsigned ptrdiff_t.

* No non-ref Maybe args.

* MOZ_CRASH for noreturn

* Handle implied texture sizes, rewrite comment stripping.

* Replace e.g. WebGLProgramInner with simpler webgl::ProgramKeepAlive.

* Bounce ValidateProgram call off driver.

* Uniform name length limit, cubemap fb-attach, non-array uniforms, undersized texImage views.

* alignas for uint8_t[sizeof(float)*N] pun buffers.

* CC fixes?

* Fill attrib0Active.

* Repair max-warnings limit.

* This is basically required in order for CI's logging to not explode.

* Don't cache WebGLMemoryTracker.

* Deleted prog/shader error, no texSubImage(null), client-side fingerprint resist for exts.

* Fix GetUniformIndices and MakeRangeFromView.

* CC Traverse base class from within derived class to fix leaking the world. :(

* PauseTransformFeedback
* TexImage video fastpath
* GetFragLocation for arrays
* Forbid BindBufferRange during TF

* Mark tests and fix RBAB query and test.

* Change(!) query deletion behavior to match spec.
* Mark conformance2/query/query.html failing for now.

* Implicitly EndQuery on DeleteQuery while spec is in flux.

* Fix error code for test.

* RAII LruPosition for WebGL context limit.

* Include std::list.

* Mark CompileResult and LinkResult.pending as false when retrieved.

* Hold strong-ref to NotLostData during Run<> to prevent LoseContext=>UAF.

* Don't assume GetUniformLocation(foo+'[0]') means foo is an array.
* Don't assume !mCanvasElement means !!mOffscreenCanvas.

* Handle composition while context-lost.

* All non-value-init members must be const or have inline init.

* Mark passing tests on Linux.

Depends on D54019

Differential Revision: https://phabricator.services.mozilla.com/D55739

--HG--
extra : moz-landing-system : lando
2020-01-08 22:19:23 +00:00
Jeff Gilbert e1d0fe64bb Bug 1477756 - Client-side bindings mirror for precise CC, and merge similar codepaths. r=handyman
* Context loss using RAII
* Move Program reflection Client-side

Depends on D54018

Differential Revision: https://phabricator.services.mozilla.com/D54019

--HG--
extra : moz-landing-system : lando
2020-01-08 22:19:16 +00:00
David Parks 198fa063c2 Bug 1477756 - Initial out-of-process WebGL implementation. r=mccr8,handyman
Splits WebGLContext into ClientWebGLContext and HostWebGLContext.  The Client enables the JS-control of a WebGL context in a content procecss while the Host executes the WebGL graphics operations (via a WebGLContext that maintains much of the existing code) in the compositor process.  At this point, the cross-process behavior is disabled -- this series of patches is an incremental step toward that final goal.

Differential Revision: https://phabricator.services.mozilla.com/D54018

--HG--
extra : moz-landing-system : lando
2020-01-08 22:19:14 +00:00
Markus Stange 7319c5e46d Bug 1592038 - Allow sharing depth and stencil buffers between multiple MozFramebuffers. r=jgilbert
Differential Revision: https://phabricator.services.mozilla.com/D54862

--HG--
extra : moz-landing-system : lando
2019-12-19 03:26:19 +00:00
Markus Stange 978cf2b7f0 Bug 1592044 - Add MozFramebuffer::HasDepth() and HasStencil(). r=jgilbert
Differential Revision: https://phabricator.services.mozilla.com/D55040

--HG--
extra : moz-landing-system : lando
2019-12-18 20:33:53 +00:00
Markus Stange 02b5afd25b Bug 1604633 - Stop calling -[NSOpenGLContext pixelFormat] on 10.9, take 2. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D57555

--HG--
extra : moz-landing-system : lando
2019-12-18 00:12:24 +00:00
Markus Stange b971dcf446 Bug 1602813 - Stop calling -[NSOpenGLContext pixelFormat] because it's not available on 10.9. Instead, inline CreateWithFormat into this callsite. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D56585

--HG--
extra : moz-landing-system : lando
2019-12-10 21:57:23 +00:00
Gabriele Svelto 69790bc62e Bug 1600545 - Remove useless inclusions of header files generated from IDL files in accessible/, browser/, caps/, chrome/, devtools/, docshell/, editor/, extensions/, gfx/, hal/, image/, intl/, ipc/, js/, layout/, and media/ r=Ehsan
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.

find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
    interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
    if [ -n "$interfaces" ]; then
        if [[ "$interfaces" == *$'\n'* ]]; then
          regexp="\("
          for i in $interfaces; do regexp="$regexp$i\|"; done
          regexp="${regexp%%\\\|}\)"
        else
          regexp="$interfaces"
        fi
        interface=$(basename "$path")
        rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
            hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
            if [ $hits -eq 0 ]; then
                echo "Removing ${interface} from ${path2}"
                grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
                mv -f "$path2".tmp "$path2"
            fi
        done
    fi
done

Differential Revision: https://phabricator.services.mozilla.com/D55443

--HG--
extra : moz-landing-system : lando
2019-12-06 09:16:44 +00:00
David Parks 4dc38ba6aa Bug 1577336: Part 7 - Move DXGI async plugin operations to compositor process r=jmathies,mattwoodrow,sotaro,mccr8
Previously, we created TextureD3D11 objects in the content process to back surfaces created for the plugin process.  Those objects were then composited by the async ImageBridge.  In order to remove Win32 kernel operations from content (including DX/GDI operations), this patch bounces the requests from content to the compositor process.  The compositor process maintains 2 textures to be used for all plugin composition -- one for the plugin process and one for display.  The plugin process can freely write to its texture and request composition when it is done, which triggers a blit to the display texture.  This mirrors pre-existing behavior.

Differential Revision: https://phabricator.services.mozilla.com/D46086

--HG--
extra : moz-landing-system : lando
2019-11-20 21:49:35 +00:00
David Parks 18e50987a5 Bug 1577336: Part 6 - Make SurfaceDescriptorGPUVideo a union that contains SurfaceDescriptorRemoteDecoder r=mattwoodrow,jolin
SurfaceDescriptorGPUVideo, which currently only represents RemoteDecoder video, switches from being a struct to a union that holds a SurfaceDescriptorRemoteDecoder struct.  SurfaceDescriptorRemoteDecoder is a new name for the old SurfceDescriptorGPUVideo.  This is done so that we can later add SurfaceDescriptorPlugin as another type of SurfaceDescriptorGPUVideo.

Differential Revision: https://phabricator.services.mozilla.com/D52400

--HG--
extra : moz-landing-system : lando
2019-11-20 21:55:06 +00:00
Glenn Watson cf3a4562ea Bug 1597887 - Improve performance of DirectComposition mode with WR. r=sotaro
This patch include two performance improvements:
 - Only rebuild the DC visual tree if different from last frame.
 - Use EGLImage instead of pbuffer for DC <-> GL interop.

These fix most of the talos regressions with DC enabled in WR.

Differential Revision: https://phabricator.services.mozilla.com/D53916

--HG--
extra : moz-landing-system : lando
2019-11-20 07:12:42 +00:00
Markus Stange 2e63893952 Bug 1579664 - Migrate compositor GLContexts to the active GPU after a GPU switch. r=jgilbert
MigrateToActiveGPU is only called on compositor GLContexts, not for WebGL.
See bug 1597547 for WebGL.

After this fix, the situation can be improved in multiple ways:
 - Rather than moving contexts between GPUs, it would be better to have separate
   contexts for each GPU, and teach our compositors to switch a window over to
   a new context.
 - Instead of creating a fresh context to obtain the "preferred" GPU, we should
   find the GPU that drives the display on which the context's results are going
   to be displayed.

Differential Revision: https://phabricator.services.mozilla.com/D53719

--HG--
extra : moz-landing-system : lando
2019-11-19 08:52:00 +00:00
Markus Stange 3ef43bc992 Bug 1596248 - Remove some duplicated checks, and the unused EMULATE_VM define. r=jgilbert,jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D52924

--HG--
extra : moz-landing-system : lando
2019-11-19 03:14:12 +00:00
Markus Stange b37d02c990 Bug 1596248 - Use CreateHeadless in GLContextProviderCGL::CreateForCompositorWidget. r=jgilbert
Differential Revision: https://phabricator.services.mozilla.com/D52923

--HG--
extra : moz-landing-system : lando
2019-11-19 03:49:06 +00:00