• mtklein's avatar
    Port SkRefCnt.h to new SkAtomics.h · 7b274c78
    mtklein authored
    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
    7b274c78
SkRefCnt.h 8.59 KB