`isFixedPitch` is a bool*. The surrounding lines were updated to
maintain consistency.
Change-Id: Ic604d159ff77a1f4b7e2942c0bdbd4d68f0318b5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307496
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Previously, we copied intrinsic functions in a totally arbitrary order;
it used an unordered_set of pointers, so it could be affected by
switching standard libraries OR by malloc nondeterminism. (Surprisingly,
it was fairly consistent in practice on OS X/Linux.) This CL sorts the
intrinsic functions into a consistent order before copying them.
Change-Id: If90342bb77a9ae237a3ce91be3a9847311a722c4
Bug: skia:10749
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318700
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
In this CL, the result expression has been updated to use
VariableExpression; followup CLs will update the VariableRewriteMap to
leverage it as well.
This is intended to allow the inliner to inline simple expressions (such
as literals or swizzles) directly if they are not written to, instead of
making an extraneous copy.
Change-Id: I050057d8c3e940e5e44c22fde2f4bc37bb4c6754
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318576
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
I broke this when I switched over to the SkTDynamicHash
Bug: 1108408
Change-Id: I906b41330440d084ba2e97c0162af38a79da0529
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318696
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Code like
bool4 result = val.xy01;
Will now be converted to:
bvec4 result = bvec4(val.xy, bool(0), bool(1));
Previously it tried to do this, but there isn't an implicit conversion
from int to bool, so it was silently failing and adding nulls into the
constructor:
bvec4 result = bvec4(val.xy, $coerceToBool(0), $coerceToBool(1));
This CL also cleans up some related code that I was checking while
trying to understand the nature of the error.
Change-Id: I5b7d96760a03170ff78b46251c4182cc4e89836f
Bug: oss-fuzz:25781
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318636
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
This test currently crashes skslc, but will be fixed in the followup CL.
Change-Id: I3683d94a310242e8ca67560296518fd1223b28d0
Bug: oss-fuzz:25781
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318656
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
We were holding on to an additional ref to the ID3D12Resource* in the
fInfo struct, so it didn't actually get released until the destructor.
Change-Id: I529daf66ff6caf1516fd21881f9820d7d21bb642
Bug: skia:9935
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318657
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Auto-Submit: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This is a reland of 6cc032c12d
Original change's description:
> include freetype in wasm build, see cl/332073924 for complete change
>
> Change-Id: I2f1d6ef2719191fe9a56e31712c058c3207d23a9
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317615
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Nathaniel Nifong <nifong@google.com>
Change-Id: I7026b40885eb202fa8df1d2ba71e698818b84132
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318577
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Nathaniel Nifong <nifong@google.com>
This seems to address the performance regressions seen in the new
GrClipStack for the Missouri seal svg. An alternative was to just
always transform paths to device space, but this hurt other benchmarks.
This CL leaves us with a more efficient contains and but still keeps
the lazy transformation to device space.
Bug: skia:10730
Change-Id: I4494cd24efbce767b2cc981d8942aafe8328dfb8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317858
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Ideally the inliner would be smart enough to avoid creating a temporary
at all just for a swizzle, but a good first step is to create fewer of
them.
Change-Id: Icd6f86c294237488f7923dc787bb64a5f99bd0ac
Bug: skia:10737
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318213
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
The X and Y values of `clampedCoord`, `extraRepeatCoord`, and `snapped`
were being calculated and stored separately, even in cases where work
could easily be done in tandem. Updated the code so that we use .xy when
it makes sense to do so.
Change-Id: I10d85670acb4fec960444b3f3c30f2929c6dcaf2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318436
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Being conservative here is better - it's a feature that's only exposed
on newer GL and ES. This fixes WebGL.
Follow-up from https://skia-review.googlesource.com/c/skia/+/317204
Bug: skia:10745
Change-Id: I319fc6b9379a14c09b9ccce6da8bed2effe09821
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318497
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
This addresses the performance regressions on vkmsaa8 and other msaa
locked devices from the new GrClipStack. Now that elements are forced
to upgrade to AA, this allows axis-aligned anti-aliased rects to be
implemented as an FP instead of generating a stencil mask.
This is an alternative to https://skia-review.googlesource.com/c/skia/+/317772
and does not appear to regress visual quality.
Bug: skia:10370
Change-Id: If89b4368fb0c684851e6648bf70e1b608e19852c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317836
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Change-Id: I935784aae438ac767cca03eb25853f4230297bb5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318214
Auto-Submit: Brian Osman <brianosman@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Early returns can cause the inliner to generate suboptimal code. We
control our built-ins, so let's avoid them where we can.
Patterns like this challenge the inliner:
if (x) return y;
return z;
But this can be replaced by equivalent code that inlines better:
return x ? y : z;
Or, if a ternary can't be used, this also does a better job:
if (x) return y;
else return z;
In several cases, this allows the inliner to avoid generating a
do-while(false) block for control flow.
Change-Id: I921c929122297c40476ff15b4da631fc1581e308
Bug: skia:10737
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318211
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
I realized that "DefaultSettings" as a name suffix was unclear, because
"Default" is a different settings mode from skslc running with
--nosettings.
In --nosettings mode, skslc uses "standalone" settings.
Change-Id: I1f5d80df0a21cec55948c4ad146169bcb34f4999
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318210
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
This reverts commit b8ae7fa12a.
Reason for revert: Introduced a memory leak
Original change's description:
> Reland "Use Microsoft's ComPtr to wrap D3D12 objects."
>
> This is a reland of 0ef049177f
>
> Original change's description:
> > Use Microsoft's ComPtr to wrap D3D12 objects.
> >
> > Change-Id: I4bd173428a2b65f0bc1994fb794ef9d4d68d5ba0
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314957
> > Reviewed-by: Brian Salomon <bsalomon@google.com>
> > Reviewed-by: Greg Daniel <egdaniel@google.com>
> > Commit-Queue: Jim Van Verth <jvanverth@google.com>
>
> Change-Id: Id0199db4061c67ed53da35e74dc31a004744be95
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315655
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: I3f8744668558f6b8f4f367eeeeff2f6aa2c36992
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318209
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Several blend functions generate a surprisingly large amount of code,
and appear to have opportunities for further optimization. At any rate,
if we make compiler changes that would affect the output of a blend
function, I think we would want to see the changes reflected in our
golden outputs.
Change-Id: Iff612dcd4bad8824b5e6e97413ffce19e5ea1c0e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318336
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This doesn't change the meaning or intent at all, just makes the code
easier to read.
Change-Id: I998498de8fba625d86eadc2fba119c29a1e1d29a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318202
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Passing in VK_IMAGE_LAYOUT_UNDEFINED will tell Skia to not update the
layout when doing the state change.
Bug: skia:10742
Change-Id: Ic59b7c95d3a73e29dcd6eec16a2fd138e1a1d95f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318204
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
This is the start of trying to have all our different types of "surface"
allocations share a common class. we will soon follow up with also having
an msaa attachment class derivie from GrSurface.
Bug: skia:10727
Change-Id: I50e78d232a454b1dd35cf9606791390ce5a6396b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317392
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
The optimizer still doesn't understand how to remove an unnecessary do-
while loop, but this change will prevent blend_src_in and blend_dst_in
from having an early return at all, and won't otherwise pessimize the
output. This will also allow these blends to be inlined on systems which
don't support do-while loops at all.
Change-Id: I44ef7b3a50571e1a2fe6214f5821ab886471b4aa
Bug: skia:10737
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318236
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Previously, `has_early_return` would count all of the return statements
in the program, and then compare that against the number of return
statements detected at the end of the program's control flow.
However, that's overkill; we don't actually need to know the full number
of returns. We only need to know if there are more returns than what we
found at the end of control flow. i.e. if a program has 1 return at the
end of its control flow, we can stop as soon as we find 2 returns and
say "yes, there's an early return somewhere."
Change-Id: I332810a7fd411d08acd6f8488ce128b5ee9eff09
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318199
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Change-Id: Ic6b30ea9052a762959fec600d5132c6409a80fed
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318201
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
The original plan was for the IRGenerator to remove its inlining logic
entirely, but that looks like it might be difficult to accomplish
without a performance hit. Since we might be stuck with IRGenerator
inlining for a while, let's remove the duplicated logic.
Change-Id: I17151b9a3a000a119393bce19335fd7398db3db8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318197
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
These are no longer needed now that we've migrated away.
Change-Id: Id308af7d40ffe0d539a3c6fd201220d145080928
Docs-Preview: https://skia.org/?cl=317281
Cq-Include-Trybots: luci.skia.skia.primary:Canary-Android,Canary-G3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317281
Commit-Queue: Adlai Holler <adlai@google.com>
Auto-Submit: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Skips all but the generator flavor on CPU since the others were all
falling back to the generator anyway.
Uses the new MakeFromYUVAPixmaps signature.
Rename domain to subset.
Bug: skia:10632
Change-Id: Ie6afe0e7927dc3d0b121df094c1ccb6f0db3b815
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318198
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This does not appear to affect any tests or cause any meaningful
differences.
Change-Id: I8ce53838a87bec72acb8167f8e41bf21f52b85ea
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317618
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Should reduce build time and avoid running GL unit tests redundantly
on Vulkan bots.
Change-Id: I67379e6820dab2f038175a825ee1461086a2da84
Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan
Change-Id: I67379e6820dab2f038175a825ee1461086a2da84
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318196
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
operator== for D3D12_CPU_DESCRIPTOR_HANDLE was undefined if building a
non-dev release build. Pulling out of the #ifdef DEBUG || GR_TEST_UTILS
block fixes it.
Change-Id: I3088b8e0c6ce7271074d1b255bbac02d0516da9f
Bug: skia:10651
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318160
Auto-Submit: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Change-Id: I54a65806c65b5df5bfbc2603859cdb2b7de0836c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317899
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
8d4331eeb5..48588bd181
2020-09-21 m.maiya@samsung.com Vulkan: Add GL_EXT_buffer_storage extension entry points
2020-09-20 m.maiya@samsung.com Vulkan: Implement a SharedResourceUse pool
2020-09-19 jmadill@chromium.org Test Runner: Really reuse displays with --bot-mode.
2020-09-19 jmadill@chromium.org Test Runner: Fix "--bot-mode" error level return value.
2020-09-19 jmadill@chromium.org Vulkan: Allow no validation layers in ExternalImageTest.
2020-09-19 jmadill@chromium.org Vulkan: Optimize Attribute Change Perf (4/5)
2020-09-19 timvp@google.com Remove setting a default value for use_custom_libcxx
2020-09-18 jmadill@chromium.org Vulkan: Optimize Attribute Change Perf (3/5)
2020-09-18 jmadill@chromium.org Test Runner: Fix sharding and --bot-mode.
2020-09-18 jmadill@chromium.org Vulkan: Optimize Attribute Change Perf (2/5)
2020-09-18 jmadill@chromium.org Vulkan: Optimize Attribute Change Perf (1/5)
2020-09-18 ianelliott@google.com Vulkan: Additional "invalidate" white-box tests
2020-09-18 courtneygo@google.com Vulkan: lock around accesses to mSharedGarbage
2020-09-18 adetaylor@chromium.org Add CPEPrefix for rapidjson.
2020-09-18 courtneygo@google.com Vulkan: need to serialize access to mFenceRecycler
2020-09-18 jmadill@chromium.org Tests: Allow tests to function without VVLs.
2020-09-18 geofflang@google.com Refactor IsMipmapFiltered to take the min filter directly.
2020-09-18 jmadill@chromium.org Traces: Move up from tests/perf_tests/ to tests/.
2020-09-18 jmadill@chromium.org Fix roll script for CIPD deps.
2020-09-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll VK-GL-CTS from 6ccc0d9ba0ff to c9f4fb2fccda (7 revisions)
2020-09-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Vulkan-Loader from 399f7fd741f7 to a148cdd49041 (1 revision)
2020-09-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Vulkan-ValidationLayers from 46fc663a1cb3 to d6935becabad (6 revisions)
2020-09-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll SPIRV-Tools from 34ef0c3fdc8e to 50ae4c5f4427 (3 revisions)
2020-09-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll VK-GL-CTS from b045bf7d3b6a to 6ccc0d9ba0ff (1 revision)
2020-09-18 syoussefi@chromium.org Vulkan: Workaround oldSwapchin bug on Android
2020-09-18 jmadill@chromium.org Guard against data race with MemoryProgramCache.
2020-09-18 syoussefi@chromium.org Vulkan: Add perf warning for mid-RP clear
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 csmartdalton@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:895969
Tbr: csmartdalton@google.com
Test: Test: CQTest: Test: DrawCallPerfBenchmark.Run/vulkan_attrib_changeTest: Test: DrawCallPerfBenchmark.Run/vulkan_null_attrib_changeTest: Test: angle_unittests with --bot-mode, sharding, and filter
Change-Id: If3aed2fd189de0c3c8e7b0470aad899c281a34fc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318097
Reviewed-by: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This wasn't rolled back automatically by the revert at
http://review.skia.org/317976, because this unit test did not exist yet
when that CL was submitted.
Change-Id: Ib887e74ddd32c1e576908bbe3d588205e26cdaa5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317978
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This reverts commit 910845fac1.
Reason for revert: IRGenerator inline change reverted
Original change's description:
> Add program-settings flag to disable the inliner.
>
> Change-Id: I6c4e7f6a2aab6710221029022a3a5f3ec323c5e2
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317856
> Commit-Queue: John Stiles <johnstiles@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>
> Auto-Submit: John Stiles <johnstiles@google.com>
TBR=brianosman@google.com,ethannicholas@google.com,johnstiles@google.com
Change-Id: Ie38a29495ea8497f9db26d2603df179e696ac5ff
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317977
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>