Don't reset the capture mode after each frame when using the CallbackAPI
When multiframe skp support was introduced it set the capture mode to none for everything but the multiframe use case. This was incorrect in the case of the CallbackAPI where we want to continue to capture frames. Bug: 152084866 Test: hwui_unit_tests Change-Id: I7e3caf41a3725d03252df1ab7bedfe1b69a238c2
This commit is contained in:
@@ -418,9 +418,9 @@ void SkiaPipeline::endCapture(SkSurface* surface) {
|
||||
auto data = picture->serialize();
|
||||
savePictureAsync(data, mCapturedFile);
|
||||
mCaptureSequence = 0;
|
||||
mCaptureMode = CaptureMode::None;
|
||||
}
|
||||
}
|
||||
mCaptureMode = CaptureMode::None;
|
||||
mRecorder.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,3 +403,40 @@ RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, context_lost) {
|
||||
renderThread.destroyRenderingContext();
|
||||
EXPECT_FALSE(pipeline->isSurfaceReady());
|
||||
}
|
||||
|
||||
RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, pictureCallback) {
|
||||
// create a pipeline and add a picture callback
|
||||
auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
|
||||
int callbackCount = 0;
|
||||
pipeline->setPictureCapturedCallback(
|
||||
[&callbackCount](sk_sp<SkPicture>&& picture) { callbackCount += 1; });
|
||||
|
||||
// create basic red frame and render it
|
||||
auto redNode = TestUtils::createSkiaNode(
|
||||
0, 0, 1, 1, [](RenderProperties& props, SkiaRecordingCanvas& redCanvas) {
|
||||
redCanvas.drawColor(SK_ColorRED, SkBlendMode::kSrcOver);
|
||||
});
|
||||
LayerUpdateQueue layerUpdateQueue;
|
||||
SkRect dirty = SkRectMakeLargest();
|
||||
std::vector<sp<RenderNode>> renderNodes;
|
||||
renderNodes.push_back(redNode);
|
||||
bool opaque = true;
|
||||
android::uirenderer::Rect contentDrawBounds(0, 0, 1, 1);
|
||||
auto surface = SkSurface::MakeRasterN32Premul(1, 1);
|
||||
pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface,
|
||||
SkMatrix::I());
|
||||
|
||||
// verify the callback was called
|
||||
EXPECT_EQ(1, callbackCount);
|
||||
|
||||
// render a second frame and check the callback count
|
||||
pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface,
|
||||
SkMatrix::I());
|
||||
EXPECT_EQ(2, callbackCount);
|
||||
|
||||
// unset the callback, render another frame, check callback was not invoked
|
||||
pipeline->setPictureCapturedCallback(nullptr);
|
||||
pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface,
|
||||
SkMatrix::I());
|
||||
EXPECT_EQ(2, callbackCount);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user