c96fc37f23
This is a reland of 5820b0c3f3
It is updated in patchset 2 to clean up pointers passed into memcpy, and to
optimize the bounds calculation in GrPerspQuad. This should fix a performance
regression caused by the move away from caching 1/w. The Sk4f::invert() does not
always preserve 1/1 == 1, which led to bounds slightly outside of clips and
thus forced Skia to keep the scissor test enabled. The fix also restores the
optimization of skipping the 1/w division when the quad is known to be 2D.
Original change's description:
> Use specialized quad lists in rectangle ops
>
> Hopefully reduces memory footprint of GrFillRectOp and GrTextureOp
>
> The original rect code (GrAAFillRectOp) stored 2 SkMatrices (18 floats), 2
> SkRects (8 floats) an SkPMColor4f (4 floats) and a flag (1 int) for a total
> of 124 bytes per quad that was stored in the op.
>
> The first pass at the rectangle consolidation switched to storing device and
> local quads as GrPerspQuads (32 floats), an SkPMColor4f (4 floats) and a flag
> (1 int) for a total of 148 bytes per quad. After landing, several memory
> regressions appeared in Chrome and our perf monitor.
>
> Several intertwined approaches are taken here. First, GrPerspQuad no longer
> caches 1/w, which makes a quad 12 floats instead of 16. Second, a specialized
> list type is defined that allows storing the x, y, and extra metadata together
> for quads, but keeps the w components separate. When the quad type isn't
> perspective, w is not stored at all since it is implicitly 1 and can be
> reconstituted at tessellation time. This brings the total per quad to either
> 84 or 116 bytes, depending on if the op list needs perspective information.
>
> Bug: chromium:915025
> Bug: chromium:917242
> Change-Id: If37ee122847b0c32604bb45dc2a1326b544f9cf6
> Reviewed-on: https://skia-review.googlesource.com/c/180644
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
Bug: chromium:915025, chromium:917242
Change-Id: I98a1bf83fd7d393604823d567c57d7e06fad5e55
Reviewed-on: https://skia-review.googlesource.com/c/182203
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
354 lines
12 KiB
Plaintext
354 lines
12 KiB
Plaintext
# Copyright 2016 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# Things are easiest for everyone if these source paths are absolute.
|
|
_tests = get_path_info("../tests", "abspath")
|
|
|
|
tests_sources = [
|
|
"$_tests/AndroidCodecTest.cpp",
|
|
"$_tests/AnimatedImageTest.cpp",
|
|
"$_tests/AAClipTest.cpp",
|
|
"$_tests/AnnotationTest.cpp",
|
|
"$_tests/ApplyGammaTest.cpp",
|
|
"$_tests/ArenaAllocTest.cpp",
|
|
"$_tests/AsADashTest.cpp",
|
|
"$_tests/BadIcoTest.cpp",
|
|
"$_tests/BitmapCopyTest.cpp",
|
|
"$_tests/BitmapGetColorTest.cpp",
|
|
"$_tests/BitmapTest.cpp",
|
|
"$_tests/BitSetTest.cpp",
|
|
"$_tests/BlendTest.cpp",
|
|
"$_tests/BlitMaskClip.cpp",
|
|
"$_tests/BlurTest.cpp",
|
|
"$_tests/CachedDataTest.cpp",
|
|
"$_tests/CachedDecodingPixelRefTest.cpp",
|
|
"$_tests/CanvasStateHelpers.cpp",
|
|
"$_tests/CanvasStateTest.cpp",
|
|
"$_tests/CanvasTest.cpp",
|
|
"$_tests/ChecksumTest.cpp",
|
|
"$_tests/ClearTest.cpp",
|
|
"$_tests/ClipBoundsTest.cpp",
|
|
"$_tests/ClipCubicTest.cpp",
|
|
"$_tests/ClipperTest.cpp",
|
|
"$_tests/ClipStackTest.cpp",
|
|
"$_tests/CodecAnimTest.cpp",
|
|
"$_tests/CodecExactReadTest.cpp",
|
|
"$_tests/CodecPartialTest.cpp",
|
|
"$_tests/CodecRecommendedTypeTest.cpp",
|
|
"$_tests/CodecTest.cpp",
|
|
"$_tests/ColorFilterTest.cpp",
|
|
"$_tests/ColorMatrixTest.cpp",
|
|
"$_tests/ColorPrivTest.cpp",
|
|
"$_tests/ColorSpaceTest.cpp",
|
|
"$_tests/ColorTest.cpp",
|
|
"$_tests/CopySurfaceTest.cpp",
|
|
"$_tests/CTest.cpp",
|
|
"$_tests/CubicMapTest.cpp",
|
|
"$_tests/DashPathEffectTest.cpp",
|
|
"$_tests/DataRefTest.cpp",
|
|
"$_tests/DefaultPathRendererTest.cpp",
|
|
"$_tests/DeferredDisplayListTest.cpp",
|
|
"$_tests/DequeTest.cpp",
|
|
"$_tests/DetermineDomainModeTest.cpp",
|
|
"$_tests/DeviceTest.cpp",
|
|
"$_tests/DiscardableMemoryPoolTest.cpp",
|
|
"$_tests/DiscardableMemoryTest.cpp",
|
|
"$_tests/DrawBitmapRectTest.cpp",
|
|
"$_tests/DrawOpAtlasTest.cpp",
|
|
"$_tests/DrawPathTest.cpp",
|
|
"$_tests/DrawTextTest.cpp",
|
|
"$_tests/DynamicHashTest.cpp",
|
|
"$_tests/EGLImageTest.cpp",
|
|
"$_tests/EmptyPathTest.cpp",
|
|
"$_tests/EncodeTest.cpp",
|
|
"$_tests/EncodedInfoTest.cpp",
|
|
"$_tests/ExifTest.cpp",
|
|
"$_tests/F16StagesTest.cpp",
|
|
"$_tests/FillPathTest.cpp",
|
|
"$_tests/FitsInTest.cpp",
|
|
"$_tests/FlattenableFactoryToName.cpp",
|
|
"$_tests/FlattenableNameToFactory.cpp",
|
|
"$_tests/FlattenDrawableTest.cpp",
|
|
"$_tests/Float16Test.cpp",
|
|
"$_tests/FloatingPointTextureTest.cpp",
|
|
"$_tests/FontHostStreamTest.cpp",
|
|
"$_tests/FontHostTest.cpp",
|
|
"$_tests/FontMgrAndroidParserTest.cpp",
|
|
"$_tests/FontMgrFontConfigTest.cpp",
|
|
"$_tests/FontMgrTest.cpp",
|
|
"$_tests/FontNamesTest.cpp",
|
|
"$_tests/FontObjTest.cpp",
|
|
"$_tests/FrontBufferedStreamTest.cpp",
|
|
"$_tests/GeometryTest.cpp",
|
|
"$_tests/GifTest.cpp",
|
|
"$_tests/GLProgramsTest.cpp",
|
|
"$_tests/GlyphRunTest.cpp",
|
|
"$_tests/GpuDrawPathTest.cpp",
|
|
"$_tests/GpuLayerCacheTest.cpp",
|
|
"$_tests/GpuRectanizerTest.cpp",
|
|
"$_tests/GradientTest.cpp",
|
|
"$_tests/GrAHardwareBufferTest.cpp",
|
|
"$_tests/GrAllocatorTest.cpp",
|
|
"$_tests/GrCCPRTest.cpp",
|
|
"$_tests/GrContextAbandonTest.cpp",
|
|
"$_tests/GrContextFactoryTest.cpp",
|
|
"$_tests/GrGLExtensionsTest.cpp",
|
|
"$_tests/GrMemoryPoolTest.cpp",
|
|
"$_tests/GrMeshTest.cpp",
|
|
"$_tests/GrMipMappedTest.cpp",
|
|
"$_tests/GrOpListFlushTest.cpp",
|
|
"$_tests/GrPipelineDynamicStateTest.cpp",
|
|
"$_tests/GrPorterDuffTest.cpp",
|
|
"$_tests/GrQuadListTest.cpp",
|
|
"$_tests/GrShapeTest.cpp",
|
|
"$_tests/GrSKSLPrettyPrintTest.cpp",
|
|
"$_tests/GrSurfaceTest.cpp",
|
|
"$_tests/GrTestingBackendTextureUploadTest.cpp",
|
|
"$_tests/GrTextureMipMapInvalidationTest.cpp",
|
|
"$_tests/GrTRecorderTest.cpp",
|
|
"$_tests/GrUploadPixelsTests.cpp",
|
|
"$_tests/HashTest.cpp",
|
|
"$_tests/HighContrastFilterTest.cpp",
|
|
"$_tests/HSVRoundTripTest.cpp",
|
|
"$_tests/image-bitmap.cpp",
|
|
"$_tests/ICCTest.cpp",
|
|
"$_tests/ImageCacheTest.cpp",
|
|
"$_tests/ImageFilterCacheTest.cpp",
|
|
"$_tests/ImageFilterTest.cpp",
|
|
"$_tests/ImageFrom565Bitmap.cpp",
|
|
"$_tests/ImageGeneratorTest.cpp",
|
|
"$_tests/ImageIsOpaqueTest.cpp",
|
|
"$_tests/ImageNewShaderTest.cpp",
|
|
"$_tests/ImageTest.cpp",
|
|
"$_tests/IndexedPngOverflowTest.cpp",
|
|
"$_tests/IncrTopoSortTest.cpp",
|
|
"$_tests/InfRectTest.cpp",
|
|
"$_tests/InsetConvexPolyTest.cpp",
|
|
"$_tests/InterpolatorTest.cpp",
|
|
"$_tests/InvalidIndexedPngTest.cpp",
|
|
"$_tests/IsClosedSingleContourTest.cpp",
|
|
"$_tests/JSONTest.cpp",
|
|
"$_tests/LayerDrawLooperTest.cpp",
|
|
"$_tests/LazyProxyTest.cpp",
|
|
"$_tests/LListTest.cpp",
|
|
"$_tests/LRUCacheTest.cpp",
|
|
"$_tests/MallocPixelRefTest.cpp",
|
|
"$_tests/MaskCacheTest.cpp",
|
|
"$_tests/MathTest.cpp",
|
|
"$_tests/Matrix44Test.cpp",
|
|
"$_tests/MatrixClipCollapseTest.cpp",
|
|
"$_tests/MatrixTest.cpp",
|
|
"$_tests/MD5Test.cpp",
|
|
"$_tests/MemoryTest.cpp",
|
|
"$_tests/MemsetTest.cpp",
|
|
"$_tests/MessageBusTest.cpp",
|
|
"$_tests/MetaDataTest.cpp",
|
|
"$_tests/MipMapTest.cpp",
|
|
"$_tests/NonlinearBlendingTest.cpp",
|
|
"$_tests/OnceTest.cpp",
|
|
"$_tests/OpChainTest.cpp",
|
|
"$_tests/OSPathTest.cpp",
|
|
"$_tests/OverAlignedTest.cpp",
|
|
"$_tests/PackBitsTest.cpp",
|
|
"$_tests/PackedConfigsTextureTest.cpp",
|
|
"$_tests/PaintBreakTextTest.cpp",
|
|
"$_tests/PaintImageFilterTest.cpp",
|
|
"$_tests/PaintTest.cpp",
|
|
"$_tests/ParametricStageTest.cpp",
|
|
"$_tests/ParsePathTest.cpp",
|
|
"$_tests/PathCoverageTest.cpp",
|
|
"$_tests/PathMeasureTest.cpp",
|
|
"$_tests/PathTest.cpp",
|
|
"$_tests/PDFDeflateWStreamTest.cpp",
|
|
"$_tests/PDFDocumentTest.cpp",
|
|
"$_tests/PDFGlyphsToUnicodeTest.cpp",
|
|
"$_tests/PDFJpegEmbedTest.cpp",
|
|
"$_tests/PDFMetadataAttributeTest.cpp",
|
|
"$_tests/PDFOpaqueSrcModeToSrcOverTest.cpp",
|
|
"$_tests/PDFPrimitivesTest.cpp",
|
|
"$_tests/PDFTaggedTest.cpp",
|
|
"$_tests/OffsetSimplePolyTest.cpp",
|
|
"$_tests/OnFlushCallbackTest.cpp",
|
|
"$_tests/PathRendererCacheTests.cpp",
|
|
"$_tests/PictureBBHTest.cpp",
|
|
"$_tests/PictureShaderTest.cpp",
|
|
"$_tests/PictureTest.cpp",
|
|
"$_tests/PinnedImageTest.cpp",
|
|
"$_tests/PixelRefTest.cpp",
|
|
"$_tests/Point3Test.cpp",
|
|
"$_tests/PointTest.cpp",
|
|
"$_tests/PolyUtilsTest.cpp",
|
|
"$_tests/PremulAlphaRoundTripTest.cpp",
|
|
"$_tests/PrimitiveProcessorTest.cpp",
|
|
"$_tests/ProcessorTest.cpp",
|
|
"$_tests/PromiseImageTest.cpp",
|
|
"$_tests/ProxyConversionTest.cpp",
|
|
"$_tests/ProxyRefTest.cpp",
|
|
"$_tests/ProxyTest.cpp",
|
|
"$_tests/QuickRejectTest.cpp",
|
|
"$_tests/RandomTest.cpp",
|
|
"$_tests/Reader32Test.cpp",
|
|
"$_tests/ReadPixelsTest.cpp",
|
|
"$_tests/ReadWriteAlphaTest.cpp",
|
|
"$_tests/RecordDrawTest.cpp",
|
|
"$_tests/RecorderTest.cpp",
|
|
"$_tests/RecordingXfermodeTest.cpp",
|
|
"$_tests/RecordOptsTest.cpp",
|
|
"$_tests/RecordPatternTest.cpp",
|
|
"$_tests/RecordTest.cpp",
|
|
"$_tests/RectangleTextureTest.cpp",
|
|
"$_tests/RectTest.cpp",
|
|
"$_tests/RefCntTest.cpp",
|
|
"$_tests/RegionTest.cpp",
|
|
"$_tests/RenderTargetContextTest.cpp",
|
|
"$_tests/ResourceAllocatorTest.cpp",
|
|
"$_tests/ResourceCacheTest.cpp",
|
|
"$_tests/RoundRectTest.cpp",
|
|
"$_tests/RRectInPathTest.cpp",
|
|
"$_tests/RTreeTest.cpp",
|
|
"$_tests/SafeMathTest.cpp",
|
|
"$_tests/ScalarTest.cpp",
|
|
"$_tests/ScaleToSidesTest.cpp",
|
|
"$_tests/SerializationTest.cpp",
|
|
"$_tests/SerialProcsTest.cpp",
|
|
"$_tests/ShaderOpacityTest.cpp",
|
|
"$_tests/ShaderTest.cpp",
|
|
"$_tests/ShadowTest.cpp",
|
|
"$_tests/SizeTest.cpp",
|
|
"$_tests/Sk4x4fTest.cpp",
|
|
"$_tests/SkBase64Test.cpp",
|
|
"$_tests/skbug5221.cpp",
|
|
"$_tests/skbug6389.cpp",
|
|
"$_tests/skbug6653.cpp",
|
|
"$_tests/SkColor4fTest.cpp",
|
|
"$_tests/SkColorSpaceXformStepsTest.cpp",
|
|
"$_tests/SkDOMTest.cpp",
|
|
"$_tests/SkFixed15Test.cpp",
|
|
"$_tests/SkGaussFilterTest.cpp",
|
|
"$_tests/SkImageTest.cpp",
|
|
"$_tests/SkLiteDLTest.cpp",
|
|
"$_tests/SkNxTest.cpp",
|
|
"$_tests/SkPEGTest.cpp",
|
|
"$_tests/SkRasterPipelineTest.cpp",
|
|
"$_tests/SkRemoteGlyphCacheTest.cpp",
|
|
"$_tests/SkResourceCacheTest.cpp",
|
|
"$_tests/SkSharedMutexTest.cpp",
|
|
"$_tests/SkSLErrorTest.cpp",
|
|
"$_tests/SkSLFPTest.cpp",
|
|
"$_tests/SkSLGLSLTest.cpp",
|
|
"$_tests/SkSLJITTest.cpp",
|
|
"$_tests/SkSLMemoryLayoutTest.cpp",
|
|
"$_tests/SkSLSPIRVTest.cpp",
|
|
"$_tests/SkUTFTest.cpp",
|
|
"$_tests/SortTest.cpp",
|
|
"$_tests/SpecialImageTest.cpp",
|
|
"$_tests/SpecialSurfaceTest.cpp",
|
|
"$_tests/SrcOverTest.cpp",
|
|
"$_tests/SRGBReadWritePixelsTest.cpp",
|
|
"$_tests/SRGBTest.cpp",
|
|
"$_tests/StreamBufferTest.cpp",
|
|
"$_tests/StreamTest.cpp",
|
|
"$_tests/StringTest.cpp",
|
|
"$_tests/StrokerTest.cpp",
|
|
"$_tests/StrokeTest.cpp",
|
|
"$_tests/SubsetPath.cpp",
|
|
"$_tests/SurfaceSemaphoreTest.cpp",
|
|
"$_tests/SurfaceTest.cpp",
|
|
"$_tests/SVGDeviceTest.cpp",
|
|
"$_tests/SwizzlerTest.cpp",
|
|
"$_tests/TArrayTest.cpp",
|
|
"$_tests/TDPQueueTest.cpp",
|
|
"$_tests/TableColorFilterTest.cpp",
|
|
"$_tests/TemplatesTest.cpp",
|
|
"$_tests/TessellatingPathRendererTests.cpp",
|
|
"$_tests/Test.cpp",
|
|
"$_tests/TestTest.cpp",
|
|
"$_tests/TestUtils.h",
|
|
"$_tests/TestUtils.cpp",
|
|
"$_tests/TextBlobCacheTest.cpp",
|
|
"$_tests/TextBlobTest.cpp",
|
|
"$_tests/TextureProxyTest.cpp",
|
|
"$_tests/TextureStripAtlasManagerTest.cpp",
|
|
"$_tests/Time.cpp",
|
|
"$_tests/TLazyTest.cpp",
|
|
"$_tests/TopoSortTest.cpp",
|
|
"$_tests/ToSRGBColorFilter.cpp",
|
|
"$_tests/TraceMemoryDumpTest.cpp",
|
|
"$_tests/TracingTest.cpp",
|
|
"$_tests/TransferPixelsTest.cpp",
|
|
"$_tests/TypefaceTest.cpp",
|
|
"$_tests/UnicodeTest.cpp",
|
|
"$_tests/UtilsTest.cpp",
|
|
"$_tests/VerticesTest.cpp",
|
|
"$_tests/VkBackendSurfaceTest.cpp",
|
|
"$_tests/VkDrawableTest.cpp",
|
|
"$_tests/VkMakeCopyPipelineTest.cpp",
|
|
"$_tests/VkWrapTests.cpp",
|
|
"$_tests/VptrTest.cpp",
|
|
"$_tests/WindowRectanglesTest.cpp",
|
|
"$_tests/WritePixelsTest.cpp",
|
|
"$_tests/Writer32Test.cpp",
|
|
"$_tests/YUVCacheTest.cpp",
|
|
"$_tests/YUVTest.cpp",
|
|
]
|
|
|
|
pathops_tests_sources = [
|
|
"$_tests/PathOpsAngleIdeas.cpp",
|
|
"$_tests/PathOpsAngleTest.cpp",
|
|
"$_tests/PathOpsAsWindingTest.cpp",
|
|
"$_tests/PathOpsBattles.cpp",
|
|
"$_tests/PathOpsBoundsTest.cpp",
|
|
"$_tests/PathOpsBuilderConicTest.cpp",
|
|
"$_tests/PathOpsBuilderTest.cpp",
|
|
"$_tests/PathOpsBuildUseTest.cpp",
|
|
"$_tests/PathOpsChalkboardTest.cpp",
|
|
"$_tests/PathOpsConicIntersectionTest.cpp",
|
|
"$_tests/PathOpsConicLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsConicQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicConicIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicIntersectionTestData.cpp",
|
|
"$_tests/PathOpsCubicLineIntersectionIdeas.cpp",
|
|
"$_tests/PathOpsCubicLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicReduceOrderTest.cpp",
|
|
"$_tests/PathOpsDCubicTest.cpp",
|
|
"$_tests/PathOpsDebug.cpp",
|
|
"$_tests/PathOpsDLineTest.cpp",
|
|
"$_tests/PathOpsDPointTest.cpp",
|
|
"$_tests/PathOpsDRectTest.cpp",
|
|
"$_tests/PathOpsDVectorTest.cpp",
|
|
"$_tests/PathOpsExtendedTest.cpp",
|
|
"$_tests/PathOpsFuzz763Test.cpp",
|
|
"$_tests/PathOpsInverseTest.cpp",
|
|
"$_tests/PathOpsIssue3651.cpp",
|
|
"$_tests/PathOpsLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsLineParametetersTest.cpp",
|
|
"$_tests/PathOpsOpCircleThreadedTest.cpp",
|
|
"$_tests/PathOpsOpCubicThreadedTest.cpp",
|
|
"$_tests/PathOpsOpLoopThreadedTest.cpp",
|
|
"$_tests/PathOpsOpRectThreadedTest.cpp",
|
|
"$_tests/PathOpsOpTest.cpp",
|
|
"$_tests/PathOpsQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsQuadIntersectionTestData.cpp",
|
|
"$_tests/PathOpsQuadLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsQuadLineIntersectionThreadedTest.cpp",
|
|
"$_tests/PathOpsQuadReduceOrderTest.cpp",
|
|
"$_tests/PathOpsSimplifyDegenerateThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyFailTest.cpp",
|
|
"$_tests/PathOpsSimplifyQuadralateralsThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyQuadThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyRectThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyTest.cpp",
|
|
"$_tests/PathOpsSimplifyTrianglesThreadedTest.cpp",
|
|
"$_tests/PathOpsSkpTest.cpp",
|
|
"$_tests/PathOpsTestCommon.cpp",
|
|
"$_tests/PathOpsThreadedCommon.cpp",
|
|
"$_tests/PathOpsThreeWayTest.cpp",
|
|
"$_tests/PathOpsTigerTest.cpp",
|
|
"$_tests/PathOpsTightBoundsTest.cpp",
|
|
"$_tests/PathOpsTypesTest.cpp",
|
|
]
|