| Writing Skia Tests | |
| ================== | |
| + [Unit Tests](#test) | |
| + [Rendering Tests](#gm) | |
| + [Benchmark Tests](#bench) | |
| <span id="test"></span> | |
| Writing a Unit Test | |
| ------------------- | |
| 1. Add a file `tests/NewUnitTest.cpp`: | |
| <!--?prettify lang=cc?--> | |
| /* | |
| * 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. Recompile and run test: | |
| python bin/sync-and-gyp | |
| ninja -C out/Debug dm | |
| out/Debug/dm --match NewUnitTest | |
| <span id="gm"></span> | |
| Writing a Rendering Test | |
| ------------------------ | |
| 1. Add a file `gm/newgmtest.cpp`: | |
| <!--?prettify lang=cc?--> | |
| /* | |
| * 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. Recompile and run test: | |
| python bin/sync-and-gyp | |
| ninja -C out/Debug dm | |
| out/Debug/dm --match newgmtest | |
| 3. Run the GM inside SampleApp: | |
| python bin/sync-and-gyp | |
| ninja -C out/Debug SampleApp | |
| out/Debug/SampleApp --slide GM:newgmtest | |
| On MacOS, try this: | |
| out/Debug/SampleApp.app/Contents/MacOS/SampleApp --slide GM:newgmtest | |
| <span id="bench"></span> | |
| Writing a Benchmark Test | |
| ------------------------ | |
| 1. Add a file `bench/FooBench.cpp`: | |
| <!--?prettify lang=cc?--> | |
| /* | |
| * 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. Recompile and run nanobench: | |
| python bin/sync-and-gyp | |
| ninja -C out/Release nanobench | |
| out/Release/nanobench --match Foo |