skia2/tests/DebugLayerManagerTest.cpp
Kevin Lubick 556ca8f7ee [includes] Enforce IWYU for //tools/debugger/...
This moves the Build-Debian10-BazelClang-x86_64-Release-IWYU
job from experimental to on when a file in one of the
folders that we enforce IWYU is modified (currently
for svg, sksl, and now, debugger).

Change-Id: Ia6fe1e7b30fc486db3eb081b6a64bc4c250cbf0b
Bug: skia:13052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/525796
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
2022-03-30 13:53:13 +00:00

84 lines
2.9 KiB
C++

/*
* Copyright 2019 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/core/SkPaint.h"
#include "include/core/SkPicture.h"
#include "include/core/SkPictureRecorder.h"
#include "include/core/SkPixmap.h"
#include "include/core/SkRect.h"
#include "tests/Test.h"
#include "tools/debugger/DebugLayerManager.h"
// Adds one full update, one partial update, and requests one image a few frames later.
static void test_basic(skiatest::Reporter* reporter) {
// prepare supporting objects
int layerWidth = 100;
int layerHeight = 100;
// make a picture that fully updates the layer
SkPictureRecorder rec;
SkCanvas* canvas = rec.beginRecording(layerWidth, layerHeight);
canvas->clear(0x00000000);
SkPaint paint;
paint.setColor(SK_ColorBLUE);
canvas->drawOval(SkRect::MakeLTRB(1,1,99,99), paint);
auto picture1 = rec.finishRecordingAsPicture();
SkIRect dirtyRectFull = SkIRect::MakeLTRB(0, 0, layerWidth, layerHeight);
// make a second picture that acts as a partial update.
SkPictureRecorder rec2;
canvas = rec2.beginRecording(layerWidth, layerHeight);
paint.setColor(SK_ColorGREEN);
canvas->drawOval(SkRect::MakeLTRB(40,40,60,60), paint);
auto picture2 = rec2.finishRecordingAsPicture();
SkIRect dirtyRectPartial = SkIRect::MakeLTRB(40,40,60,60);
int node = 2;
// create and exercise DebugLayerManager
DebugLayerManager dlm;
dlm.storeSkPicture(node, 0, picture1, dirtyRectFull);
dlm.storeSkPicture(node, 10, picture2, dirtyRectPartial);
auto frames = dlm.listFramesForNode(node);
// Confirm the layer manager stored these at the right places.
REPORTER_ASSERT(reporter, frames.size() == 2);
REPORTER_ASSERT(reporter, frames[0] == 0);
REPORTER_ASSERT(reporter, frames[1] == 10);
SkPixmap pixmap;
// request an image of the layer between the two updates.
for (int i=0; i<10; i++) {
auto image = dlm.getLayerAsImage(node, i);
REPORTER_ASSERT(reporter, image->width() == layerWidth);
REPORTER_ASSERT(reporter, image->height() == layerHeight);
// confirm center is blue, proving only first pic was drawn.
image->peekPixels(&pixmap);
SkColor paintColor = pixmap.getColor(50, 50);
REPORTER_ASSERT(reporter, paintColor == SK_ColorBLUE);
}
// For any images after the second draw, confirm the center is green, but the area just outside
// that smaller circle is still blue, proving dlm drew both pictures.
for (int i=10; i<12; i++) {
auto image = dlm.getLayerAsImage(node, i);
REPORTER_ASSERT(reporter, image->width() == layerWidth);
REPORTER_ASSERT(reporter, image->height() == layerHeight);
image->peekPixels(&pixmap);
auto innerColor = pixmap.getColor(50, 50);
REPORTER_ASSERT(reporter, innerColor == SK_ColorGREEN);
auto outerColor = pixmap.getColor(10, 50);
REPORTER_ASSERT(reporter, outerColor == SK_ColorBLUE);
}
}
DEF_TEST(DebugLayerManagerTest, reporter) {
test_basic(reporter);
}