# Pass this file to Valgrind with "--suppressions=tools/valgrind.supp"

# Intentional thread / memory leak in DM and nanbench.
{
   nanobench_and_dm_keepalive_thread_leak
   Memcheck:Leak
   match-leak-kinds: possible,definite
   ...
   fun:_ZN8SkThreadC1EPFvPvES0_
   ...
   fun:main
   ...
}

# Third party lib, driver issues.
{
    ati_driver_bug_1
    Memcheck:Param
    ioctl(generic)
    fun:ioctl
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_2
    Memcheck:Cond
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_3
    Memcheck:Addr8
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_4
    Memcheck:Addr4
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_5
    Memcheck:Addr2
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_6
    Memcheck:Addr1
    ...
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_7
    Memcheck:Leak
    fun:malloc
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    driver_bug_8
    Memcheck:Overlap
    fun:strcpy
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_9
    Memcheck:Leak
    fun:calloc
    obj:/usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
}
{
    ati_driver_bug_10
    Memcheck:Leak
    fun:malloc
    obj:/usr/lib/fglrx/fglrx-libGL.so.1.2
}
{
    nv_driver_bug_1
    Memcheck:Param
    write(buf)
    ...
    obj:*/libnvidia-glcore.so*
}
{
    nv_driver_bug_2
    Memcheck:Cond
    ...
    obj:*/libnvidia-glcore.so*
}
{
    nv_driver_bug_3
    Memcheck:Leak
    fun:calloc
    obj:/usr/lib*/libGL.so*
}
{
    #Fixed by FontConfig 2.9.0
    #http://cgit.freedesktop.org/fontconfig/commit/?id=1c475d5c8cb265ac939d6b9e097666e300162511
    font_config_bug_1
    Memcheck:Addr4
    fun:FcConfigFileExists
}
{
    #https://bugs.freedesktop.org/show_bug.cgi?id=8215
    #https://bugs.freedesktop.org/show_bug.cgi?id=8428
    #FcPattern uses 'intptr_t elts_offset' instead of 'FcPatternEltPtr elts',
    #which confuses valgrind.
    font_config_bug_2
    Memcheck:Leak
    fun:*alloc
    ...
    fun:Fc*Add*
}
{
    #Same root cause as font_config_bug_2.
    #The 'leak' here is a copy of rule values, as opposed to new values.
    font_config_bug_3
    Memcheck:Leak
    fun:*alloc
    ...
    fun:FcConfigValues
    fun:FcConfigSubstituteWithPat
    fun:FcFontRenderPrepare
}
{
    #Same root cause as font_config_bug_2.
    #The 'leak' is copies of font or pattern values into returned pattern values.
    font_config_bug_4
    Memcheck:Leak
    fun:*alloc
    ...
    fun:FcValue*
    fun:FcFontRenderPrepare
}
{
    zlib_bug_1
    Memcheck:Cond
    fun:inflateReset2
    fun:inflateInit2_
    fun:png_create_read_struct_2
    fun:png_create_read_struct
}
{
    zlib_bug_2
    Memcheck:Cond
    fun:inflateReset2
    fun:inflateInit2_
    fun:_ZN12_GLOBAL__N_17doFlateEbP8SkStreamP9SkWStream
    fun:_ZN7SkFlate7InflateEP8SkStreamP9SkWStream
}

# Why is it OK to suppress this?
{
    SkRTConfRegistry_bug_1
    Memcheck:Leak
    fun:_Znwm
    fun:_ZN16SkRTConfRegistry12registerConfEP12SkRTConfBase
}

# The gpu_issue_* suppressions suppress issues that cannot be reproduced locally. These appear to be
# due to valgrind not knowing about memory mapped by the ATI driver via glMapBuffer.
{
    gpu_issue_1
    Memcheck:Addr2
    fun:_ZNK5GrGpu18getQuadIndexBufferEv
}
{
    gpu_issue_2
    Memcheck:Addr2
    fun:_ZN24GrAAHairLinePathRenderer6CreateEP9GrContext
}
{
    gpu_issue_3
    Memcheck:Addr2
    fun:_ZN16GrAARectRenderer21aaFillRectIndexBufferEP5GrGpu
}
{
    gpu_issue_4
    Memcheck:Addr8
    fun:_ZN24GrAAHairLinePathRenderer14createLineGeomERK6SkPathP12GrDrawTargetRK8SkTArrayI7SkPointLb1EEiPNS3_19AutoReleaseGeometryEP6SkRect
}
{
    gpu_issue_5
    Memcheck:Addr8
    fun:_ZN21GrDefaultPathRenderer10createGeomERK6SkPathRK11SkStrokeRecfP12GrDrawTargetP15GrPrimitiveTypePiSA_PNS6_19AutoReleaseGeometryE
}
{
    gpu_issue_6
    Memcheck:Addr8
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_7
    Memcheck:Addr4
    fun:_ZNK7SkPoint24distanceToLineBetweenSqdERKS_S1_PNS_4SideE
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_8
    Memcheck:Addr4
    fun:_ZN24GrAAHairLinePathRenderer14createLineGeomERK6SkPathP12GrDrawTargetRK8SkTArrayI7SkPointLb1EEiPNS3_19AutoReleaseGeometryEP6SkRect
}
{
    gpu_issue_9
    Memcheck:Addr2
    fun:_ZN21GrDefaultPathRenderer10createGeomERK6SkPathRK11SkStrokeRecfP12GrDrawTargetP15GrPrimitiveTypePiSA_PNS6_19AutoReleaseGeometryE
}
{
    gpu_issue_10
    Memcheck:Addr4
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_11
    Memcheck:Addr2
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_12
    Memcheck:Addr8
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_13
    Memcheck:Addr4
    fun:_ZNK7SkPoint24distanceToLineBetweenSqdERKS_S1_PNS_4SideE
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_14
    Memcheck:Addr4
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    gpu_issue_15
    Memcheck:Addr2
    fun:_ZN22GrAAConvexPathRenderer10onDrawPathERK6SkPathRK11SkStrokeRecP12GrDrawTargetb
}
{
    libjpeg_turbo_bug4550_1
    Memcheck:Cond
    fun:_Z26S32A_Opaque_BlitRow32_SSE4PjPKjij
    fun:_ZN14Sprite_D32_S328blitRectEiiii
}
{
    libjpeg_turbo_bug4550_2
    Memcheck:Cond
    fun:_ZL15S32A_D565_BlendPtPKjijii
    fun:_ZN26Sprite_D16_S32_BlitRowProc8blitRectEiiii
}
{
    libjpeg_turbo_bug4550_3
    Memcheck:Cond
    fun:_ZN12_GLOBAL__N_120ConvolveHorizontallyILb0EEEvPKhRK21SkConvolutionFilter1DPh
    fun:_Z14BGRAConvolve2DPKhibRK21SkConvolutionFilter1DS3_iPhRK18SkConvolutionProcsb
}
