aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
Commit message (Collapse)AuthorAge
...
* Fix bug in SkGifCodec / Switch SkImageDec tests to use CodecGravatar msarett2016-03-01
| | | | | | | | | | | | SkImageDecoder is still used throughout tests, tools, gms etc. Deleting it from tests is an easy first step. Bonus is that we add tests of SkCodec. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1733863003 Review URL: https://codereview.chromium.org/1733863003
* Add cap and builder feature for multisample interpolationGravatar cdalton2016-03-01
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1722363002 Review URL: https://codereview.chromium.org/1722363002
* remove untested blit optimizationGravatar caryclark2016-03-01
| | | | | | | | R=mtklein@google.com BUG=skia:5016 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746423003 Review URL: https://codereview.chromium.org/1746423003
* Move some GrAuditTrail fuctions to cpp fileGravatar joshualitt2016-03-01
| | | | | | | | TBR=ethannicholas@google.com BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1753753002 Review URL: https://codereview.chromium.org/1753753002
* SampleApp now displays gamma-correct content in "S32" and "F16" modes. The ↵Gravatar brianosman2016-03-01
| | | | | | | | | | | default framebuffer is always (?) sRGB, but querying it to determine that is difficult or impossible. In addition, when running in "L32" mode, we stil want to exhibit the old behavior, where we pretended that it was not sRGB. Thus, set the pixel config of the render target based on the window's color and profile types. That triggers our code to turn on linear->sRGB conversion-on-write in flushRenderTarget. NOte: Angle does not display correctly, due to limitations in the set of ES2 extensions it exposes. However, it can still be used to generate gamma-correct images (via DM, etc...). BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1752473002 Review URL: https://codereview.chromium.org/1752473002
* SkDebugCanvas ignore batch bounds if they are offscreenGravatar joshualitt2016-03-01
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1754633002 Review URL: https://codereview.chromium.org/1754633002
* Add swizzle for rgb8888.Gravatar herb2016-03-01
| | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746153002 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review URL: https://codereview.chromium.org/1746153002
* Revert of Progress on gamma-correctness in the GPU backend. Fixed conversion ↵Gravatar brianosman2016-02-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | of color and profile type to pix… (patchset #3 id:40001 of https://codereview.chromium.org/1746253002/ ) Reason for revert: Fixing the build. Original issue's description: > Progress on gamma-correctness in the GPU backend. Fixed conversion of color and profile type to pixel config, which makes many things "just work". > > Added (color=8888|f16|srgb) option to gpu configurations, along with gpuf16, gpusrgb, and anglesrgb predefined configs. Runs the gpu backend in gamma-correct mode (with either FP16 linear or sRGB 8888 frambuffers). > > > BUG=skia: > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746253002 > > Committed: https://skia.googlesource.com/skia/+/eef980270d3385fee340eb1633962fe3ba8b7132 TBR=mtklein@google.com,egdaniel@google.com,bsalomon@google.com # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1748823002
* Move drawDRRect back to GrDrawContextGravatar robertphillips2016-02-29
| | | | | | | | This still leaves GrDrawContext fiddling around with specialized fragment processors but it does allow for different handling of the DRRects (e.g., for instanced drawing). GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1750533003 Review URL: https://codereview.chromium.org/1750533003
* Progress on gamma-correctness in the GPU backend. Fixed conversion of color ↵Gravatar brianosman2016-02-29
| | | | | | | | | | | and profile type to pixel config, which makes many things "just work". Added (color=8888|f16|srgb) option to gpu configurations, along with gpuf16, gpusrgb, and anglesrgb predefined configs. Runs the gpu backend in gamma-correct mode (with either FP16 linear or sRGB 8888 frambuffers). BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746253002 Review URL: https://codereview.chromium.org/1746253002
* Simplify the poly union.Gravatar herb2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1752433002 Review URL: https://codereview.chromium.org/1752433002
* Fix overlooked bilerp fallback.Gravatar herb2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746093002 Review URL: https://codereview.chromium.org/1746093002
* Remove internal calls to SkImage::getTextureGravatar bsalomon2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1744243002 Review URL: https://codereview.chromium.org/1744243002
* Disabling mipmap generation until anisotropic mipmap levels are generated.Gravatar cblume2016-02-29
| | | | | | | BUG=590804 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1744413002 Review URL: https://codereview.chromium.org/1744413002
* Improve horizontal baseline detection.Gravatar bungeman2016-02-29
| | | | | | | | | | | | | | | | | | | The goal is to hint the baseline when hinting is possible, which is to say when the glyphs are be aligned with the pixel grid. The current code has three shortcomings. 1. correctly snaps when the horizontal baseline is on the x-axis but not when on the y-axis. Instead it is snapping the horizontal baseline when there is y-skew. 2. tests against the full device matrix instead of the relaxed matrix used by the scaler context. 3. has range issues when relaxing the matrix. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1740163002 Review URL: https://codereview.chromium.org/1740163002
* Render batch bounds as stroke rectsGravatar joshualitt2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745063002 Review URL: https://codereview.chromium.org/1745063002
* This CL adds glTexStorage support.Gravatar cblume2016-02-29
| | | | | | | | | | | | | | | For us to take advantage of immutable texture storage, we would need to know in advance that the texture will not be changing allocated size. In some cases we cannot know this in advance: we will sometimes later need mipmaps to be allocated and generated. However, in the cases where we know in advance that we are allocating mipmaps we can take advantage of immutable storage. BUG=476416 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1570173004 Review URL: https://codereview.chromium.org/1570173004
* Modernize SkSpinlock.Gravatar mtklein2016-02-29
| | | | | | | | | | | | | | | | | | | | | | | | - Use std::atomic directly. - No more need for SkPODSpinlock or SK_DECLARE_STATIC_SPINLOCK. Now simple code like this works as you'd hope: static SkSpinlock gLock; That is, it starts unlocked and there's no static initializer. std::atomic_flag would make this terser and standard-guaranteed, but ATOMIC_FLAG_INIT caused not-yet-implemented errors on MSVC 2013. The generated code for this approach is identical. It appears the implicit constructor is constexpr when all the member initializers are. I'm hoping this way of producing constexpr constructors without typing "constexpr" gives us a way to eliminate more SkFoo / SkBaseFoo distinctions and SK_DECLARE_STATIC_FOO. This was certainly the easiest. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1734383002 Review URL: https://codereview.chromium.org/1734383002
* Use enclosing int rect for picture shader tilesGravatar fmalita2016-02-29
| | | | | | | | | | To avoid rounding to zero for very small tiles. BUG=chromium:590447 R=reed@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1749763002 Review URL: https://codereview.chromium.org/1749763002
* Fix uninitialized variable warning.Gravatar herb2016-02-29
| | | | | | | | CQ_INCLUDE_TRYBOTS=client.skia.compile:Build-Ubuntu-GCC-Mips64-Release-Android-Trybot GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1743273002 Review URL: https://codereview.chromium.org/1743273002
* tile spansGravatar herb2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1719333002 Review URL: https://codereview.chromium.org/1719333002
* Add abilitly to query audit trail for batches by draw opGravatar joshualitt2016-02-29
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745513002 Committed: https://skia.googlesource.com/skia/+/9b48a6e3f862076018cc7d63b180b6340f4873cd Review URL: https://codereview.chromium.org/1745513002
* Enable RAW codec for WindowsGravatar yujieqin2016-02-29
| | | | | | | | | | | | * Fix the exception catching * Set preprocessor differently for MSVC BUG=skia:4889(b/26958348) GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1738913002 Committed: https://skia.googlesource.com/skia/+/474e4c3dd28b67f590851321f15d9983ef7fd031 Review URL: https://codereview.chromium.org/1738913002
* Revert of Add abilitly to query audit trail for batches by draw op (patchset ↵Gravatar joshualitt2016-02-29
| | | | | | | | | | | | | | | | | | | | | | | | #4 id:60001 of https://codereview.chromium.org/1745513002/ ) Reason for revert: kInvalidID conflicts with an older xCode #define Original issue's description: > Add abilitly to query audit trail for batches by draw op > > BUG=skia: > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745513002 > > Committed: https://skia.googlesource.com/skia/+/9b48a6e3f862076018cc7d63b180b6340f4873cd TBR=ethannicholas@google.com,jcgregorio@google.com,joshualitt@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1747893002
* Add abilitly to query audit trail for batches by draw opGravatar joshualitt2016-02-29
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745513002 Review URL: https://codereview.chromium.org/1745513002
* move drawextrapatheffect header into animatorGravatar reed2016-02-28
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1747753002 TBR=caryclark@google.com Review URL: https://codereview.chromium.org/1747753002
* remove unused view helpersGravatar reed2016-02-27
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1744043002 TBR= Review URL: https://codereview.chromium.org/1744043002
* remove unused view filesGravatar reed2016-02-27
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745813002 TBR= Review URL: https://codereview.chromium.org/1745813002
* remove unneeded view subclassesGravatar reed2016-02-27
| | | | | | | | | | | | no doubt, more deletes will follow... goodbye old friends BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1740383002 TBR= Review URL: https://codereview.chromium.org/1740383002
* Revert of Enable RAW codec for Windows (patchset #8 id:140001 of ↵Gravatar mtklein2016-02-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://codereview.chromium.org/1738913002/ ) Reason for revert: I don't think there's anything wrong with this per-se, but the 32-bit Windows bots are running out of memory while running these tests now. (You'll see something like c:\0\build\slave\workdir\build\skia\include\core\skbitmap.h:247: fatal error: ""sk_throw"" in the log.) We run these tests in parallel, and sometimes these 32-bit processes try to use more than the 2-3G RAM they can allocate. Seems like this is a particularly memory-intense process? If we reland this, we might want to blacklist these tests on the 32-bit Windows bots. The 64-bit bots should have access to tons and tons of RAM and let us keep testing for Windows. Original issue's description: > Enable RAW codec for Windows > > * Fix the exception catching > * Set preprocessor differently for MSVC > > BUG=skia:4889(b/26958348) > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1738913002 > > Committed: https://skia.googlesource.com/skia/+/474e4c3dd28b67f590851321f15d9983ef7fd031 TBR=scroggo@google.com,msarett@google.com,yujieqin@google.com # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia:4889(b/26958348) Review URL: https://codereview.chromium.org/1747443003
* Revert of Add non-inline SkRTreeFactory constructor to fix clang-cl ↵Gravatar brucedawson2016-02-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (patchset #2 id:20001 of https://codereview.chromium.org/1676833002/ ) Reason for revert: This workaround should no longer be needed, per comment#16 from thakis@ on the original CL. Original issue's description: > Add non-inline SkRTreeFactory constructor to fix clang-cl > > When Chromium is switched to build with VS 2015 that switches clang-cl > to build in -fmsc-version=1900 mode. This causes some changes in > importing of constructors and vftables which leads to link errors in > blink_platform.dll. Adding a non-inline constructor makes 1900 mode > behave consistently with 1800 mode and avoids the link error. > > The root cause needs investigation but this will unblock the VS 2015 > switch. > > BUG=440500,498544 > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1676833002 > > Committed: https://skia.googlesource.com/skia/+/964eec67760196585954203ba625e440607f7e92 TBR=reed@google.com,bsalomon@google.com,mtklein@chromium.org,thakis@chromium.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=440500,498544 Review URL: https://codereview.chromium.org/1739363002
* Switch float arrays to vecs for conical gradientsGravatar jvanverth2016-02-26
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745613002 Review URL: https://codereview.chromium.org/1745613002
* Creating functions for uploading a mipmapped texture.Gravatar cblume2016-02-26
| | | | | | | BUG=476416 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1249543003 Review URL: https://codereview.chromium.org/1249543003
* Make GrVkStencilAttachment derive form GrVkImageGravatar egdaniel2016-02-26
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1735283004 Review URL: https://codereview.chromium.org/1735283004
* Fix memory crash in vulakn writeUniformBuffersGravatar egdaniel2016-02-26
| | | | | | | BUG=skia:5021 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737593005 Review URL: https://codereview.chromium.org/1737593005
* Replace fWillReadFragmentPosition with a bitfieldGravatar cdalton2016-02-26
| | | | | | | | | | | | Replaces fWillReadFragmentPosition on GrProcessor with a "RequiredFeatures" bitfield. This will allow us to add additional built-in features. Completely removes information about reading the fragment position from GrPipeline and GrProcOptInfo. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1734163002 Review URL: https://codereview.chromium.org/1734163002
* Include glGetMultisamplefv APIGravatar cdalton2016-02-26
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1720963002 Committed: https://skia.googlesource.com/skia/+/69c1b24bcaa7cffd59753a75a7f3d155696fcac4 Review URL: https://codereview.chromium.org/1720963002
* When a surface is backed by an external render target force a copy on image snapGravatar bsalomon2016-02-26
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1694943002 Review URL: https://codereview.chromium.org/1694943002
* Add back Vk files with LF endingsGravatar jvanverth2016-02-26
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745433002 Review URL: https://codereview.chromium.org/1745433002
* Revert of New GM that exercises gamma-correctness in various parts of the ↵Gravatar brianosman2016-02-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | pipeline. (patchset #4 id:60001 of https://codereview.chromium.org/1734983003/ ) Reason for revert: Testing revert to fix MacMini? Original issue's description: > New GM that exercises gamma-correctness in various parts of the pipeline. > > Attempts to render 50% grey through many different techniques. Only the first one (black/white dither) is guaranteed to be correct. This serves as ground-truth for all the others (independent of whatever your display may or may not be doing when viewing the output of the GM). > > Current tests: > - Texture bilerp > - Texture scale (ie mipmaps) > - Simple paint color > - Gradient > - A handful of Xfer modes > - 50% grey bitmaps, both linear and sRGB > > Also includes a bug-fix for sRGB -> Linear bitmap case > > BUG=skia: > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1734983003 > > Committed: https://skia.googlesource.com/skia/+/9f73a71eec0eb54783f2dcad009aae6aafbe38d5 TBR=bsalomon@google.com,reed@google.com # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1744533002
* Remove Vk files with spurious CRLFsGravatar jvanverth2016-02-26
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1726403007 Review URL: https://codereview.chromium.org/1726403007
* Make GrRRectBlurEffect::onIsEqual include the roundrect's rectGravatar robertphillips2016-02-26
| | | | | | | BUG=skia:5014 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1743553003 Review URL: https://codereview.chromium.org/1743553003
* Fix oval rendering in vulkanGravatar egdaniel2016-02-26
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1739063002 Review URL: https://codereview.chromium.org/1739063002
* Fix uniform buffer layout in vulkanGravatar egdaniel2016-02-26
| | | | | | | | | TBR=jvanverth@google.com BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1734403002 Review URL: https://codereview.chromium.org/1734403002
* Add batchlist managment to GrAuditTrailGravatar joshualitt2016-02-26
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1724243004 Review URL: https://codereview.chromium.org/1724243004
* Add VkProgramDataManager back into to repoGravatar egdaniel2016-02-26
| | | | | | | | | | | Confirmed that this is concidered a plain ASCII file with no CR TBR=jvanverth@google.com BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1743593002 Review URL: https://codereview.chromium.org/1743593002
* New GM that exercises gamma-correctness in various parts of the pipeline.Gravatar brianosman2016-02-26
| | | | | | | | | | | | | | | | | | | Attempts to render 50% grey through many different techniques. Only the first one (black/white dither) is guaranteed to be correct. This serves as ground-truth for all the others (independent of whatever your display may or may not be doing when viewing the output of the GM). Current tests: - Texture bilerp - Texture scale (ie mipmaps) - Simple paint color - Gradient - A handful of Xfer modes - 50% grey bitmaps, both linear and sRGB Also includes a bug-fix for sRGB -> Linear bitmap case BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1734983003 Review URL: https://codereview.chromium.org/1734983003
* Try to fix broken file by just deleting it.Gravatar egdaniel2016-02-26
| | | | | | | | | | | Will try re uploading fixed version after. TBR=jvanverth@google.com BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737763003 Review URL: https://codereview.chromium.org/1737763003
* Enable RAW codec for WindowsGravatar yujieqin2016-02-26
| | | | | | | | | | * Fix the exception catching * Set preprocessor differently for MSVC BUG=skia:4889(b/26958348) GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1738913002 Review URL: https://codereview.chromium.org/1738913002
* fix undefined signed shiftsGravatar caryclark2016-02-26
| | | | | | | | | | | | | The expression (1 << 31) is technically undefined. Fixed the undefined shift referenced by this bug and a few friends. R=reed@google.com BUG=skia:2285 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737363002 Review URL: https://codereview.chromium.org/1737363002