You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.0 KiB

title linkTitle
Writing Skia Tests Writing Skia Tests

We assume you have already synced Skia's dependencies and set up Skia's build system.

python2 tools/git-sync-deps
bin/gn gen out/Debug
bin/gn gen out/Release --args='is_debug=false'

Writing a Unit Test

  1. Add a file tests/NewUnitTest.cpp:

    /*
     * Copyright ........
     *
     * Use of this source code is governed by a BSD-style license
     * that can be found in the LICENSE file.
     */
    #include "Test.h"
    DEF_TEST(NewUnitTest, reporter) {
        if (1 + 1 != 2) {
            ERRORF(reporter, "%d + %d != %d", 1, 1, 2);
        }
        bool lifeIsGood = true;
        REPORTER_ASSERT(reporter, lifeIsGood);
    }
    
  2. Add NewUnitTest.cpp to gn/tests.gni.

  3. Recompile and run test:

    ninja -C out/Debug dm
    out/Debug/dm --match NewUnitTest
    

Writing a Rendering Test

  1. Add a file gm/newgmtest.cpp:

    /*
     * Copyright ........
     *
     * Use of this source code is governed by a BSD-style license
     * that can be found in the LICENSE file.
     */
    #include "gm.h"
    DEF_SIMPLE_GM(newgmtest, canvas, 128, 128) {
        canvas->clear(SK_ColorWHITE);
        SkPaint p;
        p.setStrokeWidth(2);
        canvas->drawLine(16, 16, 112, 112, p);
    }
    
  2. Add newgmtest.cpp to gn/gm.gni.

  3. Recompile and run test:

    ninja -C out/Debug dm
    out/Debug/dm --match newgmtest
    
  4. Run the GM inside Viewer:

    ninja -C out/Debug viewer
    out/Debug/viewer --slide GM_newgmtest
    

Writing a Benchmark Test

  1. Add a file bench/FooBench.cpp:

    /*
     * Copyright ........
     *
     * Use of this source code is governed by a BSD-style license
     * that can be found in the LICENSE file.
     */
    #include "Benchmark.h"
    #include "SkCanvas.h"
    namespace {
    class FooBench : public Benchmark {
    public:
        FooBench() {}
        virtual ~FooBench() {}
    protected:
        const char* onGetName() override { return "Foo"; }
        SkIPoint onGetSize() override { return SkIPoint{100, 100}; }
        void onDraw(int loops, SkCanvas* canvas) override {
            while (loops-- > 0) {
                canvas->drawLine(0.0f, 0.0f, 100.0f, 100.0f, SkPaint());
            }
        }
    };
    }  // namespace
    DEF_BENCH(return new FooBench;)
    
  2. Add FooBench.cpp to gn/bench.gni.

  3. Recompile and run nanobench:

    ninja -C out/Release nanobench
    out/Release/nanobench --match Foo