Bug: skia:10274
Change-Id: Ifb2ef8bf031e74d9d5c8183efe5aff4e6f3d2e7c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292562
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Change-Id: I6af3673a9dedf0a5acfbd588bfbbb447b5c68013
Bug: skia:9935
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292576
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Together with similar programs in other repositories, this helps find
disagreements between Chromium's, Skia's and Wuffs' image decoders.
Change-Id: I9a0d8aabb47b1d5bd29f9139755e76bf56ab4bbe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290618
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Most lines have one run in them, so avoid extra allocations in this
case. As a side effect, mark TextLine as moveable but not mem-movable.
The TextLine class used to be used as a mem-movable class, but the
addition of an SkSTArray made it non-mem-movable. Correct this and make
TextLine moveable and document its non-copyable nature. This avoids
ASAN use after free issues.
Change-Id: Icf45a464004e9f270ec46e1c2ddcf29fd356c90a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292441
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
ICU needs to be initialized, at least in the Windows build where the
data isn't statically linked. This should be done internally, and not as
an external requirement.
Change-Id: I796b67c6f0a84c75d1557631ff38cf58d1b6a236
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292440
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Julia Lavrova <jlavrova@google.com>
This makes it more obvious that these files really are part of
SkParagraph and integrate with the Skia test framework and are not part
of core Skia. This is more like how Skottie is setup and helps prevent
misunderstandings about where additional files like this should go and
how the build should be structured.
Change-Id: Iaac060c97cffd2b0c29833c7b0403521d91bdb6a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292439
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
This reverts commit be997df079.
Reason for revert: not sure SkSTArray is movable
Original change's description:
> prealloc space for a simple fRunsInVisualOrder
>
> Change-Id: I38e5ffbecdf5ca6870ccaccf43be149675a1d638
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291972
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Mike Reed <reed@google.com>
TBR=bungeman@google.com,herb@google.com,reed@google.com,jlavrova@google.com
Change-Id: Icddabe180d83ab0054ba5a5eebbe09e1fd5a15b4
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292556
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
5b4c627389..6a184fe947
2020-05-28 ynovikov@chromium.org Fix use_libfuzzer build
2020-05-27 cnorthrop@google.com docs: Update ANGLE for Android documentation
2020-05-27 kbr@chromium.org Emulate unsized depth/stencil textures on ES 3.0 without OES_depth_texture.
2020-05-27 tobine@google.com Vulkan:Initial worker thread disabled by default
2020-05-27 timvp@google.com Vulkan: Increase GLES support to 3.1
2020-05-27 jonahr@google.com GL: Support GL_OES_texture_cube_map_array in shader translator
2020-05-27 jonahr@google.com GL: Support GL_OES_texture_cube_map_array in frontend/GL backend
2020-05-27 ianelliott@google.com Vulkan: Rotate gl_FragCoord for Android pre-rotation
2020-05-27 nguyenmh@google.com Store non-string, non-enum data in binary file.
2020-05-27 gbiv@chromium.org translator: explicitly specify underlying types for enums
2020-05-27 angle-autoroll@skia-public.iam.gserviceaccount.com Roll SwiftShader from 79dcb2a5abbd to 9e718f962f87 (1 revision)
2020-05-27 angle-autoroll@skia-public.iam.gserviceaccount.com Roll SPIRV-Tools from 9cb2571a184c to d3d89bb90cbd (2 revisions)
2020-05-27 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Vulkan-Loader from 3e390a159761 to 006586926ade (2 revisions)
2020-05-27 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Vulkan-Tools from 0c4ea014bf28 to 2bc4fcd9eba5 (3 revisions)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-skia-autoroll
Please CC westont@google.com on the revert to ensure that a human
is aware of the problem.
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md
Cq-Include-Trybots: skia/skia.primary:Build-Debian10-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE
Bug: chromium:1084580
Tbr: westont@google.com
Test: Test: CQ
Change-Id: I18cdad76242cb6ef262d4c65cfb1bea97d7db18f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292460
Reviewed-by: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This is needed for the inline dither effect to use device coordinates
instead of local coords for dithering.
The builtin is not "in float4" because that trips up the runtime effect
assertions about what types of in variables are allowed.
Change-Id: I580fc461fdc9cbd812592b2571f51868a7a3ea4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292262
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
If you used 'in float foo' in a runtime effect it would always have the
value cast to an int. I don't think we saw this in .fp files because
the cpp generation handled those values directly (if I remember correctly)
Just uses a union of float and int, differentiated by fKind, so that it
compiles in standalone mode (vs. using SkFloat2Bits, etc.).
Also updated to add a unit test.
Change-Id: I420f43d1b54638883af0b8df6ccba2416c587868
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292315
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Consider rendering an SkPicture to a 1080p, 4x msaa render target:
1920 * 1080 * (4 color bytes + 1 stencil byte) * 4 samples = 40Mb!
But SkCanvas::drawPicture calls saveLayer, which allocates a duplicate
render target:
40Mb * 2 = 80Mb!!
So with the original 96MB, a quite conservative msaa render target
almost blows out the entire resource cache just on the backing. This
CL bumps up the default cache size to 256MB.
Change-Id: I756c62f4ee6b9c62b1a3e535f31e15a1ecc3d63f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292265
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This reverts commit 5f689779d2.
Reason for revert: Breaking housekeeper bot because it no longer compiles in standalone mode (skia_compile_processors = true in gn args)
Original change's description:
> Store float value for SkSL settings
>
> If you used 'in float foo' in a runtime effect it would always have the
> value cast to an int. I don't think we saw this in .fp files because
> the cpp generation handled those values directly (if I remember correctly)
>
> Change-Id: I336469eaad9c98fc9290f9a93dc6f0221ab5545a
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292261
> Commit-Queue: Brian Osman <brianosman@google.com>
> Auto-Submit: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>
TBR=brianosman@google.com,ethannicholas@google.com,michaelludwig@google.com
Change-Id: I1989765ecfd6a3d8ec674df4864c395cd8c70692
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292312
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
This reverts commit 2dd272bf15.
Reason for revert: breaking angle
Original change's description:
> Revert "Revert "SkSL function inlining""
>
> This reverts commit 1b63b4ac69.
>
> Change-Id: I8120bb10cecc6889f4f4fd7b4c3a61d250e49219
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291358
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
TBR=bsalomon@google.com,brianosman@google.com,ethannicholas@google.com
# Not skipping CQ checks because this is a reland.
Change-Id: Ib3117efd1b77e97899e636bcbc4d84200118bc36
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292264
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Additionally, fixed up doxygen comment markers that were accidentally
in reverse order.
Change-Id: I498df30acb416dfd28f6c7508da0261de3b0919d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291959
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
If you used 'in float foo' in a runtime effect it would always have the
value cast to an int. I don't think we saw this in .fp files because
the cpp generation handled those values directly (if I remember correctly)
Change-Id: I336469eaad9c98fc9290f9a93dc6f0221ab5545a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292261
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Additional minor cleanup:
- Removed temporary #define that was no longer in service.
Change-Id: Ib444ed4d4a5c0959d0b8642da676eb2b3db41b22
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291897
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This reverts commit 1b63b4ac69.
Change-Id: I8120bb10cecc6889f4f4fd7b4c3a61d250e49219
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291358
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Bug: skia:10269
Change-Id: Id89fdeee92c23a2e207e7995a2e82d2cdac2365a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292236
Commit-Queue: Ravi Mistry <rmistry@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Following up on old bugs... might as well get this going.
Convert SkRasterPipelineBlitter's dither approach to match
SkVMBlitter and the GPU backend by dithering just after the
color filter, instead of just before storing to memory.
Bug: skia:10000
Change-Id: I5271706f707f553ef54d72ef029fd43331c2e25e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291876
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This reverts commit 4730f29993.
Reason for revert: Fix WIP
Original change's description:
> Revert "Simplify GrRTC::clean APIs"
>
> This reverts commit 6cbd7c2e57.
>
> Reason for revert: mac/generated files failures
>
> Original change's description:
> > Simplify GrRTC::clean APIs
> >
> > The CanClearFullscreen enum type is removed. Most usages of clear() had
> > kYes because a null scissor rect was provided, or had kNo because the
> > scissor was really critical to the behavior. A few places did provide a
> > scissor and kYes (e.g. for initializing the target).
> >
> > To simplify this, the public GrRTC has two variants of clear(). One with
> > only a color (for fullscreen clears), and one with a rect for partial
> > clears. The private API also adds a clearAtLeast() function that replaces
> > the several cases where we'd have a scissor but could expand to fullscreen.
> >
> > I find the current control flow in internalClear() to be hard to
> > follow (albeit I was the one to make it that way...), but later CLs
> > will improve it.
> >
> > Bug: skia:10205
> > Change-Id: I87cf8d688c58fbe58ee854fbc4ffe22482d969c6
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290256
> > Reviewed-by: Brian Salomon <bsalomon@google.com>
> > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
>
> TBR=bsalomon@google.com,csmartdalton@google.com,michaelludwig@google.com
>
> Change-Id: I7131df6f5323f4f9c120cbcfd9bc57e627e2eb65
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:10205
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291842
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
# Not skipping CQ checks because this is a reland.
Bug: skia:10205
Change-Id: Id5db153d7c2500279cca8478818b66f67a53e143
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291844
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
In https://skia-review.googlesource.com/c/skia/+/291182 emscripten was updated
to 1.39.16. This introduced a breaking API change to the CanvasKit
initialization callback, which becomes simply `then()` as opposed to
`ready().then()`. In the course of this change, I missed a few `ready()` calls,
which has broken the examples in public-facing documentation.
E.g. https://skia.org/user/modules/canvaskit. This CL fixes that.
Bug: NONE
Change-Id: I857b4653747cffc3870bf92d479dc88c3fd7d64a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292097
Reviewed-by: Kevin Lubick <kjlubick@google.com>
7ff01bb15d..5b4c627389
2020-05-27 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Vulkan-ValidationLayers from 6ff146b0bfce to 424cdd54fe80 (12 revisions)
2020-05-27 geofflang@chromium.org Don't allow glReadPixels of depth buffers with ES3.1.
2020-05-26 sunnyps@chromium.org Use surface texture offset for clears and blits
2020-05-26 gbiv@chromium.org gen_proc_table: generate `const` tables
2020-05-26 kbr@chromium.org Remove requirement of OES_texture_half_float for EXT_color_buffer_half_float.
2020-05-26 kbr@chromium.org Emulate GL_EXT_sRGB on ES 3.0 devices without native support.
2020-05-26 jmadill@chromium.org Vulkan: Fix bad delete of swapchain.
2020-05-26 cclao@google.com Vulkan: Optimize out barrier needs for transition between shaderReadOnly
2020-05-26 jmadill@chromium.org Clean up overlay RenderPass count reporting.
2020-05-26 aleino@nvidia.com Fix issue where last 8 bits of D24X8 influence depth calculation.
2020-05-26 nguyenmh@ad.corp.google.com Fix replay crash when captured sample doesn't create binary data
2020-05-26 msisov@igalia.com Type cast EGLNativeDisplayType to _XDisplay* in xcb and glx
2020-05-26 angle-autoroll@skia-public.iam.gserviceaccount.com Roll glslang from 2cf9621d6d6f to 2b0eafb1de5b (1 revision)
2020-05-26 angle-autoroll@skia-public.iam.gserviceaccount.com Roll SPIRV-Tools from b0264b87ffb5 to 9cb2571a184c (2 revisions)
2020-05-26 angle-autoroll@skia-public.iam.gserviceaccount.com Roll SwiftShader from cc5cda0f997d to 79dcb2a5abbd (5 revisions)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-skia-autoroll
Please CC westont@google.com on the revert to ensure that a human
is aware of the problem.
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md
Cq-Include-Trybots: skia/skia.primary:Build-Debian10-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE
Bug: chromium:1079475,chromium:1084458,chromium:1084580
Tbr: westont@google.com
Change-Id: Ib492fc861f6dba5557475487d13859bf64d11b9c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292197
Reviewed-by: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This is a reland of a33a68071b
Original change's description:
> generate vertex data in onPrepare
>
> Switch to a compact encoding for vertex data
> that can be easily expanded in onPrepare.
>
> Bug: skia:10251
>
> Change-Id: I53893c94514a7ff3b4f33be444f4ec2002e63ec4
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290297
> Commit-Queue: Herb Derby <herb@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Ben Wagner <bungeman@google.com>
Bug: skia:10251
Change-Id: I483f0d48b475d8fdea2ea915e2f954d5aec3ac0d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292077
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Change-Id: I0574edbc1014d58d2f4836e98e35a78575b084a4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291957
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
* change some {} to = default;
Change-Id: I22aea84d74b4a5b0c826618d18d6eb300c5dcfa4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291360
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Fixes release-cpu build issue, un-revert cl 289733
Color space arguments accepted at surface creation, paint, gradient, and other call sites.
Works correctly only when chrome happens to be rendering itself in the same color space
the canvaskit user has chosen, there's not yet end to end color management of
canvases supported in browsers.
readPixels not yet working due to possible chrome bug.
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289733
Commit-Queue: Nathaniel Nifong <nifong@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Change-Id: I65ce1c643dac57e14b8476f598c96b12b7e040ce
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291896
This reverts commit a33a68071b.
Reason for revert: Old chromebook tool chain
Original change's description:
> generate vertex data in onPrepare
>
> Switch to a compact encoding for vertex data
> that can be easily expanded in onPrepare.
>
> Bug: skia:10251
>
> Change-Id: I53893c94514a7ff3b4f33be444f4ec2002e63ec4
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290297
> Commit-Queue: Herb Derby <herb@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Ben Wagner <bungeman@google.com>
TBR=bungeman@google.com,herb@google.com,robertphillips@google.com
Change-Id: I97d424cfdd1109f2e7c56601e71986926a62c7b1
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:10251
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291966
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Switch to a compact encoding for vertex data
that can be easily expanded in onPrepare.
Bug: skia:10251
Change-Id: I53893c94514a7ff3b4f33be444f4ec2002e63ec4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290297
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
The C bindings should not be considered a part of the SDK.
There are no current usages so removing this dependency
should have no effect.
Change-Id: I3d361b7ad17af0e7437e1d20b33bd57256fbba9b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291458
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: John Rosasco <rosasco@google.com>
TODO: fRunsInVisualOrder is a long-lived array, but appears to..
- never resize after the constructor
- very often be size==1
Can we preallocate storage for it in the TextLine itself? (e.g. StSTArray or other trick)
Change-Id: I817b46a24e01ddf999bdd81a607aaf35b3c0674b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291776
Reviewed-by: Ben Wagner <bungeman@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Reed <reed@google.com>