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

Issue 801140 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Jan 2018
Cc:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug-Regression



Sign in to add a comment

40% regression in blink_perf.canvas at 528068:528137

Project Member Reported by hjd@chromium.org, Jan 11 2018

Issue description

See the link to graphs below.
 
Project Member

Comment 1 by 42576172...@developer.gserviceaccount.com, Jan 11 2018

All graphs for this bug:
  https://chromeperf.appspot.com/group_report?bug_id=801140

(For debugging:) Original alerts at time of bug-filing:
  https://chromeperf.appspot.com/group_report?sid=95dc3425f48049b501a6db57709c5e17b83b94bd5be380fcc1cbbf2d75225c94


Bot(s) for this bug's original alert(s):

android-webview-nexus6
Project Member

Comment 3 by 42576172...@developer.gserviceaccount.com, Jan 11 2018

Cc: xlai@chromium.org
Owner: xlai@chromium.org
Status: Assigned (was: Untriaged)

=== Auto-CCing suspected CL author xlai@chromium.org ===

Hi xlai@chromium.org, the bisect results pointed to your CL, please take a look at the
results.


=== BISECT JOB RESULTS ===
Perf regression found with culprit

Suspected Commit
  Author : xlai
  Commit : 95fadc78e3995e16f8f5d11707b05bf27abcff57
  Date   : Tue Jan 09 21:17:37 2018
  Subject: Replace ImageBuffer with CanvasResourceProvider in OffscreenCanvas

Bisect Details
  Configuration: android_webview_nexus6_aosp_perf_bisect
  Benchmark    : blink_perf.canvas
  Metric       : transferFromImageBitmap/transferFromImageBitmap
  Change       : 41.84% | 7262.62223898 -> 4223.76742337

Revision             Result                  N
chromium@528067      7262.62 +- 257.559      6      good
chromium@528102      7271.58 +- 271.967      6      good
chromium@528111      7099.45 +- 577.739      6      good
chromium@528113      7208.12 +- 408.233      6      good
chromium@528114      4364.39 +- 149.587      6      bad       <--
chromium@528116      4352.72 +- 98.5267      6      bad
chromium@528120      4342.06 +- 203.887      6      bad
chromium@528137      4223.77 +- 195.983      6      bad

Please refer to the following doc on diagnosing blink_perf regressions:
  https://chromium.googlesource.com/chromium/src/+/master/docs/speed/benchmark_harnesses/blink_perf.md

To Run This Test
  src/tools/perf/run_benchmark -v --browser=android-webview --output-format=chartjson --upload-results --pageset-repeat=1 --also-run-disabled-tests blink_perf.canvas

More information on addressing performance regressions:
  http://g.co/ChromePerformanceRegressions

Debug information about this bisect:
  https://chromeperf.appspot.com/buildbucket_job_status/8957695527210999360


For feedback, file a bug with component Speed>Bisection

Comment 4 by xlai@chromium.org, Jan 11 2018

Cc: junov@chromium.org
Status: Started (was: Assigned)
It looks like switching AcceleratedImageBufferSurface to CanvasResourceProvider (kAcceleratedResourceUsage) causes the regression. I suspect that it's because the way Snapshot is taken is implemented differently between the two classes.

In CanvasResourceProvider::Snapshot(), the AcceleratedStaticBitmapImage->RetainOriginalSkImageForCopyOnWrite() is not invoked. But this is invoked in 
AcceleratedImageBufferSurface::MakeNewSnapshot().

junov@: Do you have an idea of what this function RetainOriginalSkImageForCopyOnWrite is used for in this context? 

Comment 5 by xlai@chromium.org, Jan 11 2018

A direct switch from AcceleratedStaticBitmapImage to CanvasResourceProvider in
SharedGpuContextTest.cpp will cause
MailboxSharedGpuContextTest.MailboxCacheSurvivesSkiaRecycling unit test to fail.

This implies that the cached gpu::Mailbox (https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/graphics/gpu/GraphicsContext3DUtils.h?l=41) is not made used in CanvasResourceProvider.
So the GrTexture is being created over and over again, causing a preformance
regression.
Project Member

Comment 6 by bugdroid1@chromium.org, Jan 12 2018

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

commit 18d54b65156a1cbed1090b0b77773a87087c0e0b
Author: xlai <xlai@chromium.org>
Date: Fri Jan 12 16:41:59 2018

Fix perf regression on replacing AcceleratedImageBufferSurface with CanvasResourceProvider

AcceleratedImageBufferSurface::NewImageSnapshot() did call
RetainOriginalSkImageForCopyOnWrite(), which is essential in triggering texture
caching. CanvasResourceProvider::Snapshot() should do the same thing.


Bug:  801140 
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I1a3880d9db7b50c3b7cdf17a638608fd9628651a
Reviewed-on: https://chromium-review.googlesource.com/862687
Commit-Queue: Olivia Lai <xlai@chromium.org>
Reviewed-by: Justin Novosad <junov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#528968}
[modify] https://crrev.com/18d54b65156a1cbed1090b0b77773a87087c0e0b/third_party/WebKit/Source/platform/graphics/CanvasResourceProvider.cpp

Comment 7 by xlai@chromium.org, Jan 15 2018

Status: Fixed (was: Started)
After my fix r528968 has been landed, the perf graphs reported in https://chromeperf.appspot.com/group_report?bug_id=801140 have all returned back to normal. So I'll mark this issue as fixed.
Project Member

Comment 8 by bugdroid1@chromium.org, Jan 23 2018

Labels: merge-merged-3282
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/152957dd913e7f22712828839d237d38a9d9f10c

commit 152957dd913e7f22712828839d237d38a9d9f10c
Author: Chris Harrelson <chrishtr@chromium.org>
Date: Tue Jan 23 00:37:14 2018

Fix perf regression on replacing AcceleratedImageBufferSurface with CanvasResourceProvider

AcceleratedImageBufferSurface::NewImageSnapshot() did call
RetainOriginalSkImageForCopyOnWrite(), which is essential in triggering texture
caching. CanvasResourceProvider::Snapshot() should do the same thing.

TBR=xlai@chromium.org

(cherry picked from commit 18d54b65156a1cbed1090b0b77773a87087c0e0b)

Bug:  801140 ,800071
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I1a3880d9db7b50c3b7cdf17a638608fd9628651a
Reviewed-on: https://chromium-review.googlesource.com/862687
Commit-Queue: Olivia Lai <xlai@chromium.org>
Reviewed-by: Justin Novosad <junov@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#528968}
Reviewed-on: https://chromium-review.googlesource.com/879745
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/branch-heads/3282@{#578}
Cr-Branched-From: 5fdc0fab22ce7efd32532ee989b223fa12f8171e-refs/heads/master@{#520840}
[modify] https://crrev.com/152957dd913e7f22712828839d237d38a9d9f10c/third_party/WebKit/Source/platform/graphics/CanvasResourceProvider.cpp

Sign in to add a comment