New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 835353 link

Starred by 3 users

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Bug

Blocked on:
issue 828363
issue 850271
issue 879649
issue 879656
issue 879658
issue 882951



Sign in to add a comment

Hugely variable WebGL performance on Adreno 306 GPU

Reported by w...@playcanvas.com, Apr 20 2018

Issue description

Steps to reproduce the problem:
1. Run https://playcanv.as/b/A1kNhj1o/ on an Adreno 306-powered Moto G3. It may be that any Adreno 3xx equipped device exhibits the problem but I've only tested the Moto G3.

What is the expected behavior?
Frame rate is steady/consistent. Firefox on Android maintains a much lower average framerate but at least it is very steady.

What went wrong?
Frame rate is wildly variable in Chrome. If you look at a Performance capture in Chrome Dev Tools (see attached), you'll see that several frames are fast with the occasional frame up to 5x slower.

Did this work before? No 

Does this work in other browsers? Yes

Chrome version: 65.0.3325.109  Channel: stable
OS Version: 6.0
Flash Version:
 
image (1).png
349 KB View Download
Owner: kbr@chromium.org
Status: Assigned (was: Unconfirmed)
kbr@, any idea why webgl frame rate is not steady on this device?

Comment 2 by kbr@chromium.org, Apr 21 2018

Cc: sunn...@chromium.org
Owner: jdarpinian@chromium.org
Not off the top of my head. I asked the PlayCanvas folks to file this so we can follow up. Wondering whether it might be related to the GPU scheduler.

James, when you get back, can you triage this similarly to the other problem you've been investigating with too many glFlushes happening?

Yes, this is definitely caused by context switching. My build with less context switching runs very smoothly at 30 Hz. It looks like switching contexts sometimes triggers a slow path in the driver that causes a frame to take 100ms or more.
Very interesting. Do you have an ETA for when your local changes might reach Canary? I'd love to test any improvements on my end.
Blockedon: 828363
Status: Started (was: Assigned)
No ETA yet but with a demonstrated serious performance issue this just became much higher priority. The change I'm testing is here: https://chromium-review.googlesource.com/c/chromium/src/+/1013377 If you are adventurous you can try building Chromium with it.

It can't be submitted as is because it pretty much disables context switching. We still want the browser UI to be able to preempt WebGL rendering if it's taking an unreasonably long time.
Project Member

Comment 7 by bugdroid1@chromium.org, May 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/62ca13ce4a8fda4f316692596f9bf61c74a58e34

commit 62ca13ce4a8fda4f316692596f9bf61c74a58e34
Author: James Darpinian <jdarpinian@chromium.org>
Date: Thu May 31 04:12:06 2018

GPU: Make command buffer autoflush more conservative.

This is change #1 of 3 reducing context switching during WebGL
rendering. On tiled rendering GPUs context switches are slow and can
even cause multisampling artifacts. Every time the command buffer is
flushed, a context switch is possible.

Before, the command buffer helper would always autoflush eventually if
no explicit flush was received. Commands would accumulate across
multiple frames until the autoflush threshold was reached. Implicit
flushes caused by ordering barriers were not taken into account.

Now the autoflush decision is based on the last ordering barrier instead
of the last explicit flush. Since there's an ordering barrier at least
once a frame, autoflush will only happen if the threshold is reached
within a single frame.

Bug: 828363,835353
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I168be6892620b1813c598a912e59147f9c45896f
Reviewed-on: https://chromium-review.googlesource.com/1077435
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563149}
[modify] https://crrev.com/62ca13ce4a8fda4f316692596f9bf61c74a58e34/gpu/command_buffer/client/cmd_buffer_helper.cc
[modify] https://crrev.com/62ca13ce4a8fda4f316692596f9bf61c74a58e34/gpu/command_buffer/client/cmd_buffer_helper_test.cc

Project Member

Comment 8 by bugdroid1@chromium.org, May 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/dcfaac01164977c0e9862880ba33ba6edb5639c2

commit dcfaac01164977c0e9862880ba33ba6edb5639c2
Author: James Darpinian <jdarpinian@chromium.org>
Date: Thu May 31 22:29:56 2018

GPU: Remove transfer buffer autoflushing.

This is change #2 of 3 reducing context switching during WebGL
rendering. On tiled rendering GPUs context switches are slow and can
even cause multisampling artifacts. Every time the command buffer is
flushed, a context switch is possible.

Before, the transfer buffer would flush the command buffer after an
arbitrary number of bytes were sent. This change removes that threshold.
Any performance benefit of early flushing is killed by the additional
context switching.

Bug: 828363,835353
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I8f71668d4b976332820d290868282d41286ab4fe
Reviewed-on: https://chromium-review.googlesource.com/1077568
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563404}
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/implementation_base.cc
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/implementation_base.h
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/mock_transfer_buffer.cc
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/mock_transfer_buffer.h
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/transfer_buffer.h
[modify] https://crrev.com/dcfaac01164977c0e9862880ba33ba6edb5639c2/gpu/command_buffer/client/transfer_buffer_unittest.cc

Project Member

Comment 9 by bugdroid1@chromium.org, Jun 6 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b63225bbef75dc91b78029ad8f8b1e516934b268

commit b63225bbef75dc91b78029ad8f8b1e516934b268
Author: James Darpinian <jdarpinian@chromium.org>
Date: Wed Jun 06 19:45:58 2018

Revert "GPU: Remove transfer buffer autoflushing."

This reverts commit dcfaac01164977c0e9862880ba33ba6edb5639c2.

Reason for revert: Regressed canvas 2d performance in some MotionMark
tests. Will redo as a WebGL-specific change.

Original change's description:
> GPU: Remove transfer buffer autoflushing.
> 
> This is change #2 of 3 reducing context switching during WebGL
> rendering. On tiled rendering GPUs context switches are slow and can
> even cause multisampling artifacts. Every time the command buffer is
> flushed, a context switch is possible.
> 
> Before, the transfer buffer would flush the command buffer after an
> arbitrary number of bytes were sent. This change removes that threshold.
> Any performance benefit of early flushing is killed by the additional
> context switching.
> 
> Bug: 828363,835353
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
> Change-Id: I8f71668d4b976332820d290868282d41286ab4fe
> Reviewed-on: https://chromium-review.googlesource.com/1077568
> Commit-Queue: James Darpinian <jdarpinian@chromium.org>
> Reviewed-by: Antoine Labour <piman@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#563404}

TBR=piman@chromium.org,jdarpinian@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 828363, 835353,  849348 
Change-Id: Iba27bae33f5395333f54db4bea4e79e41cca7e31
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/1087370
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#565006}
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/implementation_base.cc
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/implementation_base.h
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/mock_transfer_buffer.cc
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/mock_transfer_buffer.h
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/transfer_buffer.h
[modify] https://crrev.com/b63225bbef75dc91b78029ad8f8b1e516934b268/gpu/command_buffer/client/transfer_buffer_unittest.cc

Blockedon: 850271
Project Member

Comment 11 by bugdroid1@chromium.org, Jun 15 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e

commit 7a59e08137d5c51fa6695fe8ce0557ee257f4a8e
Author: James Darpinian <jdarpinian@chromium.org>
Date: Fri Jun 15 00:19:53 2018

GPU: Don't flush when destroying transfer buffers.

Destroying a transfer buffer now requires only an ordering barrier, not
a full flush. This removes a source of unnecessary flushes and makes
resizing the transfer buffer more efficient.

Bug:  850271 , 835353, 828363
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I9bfe43c46c00f8e9fc29e6450da788f86e74bc52
Reviewed-on: https://chromium-review.googlesource.com/1093580
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567494}
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/command_buffer/client/cmd_buffer_helper.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/command_buffer/client/cmd_buffer_helper_test.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/command_buffer/client/mapped_memory.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/command_buffer/client/transfer_buffer_unittest.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/client/command_buffer_proxy_impl.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/client/gpu_channel_host.cc
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/client/gpu_channel_host.h
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/common/flush_params.h
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/common/gpu_param_traits_macros.h
[modify] https://crrev.com/7a59e08137d5c51fa6695fe8ce0557ee257f4a8e/gpu/ipc/service/gpu_channel.cc

Project Member

Comment 12 by bugdroid1@chromium.org, Jun 15 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5a49da30d841e14aaabe40748de574908c3f6c58

commit 5a49da30d841e14aaabe40748de574908c3f6c58
Author: Francois Doray <fdoray@chromium.org>
Date: Fri Jun 15 14:04:36 2018

Revert "GPU: Don't flush when destroying transfer buffers."

This reverts commit 7a59e08137d5c51fa6695fe8ce0557ee257f4a8e.

Reason for revert:  https://crbug.com/853194 

Original change's description:
> GPU: Don't flush when destroying transfer buffers.
>
> Destroying a transfer buffer now requires only an ordering barrier, not
> a full flush. This removes a source of unnecessary flushes and makes
> resizing the transfer buffer more efficient.
>
> Bug:  850271 , 835353, 828363
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
> Change-Id: I9bfe43c46c00f8e9fc29e6450da788f86e74bc52
> Reviewed-on: https://chromium-review.googlesource.com/1093580
> Reviewed-by: Robert Sesek <rsesek@chromium.org>
> Reviewed-by: Antoine Labour <piman@chromium.org>
> Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
> Commit-Queue: James Darpinian <jdarpinian@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#567494}

TBR=sunnyps@chromium.org,rsesek@chromium.org,piman@chromium.org,jdarpinian@chromium.org

No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  850271 , 835353, 828363
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I7cd21d6cee9beca02ae28da8614a58e2f53dc848
Reviewed-on: https://chromium-review.googlesource.com/1102346
Commit-Queue: François Doray <fdoray@chromium.org>
Reviewed-by: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567631}
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/command_buffer/client/cmd_buffer_helper.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/command_buffer/client/cmd_buffer_helper_test.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/command_buffer/client/mapped_memory.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/command_buffer/client/transfer_buffer_unittest.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/client/command_buffer_proxy_impl.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/client/gpu_channel_host.cc
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/client/gpu_channel_host.h
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/common/flush_params.h
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/common/gpu_param_traits_macros.h
[modify] https://crrev.com/5a49da30d841e14aaabe40748de574908c3f6c58/gpu/ipc/service/gpu_channel.cc

Project Member

Comment 13 by bugdroid1@chromium.org, Jun 19 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d1b4ae2892b05cf622b3f649cb38b995ed2d1733

commit d1b4ae2892b05cf622b3f649cb38b995ed2d1733
Author: James Darpinian <jdarpinian@chromium.org>
Date: Tue Jun 19 19:49:08 2018

GPU: Don't flush when destroying transfer buffers.

This reverts commit 5a49da30d841e14aaabe40748de574908c3f6c58.

2nd try due to  http://crbug.com/853194 
1st try was here: https://chromium-review.googlesource.com/c/chromium/src/+/1093580

Destroying a transfer buffer now requires only an ordering barrier, not
a full flush. This removes a source of unnecessary flushes and makes
resizing the transfer buffer more efficient.

Bug:  850271 , 835353, 828363,  853194 
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Ibc5e72fcf4538a3f10022a613e9d0f15e4e7a95a
Reviewed-on: https://chromium-review.googlesource.com/1105466
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568575}
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/command_buffer/client/cmd_buffer_helper.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/command_buffer/client/cmd_buffer_helper_test.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/command_buffer/client/mapped_memory.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/command_buffer/client/transfer_buffer_unittest.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/client/command_buffer_proxy_impl.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/client/gpu_channel_host.cc
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/client/gpu_channel_host.h
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/common/flush_params.h
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/common/gpu_param_traits_macros.h
[modify] https://crrev.com/d1b4ae2892b05cf622b3f649cb38b995ed2d1733/gpu/ipc/service/gpu_channel.cc

Project Member

Comment 14 by bugdroid1@chromium.org, Jul 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c9afd79a9b8dddba6169dd805f60d8f4b14b82c7

commit c9afd79a9b8dddba6169dd805f60d8f4b14b82c7
Author: James Darpinian <jdarpinian@chromium.org>
Date: Tue Jul 03 01:31:40 2018

GPU: Fix transfer buffers not being freed promptly

A previous change removed the command buffer flush when destroying a
transfer buffer:
https://chromium-review.googlesource.com/c/chromium/src/+/1105466

If we want to free a transfer buffer promptly, we now need to flush
separately, and we do. Unfortunately if no commands were issued between
the call to DestroyTransferBuffer and the flush, the flush might not
execute because the CommandBufferProxy would pass an outdated flush ID
to GpuChannelHost::EnsureFlush. The fix is to inform the
CommandBufferProxy about the new flush ID when it calls
DestroyTransferBuffer.

This should fix the memory regressions on the perf waterfall noted in
bug 855402.

Bug: 855402,  850271 , 835353, 828363
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Id125c5124b26763e692c1fe8067df28761fa6dab
Reviewed-on: https://chromium-review.googlesource.com/1121590
Reviewed-by: Antoine Labour <piman@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572074}
[modify] https://crrev.com/c9afd79a9b8dddba6169dd805f60d8f4b14b82c7/gpu/ipc/client/command_buffer_proxy_impl.cc
[modify] https://crrev.com/c9afd79a9b8dddba6169dd805f60d8f4b14b82c7/gpu/ipc/client/gpu_channel_host.cc
[modify] https://crrev.com/c9afd79a9b8dddba6169dd805f60d8f4b14b82c7/gpu/ipc/client/gpu_channel_host.h

Project Member

Comment 15 by bugdroid1@chromium.org, Jul 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783

commit 65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783
Author: James Darpinian <jdarpinian@chromium.org>
Date: Tue Jul 03 07:23:17 2018

GPU: Grow and shrink transfer buffer

Automatically grow the transfer buffer when it is full and shrink it
when the full capacity is not being used. Allow choosing larger and
smaller sizes than before.

Before we would only grow it when a single transfer request was larger
than the whole buffer; requests smaller than the whole buffer would just
block if the buffer was full. Also we would not ever shrink the buffer
until someone called Free() manually.

Bug:  850271 , 835353, 828363,  856347 
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: If2f2235a1d5297c63663398b37e1e30791347a3e
Reviewed-on: https://chromium-review.googlesource.com/1105505
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572135}
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/client_test_helper.cc
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/client_test_helper.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/gles2_implementation.cc
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/implementation_base.cc
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/implementation_base.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/mock_transfer_buffer.cc
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/mock_transfer_buffer.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/ring_buffer.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/shared_memory_limits.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/transfer_buffer.h
[modify] https://crrev.com/65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783/gpu/command_buffer/client/transfer_buffer_unittest.cc

Project Member

Comment 16 by bugdroid1@chromium.org, Jul 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6df2efa5313f48302a51d510fa9b5983811c2328

commit 6df2efa5313f48302a51d510fa9b5983811c2328
Author: Brian Sheedy <bsheedy@chromium.org>
Date: Tue Jul 03 17:42:32 2018

Revert "GPU: Grow and shrink transfer buffer"

This reverts commit 65c38f54b0ae666e8b27bfa5aef6d3ab92d4a783.

Reason for revert: Causing DCHECK failures in VR instrumentation tests

Original change's description:
> GPU: Grow and shrink transfer buffer
> 
> Automatically grow the transfer buffer when it is full and shrink it
> when the full capacity is not being used. Allow choosing larger and
> smaller sizes than before.
> 
> Before we would only grow it when a single transfer request was larger
> than the whole buffer; requests smaller than the whole buffer would just
> block if the buffer was full. Also we would not ever shrink the buffer
> until someone called Free() manually.
> 
> Bug:  850271 , 835353, 828363,  856347 
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
> Change-Id: If2f2235a1d5297c63663398b37e1e30791347a3e
> Reviewed-on: https://chromium-review.googlesource.com/1105505
> Commit-Queue: James Darpinian <jdarpinian@chromium.org>
> Reviewed-by: Antoine Labour <piman@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#572135}

TBR=jdarpinian@chromium.org,sunnyps@chromium.org,piman@chromium.org

Change-Id: I031b30234cdcfbd8a4e48c7ebb6fd23312ec10ed
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  850271 , 835353, 828363,  856347 ,  859952 
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/1124822
Reviewed-by: Brian Sheedy <bsheedy@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572277}
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/client_test_helper.cc
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/client_test_helper.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/gles2_implementation.cc
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/implementation_base.cc
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/implementation_base.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/mock_transfer_buffer.cc
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/mock_transfer_buffer.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/ring_buffer.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/shared_memory_limits.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/transfer_buffer.h
[modify] https://crrev.com/6df2efa5313f48302a51d510fa9b5983811c2328/gpu/command_buffer/client/transfer_buffer_unittest.cc

Cc: jdarpinian@chromium.org
Owner: kbr@chromium.org
Taking over from James while he's OOO.

Cc: kbr@chromium.org
Owner: jdarpinian@chromium.org
James isn't OOO yet.

Project Member

Comment 19 by bugdroid1@chromium.org, Jul 13

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1c3333c5acf70c841a66feba15273b1dc7d76da0

commit 1c3333c5acf70c841a66feba15273b1dc7d76da0
Author: James Darpinian <jdarpinian@chromium.org>
Date: Fri Jul 13 01:56:36 2018

GPU: Grow and shrink transfer buffer

Second try after revert 6df2efa5313f48302a51d510fa9b5983811c2328.
Original at https://crrev.com/c/1105505

Automatically grow the transfer buffer when it is full and shrink it
when the full capacity is not being used. Start at a smaller size.

Before we would only grow it when a single transfer request was larger
than the whole buffer; requests smaller than the whole buffer would just
block if the buffer was full. Also we would not ever shrink the buffer
until someone called Free() manually.

Bug:  850271 , 835353, 828363,  856347 
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Id1223267d0ab444afe18f62f45ae5f365131e18c
Reviewed-on: https://chromium-review.googlesource.com/1125503
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#574816}
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/client_test_helper.cc
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/client_test_helper.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/gles2_implementation.cc
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/implementation_base.cc
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/implementation_base.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/mock_transfer_buffer.cc
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/mock_transfer_buffer.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/ring_buffer.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/shared_memory_limits.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/transfer_buffer.cc
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/transfer_buffer.h
[modify] https://crrev.com/1c3333c5acf70c841a66feba15273b1dc7d76da0/gpu/command_buffer/client/transfer_buffer_unittest.cc

There are two more CLs to submit before I'll call this fixed.

Canvas/WebGL: Block RAF to limit queued frames.
http://crrev.com/c/1137709

GPU: Wait for a minimum time before preempting.
http://crrev.com/c/1137710

They both still need work. I've left comments about the remaining work in the CL descriptions, in case I go on paternity leave before I can finish them.
I'm likely going on leave now. The CL I'm currently working on is

cc: Use a counter to keep track of commit deferment requests
https://chromium-review.googlesource.com/c/chromium/src/+/1139224

This is a prerequisite to http://crrev.com/c/1137709 (Canvas/WebGL: Block RAF to limit queued frames).
Owner: ericrk@chromium.org
Project Member

Comment 23 by bugdroid1@chromium.org, Aug 29

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/19aa861c604a5a0c5a9170344be264bab7dea173

commit 19aa861c604a5a0c5a9170344be264bab7dea173
Author: Eric Karl <ericrk@chromium.org>
Date: Wed Aug 29 22:15:35 2018

Remove OnCompositorLockStateChanged from CompositorObserver

This function was only used in a single test which ensured that it was
called. Removing it.

TBR=sadrul for uninteresting chnage (removing unused interface fn) in power_event_observer.cc
TBR=thakis for uninteresting change (removing unused interface fn) in chrome/browser/*

Bug: 835353
Change-Id: Icdd8b073e84f54a43d31d2de1690ed6280c194bb
Reviewed-on: https://chromium-review.googlesource.com/1195671
Reviewed-by: Eric Karl <ericrk@chromium.org>
Reviewed-by: ccameron <ccameron@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587321}
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ash/system/power/power_event_observer.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/chrome/browser/metrics/browser_window_histogram_helper.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/chrome/browser/ui/views/omnibox/omnibox_view_views.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/content/browser/renderer_host/delegated_frame_host.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/content/browser/renderer_host/delegated_frame_host.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/aura/window_tree_host.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/aura/window_tree_host.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/compositor.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/compositor_observer.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/compositor_unittest.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/layer_unittest.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/recyclable_compositor_mac.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/test/draw_waiter_for_test.cc
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/compositor/test/draw_waiter_for_test.h
[modify] https://crrev.com/19aa861c604a5a0c5a9170344be264bab7dea173/ui/views/controls/scroll_view_unittest.cc

Creating blocking bugs for various sub-issues to organize merge requests to 70.
Blockedon: 879649
Blockedon: 879656
Blockedon: 879658
Project Member

Comment 28 by bugdroid1@chromium.org, Sep 1

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/30e36bccb4ba16bd0528901e6f371f33fb13871c

commit 30e36bccb4ba16bd0528901e6f371f33fb13871c
Author: Eric Karl <ericrk@chromium.org>
Date: Sat Sep 01 16:15:00 2018

Bump WebGL stream to high-priority on Adreno 3xx.

WebGL has performance issues on Adreno 3xx when we switch contexts
from/to the WebGL context mid-frame.

To avoid this issue, we can bump scheduler priority for the WebGL stream
to high, avoiding most mid-frame interruptions. In local testing this
(in combination with a backpressure fix) addresses known issues.

Bug: 879649, 835353
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I896456b29f3b80e3e443720b9ce444e6825c1c03
Reviewed-on: https://chromium-review.googlesource.com/1200242
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588287}
[modify] https://crrev.com/30e36bccb4ba16bd0528901e6f371f33fb13871c/content/common/gpu_stream_constants.h
[modify] https://crrev.com/30e36bccb4ba16bd0528901e6f371f33fb13871c/content/renderer/renderer_blink_platform_impl.cc
[modify] https://crrev.com/30e36bccb4ba16bd0528901e6f371f33fb13871c/gpu/config/gpu_driver_bug_list.json
[modify] https://crrev.com/30e36bccb4ba16bd0528901e6f371f33fb13871c/gpu/config/gpu_workaround_list.txt

Project Member

Comment 29 by bugdroid1@chromium.org, Sep 4

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b76e1f535c4248882bebebe53cf329e245c6efe1

commit b76e1f535c4248882bebebe53cf329e245c6efe1
Author: Eric Karl <ericrk@chromium.org>
Date: Tue Sep 04 13:24:22 2018

cc: Use a counter to keep track of commit deferment requests

Before, one call to SetDeferCommits(false) would clobber any number of
SetDeferCommits(true) calls that happened before. This change refactors
SetDeferCommits(bool) into DeferCommits() that returns a
ScopedDeferCommits object. We stop deferring commits when the
ScopedDeferCommits object is destroyed.

This required a minor refactor to WebViewImpl, ChromeClientImpl and
SimCompositor. Previously these classes would defer / un-defer commits
independently, relying on global state. Now ChromeClientImpl and
SimCompositor interact with WebViewImpl who maintains the state of
commit deferral.

Bug: 835353, 879656
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I50fd8f54ff908b703643f670cabea986426cc935
Reviewed-on: https://chromium-review.googlesource.com/1195704
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: ccameron <ccameron@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588500}
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest_context.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/public/platform/web_layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/page/chrome_client_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/android/delegated_frame_host_android_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock_unittest.cc

Project Member

Comment 30 by bugdroid1@chromium.org, Sep 4

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b76e1f535c4248882bebebe53cf329e245c6efe1

commit b76e1f535c4248882bebebe53cf329e245c6efe1
Author: Eric Karl <ericrk@chromium.org>
Date: Tue Sep 04 13:24:22 2018

cc: Use a counter to keep track of commit deferment requests

Before, one call to SetDeferCommits(false) would clobber any number of
SetDeferCommits(true) calls that happened before. This change refactors
SetDeferCommits(bool) into DeferCommits() that returns a
ScopedDeferCommits object. We stop deferring commits when the
ScopedDeferCommits object is destroyed.

This required a minor refactor to WebViewImpl, ChromeClientImpl and
SimCompositor. Previously these classes would defer / un-defer commits
independently, relying on global state. Now ChromeClientImpl and
SimCompositor interact with WebViewImpl who maintains the state of
commit deferral.

Bug: 835353, 879656
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I50fd8f54ff908b703643f670cabea986426cc935
Reviewed-on: https://chromium-review.googlesource.com/1195704
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: ccameron <ccameron@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588500}
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest_context.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/public/platform/web_layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/page/chrome_client_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/android/delegated_frame_host_android_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock_unittest.cc

Project Member

Comment 31 by bugdroid1@chromium.org, Sep 4

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b76e1f535c4248882bebebe53cf329e245c6efe1

commit b76e1f535c4248882bebebe53cf329e245c6efe1
Author: Eric Karl <ericrk@chromium.org>
Date: Tue Sep 04 13:24:22 2018

cc: Use a counter to keep track of commit deferment requests

Before, one call to SetDeferCommits(false) would clobber any number of
SetDeferCommits(true) calls that happened before. This change refactors
SetDeferCommits(bool) into DeferCommits() that returns a
ScopedDeferCommits object. We stop deferring commits when the
ScopedDeferCommits object is destroyed.

This required a minor refactor to WebViewImpl, ChromeClientImpl and
SimCompositor. Previously these classes would defer / un-defer commits
independently, relying on global state. Now ChromeClientImpl and
SimCompositor interact with WebViewImpl who maintains the state of
commit deferral.

Bug: 835353, 879656
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I50fd8f54ff908b703643f670cabea986426cc935
Reviewed-on: https://chromium-review.googlesource.com/1195704
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: ccameron <ccameron@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588500}
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/test/layer_tree_test.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/cc/trees/layer_tree_host_unittest_context.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/browser/renderer_host/compositor_impl_android.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/content/renderer/gpu/layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/public/platform/web_layer_tree_view.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/exported/web_view_impl.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/page/chrome_client_impl.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/third_party/blink/renderer/core/testing/sim/sim_compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/android/delegated_frame_host_android_unittest.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.cc
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock.h
[modify] https://crrev.com/b76e1f535c4248882bebebe53cf329e245c6efe1/ui/compositor/compositor_lock_unittest.cc

Project Member

Comment 32 by bugdroid1@chromium.org, Sep 8

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/67b6d035baea05e2d01946dc85355e09e844f3e8

commit 67b6d035baea05e2d01946dc85355e09e844f3e8
Author: Eric Karl <ericrk@chromium.org>
Date: Sat Sep 08 15:52:01 2018

Add missing |host_| check to DeferCommits in CompositorImplAndroid

We should have checked for |host_| before calling DeferCommits in
the last CL. Adding this to match previous behavior.

TBR=khushalsagar@chromium.org

Bug: 881706, 835353, 879656
Change-Id: I27a1e6fc67478b2e50c33ae48339adb58749b980
Reviewed-on: https://chromium-review.googlesource.com/1215084
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589782}
[modify] https://crrev.com/67b6d035baea05e2d01946dc85355e09e844f3e8/content/browser/renderer_host/compositor_impl_android.cc

Project Member

Comment 33 by bugdroid1@chromium.org, Sep 8

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0dd63a3394566a94619974f91ce14f8d7680512c

commit 0dd63a3394566a94619974f91ce14f8d7680512c
Author: Eric Karl <ericrk@chromium.org>
Date: Sat Sep 08 17:47:51 2018

Canvas/WebGL: Defer commits to limit queued frames.

This change adds more backpressure to Canvas/WebGL rendering in GPU
bound situations.

Before, the renderer could have three or four frames of drawing commands
queued and waiting for execution by the GPU process. The GPU process
does not know which drawing commands are associated with which display
frame. Sometimes it would run multiple frames of queued drawing commands
in one display frame, causing frame rate hiccups.

Now when the TextureLayer has more than one buffer in flight, it calls
DeferCommits to block the next requestAnimationFrame callback from
running until one of the buffers is returned, indicating that the GPU
process has executed the commands for that frame. The shorter pipeline
reduces latency and prevents the GPU process from trying to execute
multiple Canvas/WebGL frames in one display frame.

Bug: 835353, 879658
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I7e5484add5fbd79757b205b1124ed7c2c5836dbb
Reviewed-on: https://chromium-review.googlesource.com/1199699
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589784}
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/cc/layers/texture_layer.cc
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/cc/layers/texture_layer.h
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/cc/layers/texture_layer_unittest.cc
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
[modify] https://crrev.com/0dd63a3394566a94619974f91ce14f8d7680512c/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc

Will, with the CLs above landed, perf issues should be addressed for your test case. Can you try out Chrome Canary on your device and let me know if you see any remaining problems?

We're still working on more general fixes, but the above is a scoped set of fixes that we should be able to merge to Chrome 70.

Thanks!
Hi Eric! This is excellent. I definitely notice a stable 30Hz on a Moto G3 now. However, I did a performance capture in Chrome Dev Tools, and I'm actually a little confused as to why the originally linked demo doesn't hit 60Hz. Both CPU and GPU seem to be completing in less than 16.66ms for the most part. Do you know why this is?
d3gs_perf_capture.png
138 KB View Download
Project Member

Comment 36 by bugdroid1@chromium.org, Sep 13

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0405474407dff675506e6895f267b3bb3495a388

commit 0405474407dff675506e6895f267b3bb3495a388
Author: Eric Karl <ericrk@chromium.org>
Date: Thu Sep 13 22:18:06 2018

Revert "Canvas/WebGL: Defer commits to limit queued frames."

This reverts commit 0dd63a3394566a94619974f91ce14f8d7680512c.

Reason for revert: Causes flakiness for a large number of tests. See  crbug.com/882951 

Original change's description:
> Canvas/WebGL: Defer commits to limit queued frames.
>
> This change adds more backpressure to Canvas/WebGL rendering in GPU
> bound situations.
>
> Before, the renderer could have three or four frames of drawing commands
> queued and waiting for execution by the GPU process. The GPU process
> does not know which drawing commands are associated with which display
> frame. Sometimes it would run multiple frames of queued drawing commands
> in one display frame, causing frame rate hiccups.
>
> Now when the TextureLayer has more than one buffer in flight, it calls
> DeferCommits to block the next requestAnimationFrame callback from
> running until one of the buffers is returned, indicating that the GPU
> process has executed the commands for that frame. The shorter pipeline
> reduces latency and prevents the GPU process from trying to execute
> multiple Canvas/WebGL frames in one display frame.
>
> Bug: 835353, 879658
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
> Change-Id: I7e5484add5fbd79757b205b1124ed7c2c5836dbb
> Reviewed-on: https://chromium-review.googlesource.com/1199699
> Commit-Queue: Eric Karl <ericrk@chromium.org>
> Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
> Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#589784}

TBR=chrishtr@chromium.org,sunnyps@chromium.org,ericrk@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 835353, 879658,  882951 ,  883364 ,  883358 ,  883057 ,  882618 
Change-Id: I3bee10c8f43c2868966cedb638afbb4b0d9babab
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Reviewed-on: https://chromium-review.googlesource.com/1224456
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591181}
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/cc/layers/texture_layer.cc
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/cc/layers/texture_layer.h
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/cc/layers/texture_layer_unittest.cc
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
[modify] https://crrev.com/0405474407dff675506e6895f267b3bb3495a388/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc

Blockedon: 882951
Project Member

Comment 38 by bugdroid1@chromium.org, Sep 14

Labels: merge-merged-3538
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/76c456ca17976b3fcc977527b21f883ebc5274fe

commit 76c456ca17976b3fcc977527b21f883ebc5274fe
Author: Eric Karl <ericrk@chromium.org>
Date: Fri Sep 14 20:33:42 2018

Bump WebGL stream to high-priority on Adreno 3xx.

WebGL has performance issues on Adreno 3xx when we switch contexts
from/to the WebGL context mid-frame.

To avoid this issue, we can bump scheduler priority for the WebGL stream
to high, avoiding most mid-frame interruptions. In local testing this
(in combination with a backpressure fix) addresses known issues.

TBR=ericrk@chromium.org

(cherry picked from commit 30e36bccb4ba16bd0528901e6f371f33fb13871c)

Bug: 879649, 835353
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I896456b29f3b80e3e443720b9ce444e6825c1c03
Reviewed-on: https://chromium-review.googlesource.com/1200242
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#588287}
Reviewed-on: https://chromium-review.googlesource.com/1227300
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/branch-heads/3538@{#425}
Cr-Branched-From: 79f7c91a2b2a2932cd447fa6f865cb6662fa8fa6-refs/heads/master@{#587811}
[modify] https://crrev.com/76c456ca17976b3fcc977527b21f883ebc5274fe/content/common/gpu_stream_constants.h
[modify] https://crrev.com/76c456ca17976b3fcc977527b21f883ebc5274fe/content/renderer/renderer_blink_platform_impl.cc
[modify] https://crrev.com/76c456ca17976b3fcc977527b21f883ebc5274fe/gpu/config/gpu_driver_bug_list.json
[modify] https://crrev.com/76c456ca17976b3fcc977527b21f883ebc5274fe/gpu/config/gpu_workaround_list.txt

Project Member

Comment 39 by bugdroid1@chromium.org, Sep 17

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/07e6a68dfca48c7a1e5ae6ac3fc4a8db4ef63e82

commit 07e6a68dfca48c7a1e5ae6ac3fc4a8db4ef63e82
Author: Eric Karl <ericrk@chromium.org>
Date: Mon Sep 17 20:48:26 2018

DescheduleUntilFinishedCHROMIUM after each GL frame on Android

The DescheduleUntilFinishedCHROMIUM command was added for mac to
provide backpressure to WebGL workflows. Despite its name, the call
actually deschedules until the *previous* WebGL frame is finished,
allowing 2 frames of backpressure.

Bug: 835353, 879658
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I476a585086cf4e36c4685162119368503e3ec53a
Reviewed-on: https://chromium-review.googlesource.com/1227184
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591806}
[modify] https://crrev.com/07e6a68dfca48c7a1e5ae6ac3fc4a8db4ef63e82/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc

Hi Will! I think what you're seeing may be an issue with the performance profiler in Devtools.

I tried on a build from a couple days ago and the performance profiler seems to be ignoring certain GPU work in its trace... taking a trace using Chrome's about:tracing UI, I see that the GPU thread is busy waiting on swap. See attached images.

I tried on today's canary and was seeing the work in the devtools performance trace as well, so hopefully this is fixed.
devtools.png
16.3 KB View Download
busy_gpu.png
76.7 KB View Download
Project Member

Comment 41 by bugdroid1@chromium.org, Sep 21

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/527dfdef5ad73b9803d329e773e3dacd3abbdfae

commit 527dfdef5ad73b9803d329e773e3dacd3abbdfae
Author: Eric Karl <ericrk@chromium.org>
Date: Fri Sep 21 21:25:28 2018

DescheduleUntilFinishedCHROMIUM after each GL frame on Android

The DescheduleUntilFinishedCHROMIUM command was added for mac to
provide backpressure to WebGL workflows. Despite its name, the call
actually deschedules until the *previous* WebGL frame is finished,
allowing 2 frames of backpressure.

TBR=ericrk@chromium.org

(cherry picked from commit 07e6a68dfca48c7a1e5ae6ac3fc4a8db4ef63e82)

Bug: 835353, 879658
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I476a585086cf4e36c4685162119368503e3ec53a
Reviewed-on: https://chromium-review.googlesource.com/1227184
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#591806}
Reviewed-on: https://chromium-review.googlesource.com/1239417
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/branch-heads/3538@{#566}
Cr-Branched-From: 79f7c91a2b2a2932cd447fa6f865cb6662fa8fa6-refs/heads/master@{#587811}
[modify] https://crrev.com/527dfdef5ad73b9803d329e773e3dacd3abbdfae/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc

Labels: Merge-Merged-70-3538
The following revision refers to this bug: 
https://chromium.googlesource.com/chromium/src.git/+/527dfdef5ad73b9803d329e773e3dacd3abbdfae

Commit: 527dfdef5ad73b9803d329e773e3dacd3abbdfae
Author: ericrk@chromium.org
Commiter: ericrk@chromium.org
Date: 2018-09-21 21:25:28 +0000 UTC

DescheduleUntilFinishedCHROMIUM after each GL frame on Android

The DescheduleUntilFinishedCHROMIUM command was added for mac to
provide backpressure to WebGL workflows. Despite its name, the call
actually deschedules until the *previous* WebGL frame is finished,
allowing 2 frames of backpressure.

TBR=ericrk@chromium.org

(cherry picked from commit 07e6a68dfca48c7a1e5ae6ac3fc4a8db4ef63e82)

Bug: 835353, 879658
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I476a585086cf4e36c4685162119368503e3ec53a
Reviewed-on: https://chromium-review.googlesource.com/1227184
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#591806}
Reviewed-on: https://chromium-review.googlesource.com/1239417
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/branch-heads/3538@{#566}
Cr-Branched-From: 79f7c91a2b2a2932cd447fa6f865cb6662fa8fa6-refs/heads/master@{#587811}
Status: Fixed (was: Started)
Owner: sunn...@chromium.org
Status: Assigned (was: Fixed)
Actually, over to sunnyps@ to close once the alternative workaround for bumping WebGL priority is landed. Thanks!
Project Member

Comment 45 by bugdroid1@chromium.org, Sep 27

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5358dbe0785f91b2208e77853e6ff3691fc1d43e

commit 5358dbe0785f91b2208e77853e6ff3691fc1d43e
Author: Sunny Sachanandani <sunnyps@chromium.org>
Date: Thu Sep 27 02:45:42 2018

Defer returning resources from display compositor

During aggregation, SurfaceAggregator marks all resources used for a
draw in the resource provider.  This has the side effect of deleting
unused resources and their textures, generating sync tokens, and
returning the resources to the client.  This involves GL work which is
issued before drawing commands, and gets prioritized by GPU scheduler
because sync token dependencies aren't issued until the draw.

This CL extends ScopedBatchReturnResources to include all places where
the resource provider deletes resouces including marking used resources,
and makes Display hold a ScopedBatchReturnResources for the entire
duration of draw including surface aggregation.  This defers the GL
commands for deleting resources to after the draw, and prevents context
switching because the scheduler knows sync token dependencies at that
time.

This has a big impact on WebGL performance in general, and especially on
certain older Adreno 3xx devices.


Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I0e0ba47b54c3bb2c0a7bc344f65f2caba7d8c117
Bug: 835353
Reviewed-on: https://chromium-review.googlesource.com/1200414
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594573}
[modify] https://crrev.com/5358dbe0785f91b2208e77853e6ff3691fc1d43e/components/viz/service/display/display.cc
[modify] https://crrev.com/5358dbe0785f91b2208e77853e6ff3691fc1d43e/components/viz/service/display/display_resource_provider.cc
[modify] https://crrev.com/5358dbe0785f91b2208e77853e6ff3691fc1d43e/components/viz/service/display/display_resource_provider.h
[modify] https://crrev.com/5358dbe0785f91b2208e77853e6ff3691fc1d43e/components/viz/service/display/display_resource_provider_unittest.cc

This sounds great. When you say 'This has a big impact on WebGL performance in general, and especially on certain older Adreno 3xx devices.', do you have any numbers for the improvements you're observing?
On Nexus 5X, frame times for webgl particles demo[1] goes from ~54ms to
~36ms[2].  It hasn't recovered to pre-regression levels because we changed
the CPU/GPU frequency on the 5X in our benchmarks for stability[3] in that
time.

The above CL hasn't shown a change on Nexus 5 because that was addressed by
Eric's webgl context priority bump workaround[4] on those devices.  The
above CL should let us remove that workaround.  Eric has verified locally
this.  An estimate for the improvement would be frame times go from ~54ms
to ~38ms which is the improvement[5] we saw with the workaround.

[1]
https://cs.chromium.org/chromium/src/tools/perf/page_sets/rendering/tough_webgl_cases.py?rcl=9ce0aebce8925c536dec9d63e6c8277ec239ec92&l=53
[2]
https://chromeperf.appspot.com/report?sid=2fef004a35007d7d8466f0601d20517363f52f265f2e35bbe885dcdf4741abc7&start_rev=583583&end_rev=595142
[3]
https://chromium.googlesource.com/catapult.git/+/88dc49aaadb0d1295042023255f6bdceb706fa71
[4]
https://chromium.googlesource.com/chromium/src.git/+/30e36bccb4ba16bd0528901e6f371f33fb13871c
[5]
https://chromeperf.appspot.com/report?sid=de8cdaeff5820dcd5155e8cdd79d17452ecda158e02ec9e440629636a6216cce&start_rev=582445&end_rev=595152
Great work Sunny and Eric!

Project Member

Comment 49 by bugdroid1@chromium.org, Nov 1

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/036c0ce3185444f745a514111dc2e8160a8356a6

commit 036c0ce3185444f745a514111dc2e8160a8356a6
Author: Sunny Sachanandani <sunnyps@chromium.org>
Date: Thu Nov 01 03:16:24 2018

Revert "Bump WebGL stream to high-priority on Adreno 3xx."

This reverts commit 30e36bccb4ba16bd0528901e6f371f33fb13871c.

Reason for revert: Display compositor doesn't cause mid-frame flushes any more, so workaround isn't needed.

Original change's description:
> Bump WebGL stream to high-priority on Adreno 3xx.
> 
> WebGL has performance issues on Adreno 3xx when we switch contexts
> from/to the WebGL context mid-frame.
> 
> To avoid this issue, we can bump scheduler priority for the WebGL stream
> to high, avoiding most mid-frame interruptions. In local testing this
> (in combination with a backpressure fix) addresses known issues.
> 
> Bug: 879649, 835353
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
> Change-Id: I896456b29f3b80e3e443720b9ce444e6825c1c03
> Reviewed-on: https://chromium-review.googlesource.com/1200242
> Reviewed-by: Nasko Oskov <nasko@chromium.org>
> Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
> Commit-Queue: Eric Karl <ericrk@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#588287}

TBR=nasko@chromium.org,sunnyps@chromium.org,ericrk@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 879649, 835353
Change-Id: I0e0c75f5162789b457c2a4cdfa29dc8557972208
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/c/1311658
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604505}
[modify] https://crrev.com/036c0ce3185444f745a514111dc2e8160a8356a6/content/public/common/gpu_stream_constants.h
[modify] https://crrev.com/036c0ce3185444f745a514111dc2e8160a8356a6/content/renderer/renderer_blink_platform_impl.cc
[modify] https://crrev.com/036c0ce3185444f745a514111dc2e8160a8356a6/gpu/config/gpu_driver_bug_list.json
[modify] https://crrev.com/036c0ce3185444f745a514111dc2e8160a8356a6/gpu/config/gpu_workaround_list.txt

Sign in to add a comment