7b274c78fb
This adds sk_memory_barrier(), implemented using sk_atomic_fetch_add() on an uninitialized variable. If that becomes a problem we can drop this to the porting layer, using std::atomic_thread_fence() / __atomic_thread_fence() / __sync_synchronize(). The big win is that ref() doesn't generate a memory barrier any more on ARM. This is an instance of SkSafeRef() in SkPaint(const SkPaint&) after this CL: 4d0: 684a ldr r2, [r1, #4] 4d2: 6018 str r0, [r3, #0] 4d4: b13a cbz r2, 4e6 <_ZN7SkPaintC1ERKS_+0x2e> 4d6: 1d10 adds r0, r2, #4 4d8: e850 4f00 ldrex r4, [r0] 4dc: 3401 adds r4, #1 4de: e840 4500 strex r5, r4, [r0] 4e2: 2d00 cmp r5, #0 4e4: d1f8 bne.n 4d8 <_ZN7SkPaintC1ERKS_+0x20> Here's the before, pretty much the same with two memory barriers surrounding the ref(): 4d8: 684a ldr r2, [r1, #4] 4da: 6018 str r0, [r3, #0] 4dc: b15a cbz r2, 4f6 <_ZN7SkPaintC1ERKS_+0x3e> 4de: 1d10 adds r0, r2, #4 4e0: f3bf 8f5f dmb sy 4e4: e850 4f00 ldrex r4, [r0] 4e8: 3401 adds r4, #1 4ea: e840 4500 strex r5, r4, [r0] 4ee: 2d00 cmp r5, #0 4f0: d1f8 bne.n 4e4 <_ZN7SkPaintC1ERKS_+0x2c> 4f2: f3bf 8f5f dmb sy The miscellaneous files in here are just fixups to explicitly include SkMutex.h, instead of leeching it off SkRefCnt.h. No public API changes. TBR=reed@google.com Build trybots seem hosed. NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/896803002 |
||
---|---|---|
.. | ||
Sk1DPathEffect.h | ||
Sk2DPathEffect.h | ||
SkAlphaThresholdFilter.h | ||
SkArcToPathEffect.h | ||
SkArithmeticMode.h | ||
SkBitmapSource.h | ||
SkBlurDrawLooper.h | ||
SkBlurImageFilter.h | ||
SkBlurMaskFilter.h | ||
SkColorCubeFilter.h | ||
SkColorFilterImageFilter.h | ||
SkColorMatrix.h | ||
SkColorMatrixFilter.h | ||
SkComposeImageFilter.h | ||
SkCornerPathEffect.h | ||
SkDashPathEffect.h | ||
SkDiscretePathEffect.h | ||
SkDisplacementMapEffect.h | ||
SkDrawExtraPathEffect.h | ||
SkDropShadowImageFilter.h | ||
SkEmbossMaskFilter.h | ||
SkGradientShader.h | ||
SkLayerDrawLooper.h | ||
SkLayerRasterizer.h | ||
SkLerpXfermode.h | ||
SkLightingImageFilter.h | ||
SkLumaColorFilter.h | ||
SkMagnifierImageFilter.h | ||
SkMatrixConvolutionImageFilter.h | ||
SkMatrixImageFilter.h | ||
SkMergeImageFilter.h | ||
SkMorphologyImageFilter.h | ||
SkOffsetImageFilter.h | ||
SkPaintFlagsDrawFilter.h | ||
SkPerlinNoiseShader.h | ||
SkPictureImageFilter.h | ||
SkPixelXorXfermode.h | ||
SkPorterDuff.h | ||
SkRectShaderImageFilter.h | ||
SkTableColorFilter.h | ||
SkTableMaskFilter.h | ||
SkTestImageFilters.h | ||
SkTileImageFilter.h | ||
SkTransparentShader.h | ||
SkXfermodeImageFilter.h |