| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Consolidate code for handling various image/bitmap and lattice/ninepatch flavors.
Makes refTextureForParams virtual on GrTextureProducer. Previously both subclasses had non-virtual flavors of this.
Bug: b/77917978
Change-Id: I14787faef33c4617ef359039e81453d683f33ff1
Reviewed-on: https://skia-review.googlesource.com/125520
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
| |
Change-Id: If19ac52cb78af57572a102cec0084f5b6c037680
Reviewed-on: https://skia-review.googlesource.com/121882
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I96f0c25732d79c5881e400b121e81c5696a747a6
Reviewed-on: https://skia-review.googlesource.com/107441
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
|
|
|
|
|
|
|
|
|
|
| |
This relies on https://skia-review.googlesource.com/c/skia/+/102101 (Add SkSurface_Gpu::MakeWrappedRenderTarget method) landing first
TBR=bsalomon@google.com
Change-Id: I4d2d66af5800407f638ef32d7b19ce49084bd4e4
Reviewed-on: https://skia-review.googlesource.com/102263
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 7df27465c4ecc8a4a0cdd95e9785c342903c2de9.
Reason for revert: experimental revert to see if this is the cause of the tree redness
Original change's description:
> Drop support for unused MSAA extensions
>
> Bug: skia:
> Change-Id: I113b80e3f991f195155148625ceb29242ea82776
> Reviewed-on: https://skia-review.googlesource.com/101403
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
TBR=bsalomon@google.com,csmartdalton@google.com,ethannicholas@google.com
Change-Id: I4fa4123e2d176bef88cd76a09a14053d9ac5809f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/101680
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I113b80e3f991f195155148625ceb29242ea82776
Reviewed-on: https://skia-review.googlesource.com/101403
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Also runs clang-format on the files that don't have special shader
builder styling.
Bug: skia:
Change-Id: I4a67569a7c8472acfb9200644c913844a92e3b2d
Reviewed-on: https://skia-review.googlesource.com/92083
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I1875e44417a0a583c4f35ee4d46856a34ba55245
Reviewed-on: https://skia-review.googlesource.com/88580
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Although Linux and Android will return NAN, iOS and some some Win10
devices would return undefined values.
This relands 82161 (with the fix mentioned above). The speedup is
a little less due to the additional temp < 0 check.
4.08% faster in gradient_conicalOutZero_clamp
6.83% faster in gradient_conical_clamp_shallow_dither
9.43% faster in gradient_conicalOutZero_clamp_3color
12.66% faster in gradient_conicalOut_clamp_hicolor
16.67% faster in gradient_conicalOut_clamp_3color
17.83% faster in gradient_conicalOut_clamp
and the speedup is further reduced because we break up the if with
two conditions into two ifs with single condition:
7.32% faster in gradient_conical_clamp_shallow_dither
8.00% faster in gradient_conicalOut_clamp_hicolor
8.57% faster in gradient_conicalOut_clamp
8.73% faster in gradient_conicalOut_clamp_3color
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android,Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android,Test-Mac-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer
Change-Id: I41fb8d97e31c577b52a200f0b883591c9bdc4d1c
Reviewed-on: https://skia-review.googlesource.com/84963
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 84f18c422ae98085c452d3f721ec32228e92f531.
Reason for revert: GMs are incorrect on some mobile devices
Original change's description:
> Reimplement TwoPointConicalGradient_gpu
>
> 4.24% faster in gradient_conical_clamp_shallow_dither
> 6.43% faster in gradient_conicalOutZero_clamp_hicolor
> 10.41% faster in gradient_conicalOut_clamp_hicolor
> 14.85% faster in gradient_conicalOutZero_clamp_3color
> 16.72% faster in gradient_conicalOut_clamp
> 24.30% faster in gradient_conicalOut_clamp_3color
>
> CQ_INCLUDE_TRYBOTS=skia.primary:Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android,Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android
>
> Bug: skia:
> Change-Id: I6bc1f24c9463fc9c2acbcba7bd4d55b37ade1613
> Reviewed-on: https://skia-review.googlesource.com/82161
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Yuqian Li <liyuqian@google.com>
TBR=egdaniel@google.com,fmalita@google.com,liyuqian@google.com
Change-Id: Ieb20cce12a958abb8293218b89baf3d5a2aad0a8
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Cq-Include-Trybots: skia.primary:Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android, Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android
Reviewed-on: https://skia-review.googlesource.com/84801
Reviewed-by: Yuqian Li <liyuqian@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
4.24% faster in gradient_conical_clamp_shallow_dither
6.43% faster in gradient_conicalOutZero_clamp_hicolor
10.41% faster in gradient_conicalOut_clamp_hicolor
14.85% faster in gradient_conicalOutZero_clamp_3color
16.72% faster in gradient_conicalOut_clamp
24.30% faster in gradient_conicalOut_clamp_3color
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android,Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android
Bug: skia:
Change-Id: I6bc1f24c9463fc9c2acbcba7bd4d55b37ade1613
Reviewed-on: https://skia-review.googlesource.com/82161
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:7190
Change-Id: Ie31d368f52910e6917efdeb1b024370b06fc11ee
Reviewed-on: https://skia-review.googlesource.com/77160
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I4944badbb530e17b9ff7cca389f943e0b5982e01
Reviewed-on: https://skia-review.googlesource.com/72983
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I08254806fe7cb97dab21c5625aa16dd34aea9468
Reviewed-on: https://skia-review.googlesource.com/72120
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
|
| |
This isn't used and has become a maintenance burden.
Change-Id: I5f3af8f91e5c4f073fe4ea30e0a7f1f61efeea47
Reviewed-on: https://skia-review.googlesource.com/70640
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I208984ec9ad357249ee1b2fe28477f1450b4b69d
Reviewed-on: https://skia-review.googlesource.com/67848
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 2d3cac58fcc8f2d398a421b0341c36479a6ba324.
Bug: skia:
Change-Id: I6607d419f6b30c3e17b52ec5ce67d489bd1ad1dc
Reviewed-on: https://skia-review.googlesource.com/64080
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 8aa4dc9052a64d84cfd0a4330910057bd37b6bf7.
Reason for revert: strncmp getting mad
Original change's description:
> converted OverdrawColorFilter to SkSL
>
> Bug: skia:
> Change-Id: Idcc0502758df1e60ed131a168b5c9a65a4d834a1
> Reviewed-on: https://skia-review.googlesource.com/63840
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
TBR=bsalomon@google.com,ethannicholas@google.com
Change-Id: Ib78d7c878c4597918d059bddb4d61f6a7f59a511
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/63561
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: Idcc0502758df1e60ed131a168b5c9a65a4d834a1
Reviewed-on: https://skia-review.googlesource.com/63840
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an FP that just applies a GrColorSpaceXform. I have a long string
of follow-up changes that use this, which greatly simplifies many other
FPs, and ultimately eliminates the need for color space xforms to be a
first-class type in SkSL.
Bug: skia:
Change-Id: I070d8bab81c9a620a2173c83b0013c63ad53bc8e
Reviewed-on: https://skia-review.googlesource.com/60726
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:
Change-Id: I34ed3480073d05762a7d4692aeee4b87e454ce52
Reviewed-on: https://skia-review.googlesource.com/57961
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Auto-allocated IDs mean that the IDs depend upon the order in which
classes happen to get initialized and are therefore not consistent
from run to run. This change paves the way for a persistent shader
cache by fixing the IDs in an enum.
Bug: skia:
Change-Id: I3e923c6c54f41b3b3eb616458abee83e0909c09f
Reviewed-on: https://skia-review.googlesource.com/56401
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 03168b8a62a0d3d14b7a0d14642df4d82203b87c.
Reason for revert: Assert in resetting texture proxies.
Original change's description:
> Allow GrDrawOpAtlas to grow as needed
>
> Bug: skia:3550
> Change-Id: Ib5312c8c06ba8549d90545658df6686c45058255
> Reviewed-on: https://skia-review.googlesource.com/45841
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=jvanverth@google.com,robertphillips@google.com
Change-Id: I05e084b4cefa57e558f296d6087d4f03fa16ac81
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:3550
Reviewed-on: https://skia-review.googlesource.com/47140
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
|
|
|
|
|
|
|
|
| |
Bug: skia:3550
Change-Id: Ib5312c8c06ba8549d90545658df6686c45058255
Reviewed-on: https://skia-review.googlesource.com/45841
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
| |
The main change is to make GrSamplerParams smaller by making its enums have byte-sized underlying types. The rest is cosmetic.
Change-Id: Ib71ea50612d24619a85e463826c6b8dfb9b445e3
Reviewed-on: https://skia-review.googlesource.com/43200
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
SkFAIL is a legacy macro which is just SK_ABORT. This CL mechanically
changes uses of SkFAIL to SK_ABORT in preparation for its removal. The
related sk_throw macro will be changed independently, due to needing to
actually clean up its users.
Change-Id: Id70b5c111a02d2458dc60c8933f444df27d9cebb
Reviewed-on: https://skia-review.googlesource.com/35284
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
|
|
|
|
|
|
|
|
|
| |
Also adds testing of copying ImageStorageAccess and ref counts of proxies held by cloned FPs.
Change-Id: Ia23220bf65b4df83d1c874b46d8525cc3540f716
Reviewed-on: https://skia-review.googlesource.com/28004
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This also adds copy constructors for:
GrTextureDomain
GrFragmentProcessor::TextureSampler
GrCoordTransform
Change-Id: I23cb85113e236f8b6fd1d91163c80d2a41931691
Reviewed-on: https://skia-review.googlesource.com/26621
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes build of Skia lib when GR_TEST_UTILS=0
Makes GR_TEST_UTILS=0 for official builds
Makes "Mini" builder bot exercise building GPU with is_official_build=true
Bug: skia:6786
Change-Id: I6186683a3a216d2e779645bd9e8276a66bcff4d5
Reviewed-on: https://skia-review.googlesource.com/21524
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This CL: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler)) introduced a perf regression.
Cached textures can appear in different GrSurfaceProxies but have the same underlying GrTexture.
Bug: 729233
Change-Id: Ifd7a9260a8a4535e8440c0d837bfdc445a921aa4
Reviewed-on: https://skia-review.googlesource.com/20223
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The only substantive changes are the removal of GrProxy instantiation in:
SkGpuBlurUtils::GaussianBlur
GrSimpleTextureEffect::Make*
Change-Id: I10970609693bd6ff5b3a3c21b41d82642bb277bc
Reviewed-on: https://skia-review.googlesource.com/19965
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
| |
This was relying on TextureSampler::proxy() which crashes if the proxy is not valid.
Bug: skia:
Change-Id: I8452f5cea3a71b5ced15259aede52a44ab152cf2
Reviewed-on: https://skia-review.googlesource.com/19403
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Split into:
https://skia-review.googlesource.com/c/10485/ (More GrSurfaceProxy-clean up)
https://skia-review.googlesource.com/c/15819/ (Expand GrTextureProxy to handle highestFilterMode)
https://skia-review.googlesource.com/c/16714/ (Switch ImageStorageAccess over to GrTextureProxies)
https://skia-review.googlesource.com/c/16908/ (Convert DstTexture to DstProxy)
Change-Id: I6cf3ba0f3bf0e1908d36749bc83571c066ddd568
Reviewed-on: https://skia-review.googlesource.com/10484
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
|
| |
It would reduce a lot of noise if the GrRenderTargetOpList kept a pointer to the GrCaps but, for now, I'm trying to shrink the GrRTOpList, not expand it.
Reland of: https://skia-review.googlesource.com/c/17323/ (Update clearOp for split-OpList world)
Change-Id: Ia61ce4d6ce245380fc9651928a46c22039fc12cf
Reviewed-on: https://skia-review.googlesource.com/18026
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The last GrTexture-based TextureSampler::reset call must be removed before the TextureSamplers can become purely GrTextureProxy-backed
Reland of: https://skia-review.googlesource.com/c/16908/ (Convert DstTexture to DstProxy)
Split out of: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler))
Change-Id: I3a497b6a950fad899f23882c0a9552894ef640f8
Reviewed-on: https://skia-review.googlesource.com/17205
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The new pattern is:
we will "instantiate" pipelines at flush time
at flush time we will only access the backing GrSurface by peeking
If instantiation fails we should never try to access the GrSurfaces
Change-Id: I87f7ff41bd0e84d9ca3dbdd61d3361d3d4ceefd6
Reviewed-on: https://skia-review.googlesource.com/17932
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 87f7f1c3ce519115141b40f1d8faede437c8f357.
Reason for revert: grumble, grumble
Original change's description:
> Convert DstTexture to DstProxy
>
> The last GrTexture-based TextureSampler::reset call must be removed before the TextureSamplers can become purely GrTextureProxy-backed
>
> Split out of: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler))
>
> Change-Id: Ic1435177d8b5d9bd3fc38b4903c9baae8205cfb0
> Reviewed-on: https://skia-review.googlesource.com/16908
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>
>
TBR=egdaniel@google.com,robertphillips@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Change-Id: I9af52bb222bd2d8cc696250a9efb62afb80edba1
Reviewed-on: https://skia-review.googlesource.com/17203
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
|
|
| |
The last GrTexture-based TextureSampler::reset call must be removed before the TextureSamplers can become purely GrTextureProxy-backed
Split out of: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler))
Change-Id: Ic1435177d8b5d9bd3fc38b4903c9baae8205cfb0
Reviewed-on: https://skia-review.googlesource.com/16908
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
| |
Split out of: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler))
Change-Id: I341de6ae121620d30e50bff21450878a18bdf4f2
Reviewed-on: https://skia-review.googlesource.com/16714
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
|
|
|
|
|
|
|
|
|
| |
Bug: 715488
Change-Id: I69775cbb50d334d81872e236e59368fe65e698ff
Reviewed-on: https://skia-review.googlesource.com/14605
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
|
|
TBR=bsalomon@google.com
Change-Id: I93b28cfcb4d7b50c12e24ea81faab680bccce9ef
Reviewed-on: https://skia-review.googlesource.com/14036
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
|