Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1040)

Unified Diff: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp

Issue 2653933003: Make stream captures work on canvases that are not in the DOM. (Closed)
Patch Set: rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
index 36f8203ed999748523ea7b5c662af72d15441d9b..47f063bda8b60d09343eff4baa91d493782e8e96 100644
--- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
@@ -25,51 +25,6 @@ using testing::Test;
namespace blink {
-class FakeImageBufferClient : public ImageBufferClient,
- public WebThread::TaskObserver {
- public:
- FakeImageBufferClient(ImageBuffer* imageBuffer)
- : m_isDirty(false), m_imageBuffer(imageBuffer), m_frameCount(0) {}
-
- ~FakeImageBufferClient() override {}
-
- // ImageBufferClient implementation
- void notifySurfaceInvalid() override {}
- bool isDirty() override { return m_isDirty; }
- void didDisableAcceleration() override {}
- void didFinalizeFrame() override {
- if (m_isDirty) {
- Platform::current()->currentThread()->removeTaskObserver(this);
- m_isDirty = false;
- }
- ++m_frameCount;
- }
-
- // TaskObserver implementation
- void willProcessTask() override { NOTREACHED(); }
- void didProcessTask() override {
- ASSERT_TRUE(m_isDirty);
- FloatRect dirtyRect(0, 0, 1, 1);
- m_imageBuffer->finalizeFrame(dirtyRect);
- ASSERT_FALSE(m_isDirty);
- }
- void restoreCanvasMatrixClipStack(PaintCanvas*) const override {}
-
- void fakeDraw() {
- if (m_isDirty)
- return;
- m_isDirty = true;
- Platform::current()->currentThread()->addTaskObserver(this);
- }
-
- int frameCount() { return m_frameCount; }
-
- private:
- bool m_isDirty;
- ImageBuffer* m_imageBuffer;
- int m_frameCount;
-};
-
class MockSurfaceFactory : public RecordingImageBufferFallbackSurfaceFactory {
public:
MockSurfaceFactory() : m_createSurfaceCount(0) {}
@@ -107,113 +62,13 @@ class RecordingImageBufferSurfaceTest : public Test {
// properly initialized with a GraphicsContext
m_imageBuffer = ImageBuffer::create(std::move(testSurface));
EXPECT_FALSE(!m_imageBuffer);
- m_fakeImageBufferClient =
- WTF::wrapUnique(new FakeImageBufferClient(m_imageBuffer.get()));
- m_imageBuffer->setClient(m_fakeImageBufferClient.get());
- }
-
- public:
- void testEmptyRecord() {
- m_testSurface->initializeCurrentFrame();
- sk_sp<PaintRecord> record = m_testSurface->getRecord();
- EXPECT_TRUE((bool)record.get());
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- }
-
- void testNoFallbackWithClear() {
- m_testSurface->initializeCurrentFrame();
- m_testSurface->willOverwriteCanvas();
- m_testSurface->getRecord();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- }
-
- void testNonAnimatedCanvasUpdate() {
m_testSurface->initializeCurrentFrame();
- // Acquire record twice to simulate a static canvas: nothing drawn between
- // updates.
- m_fakeImageBufferClient->fakeDraw();
- m_testSurface->getRecord();
- m_testSurface->getRecord();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
}
- void testAnimatedWithoutClear() {
- m_testSurface->initializeCurrentFrame();
- m_fakeImageBufferClient->fakeDraw();
- m_testSurface->getRecord();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- EXPECT_EQ(0, m_surfaceFactory->createSurfaceCount());
- expectDisplayListEnabled(true); // first frame has an implicit clear
- m_fakeImageBufferClient->fakeDraw();
- m_testSurface->getRecord();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(false);
- }
-
- void testFrameFinalizedByTaskObserver1() {
- m_testSurface->initializeCurrentFrame();
- expectDisplayListEnabled(true);
- m_testSurface->getRecord();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- m_fakeImageBufferClient->fakeDraw();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- m_testSurface->getRecord();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- m_fakeImageBufferClient->fakeDraw();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- // Display list will be disabled only after exiting the runLoop
- }
- void testFrameFinalizedByTaskObserver2() {
- EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(false);
- m_testSurface->getRecord();
- EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(false);
- m_fakeImageBufferClient->fakeDraw();
- EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(false);
- }
-
- void testAnimatedWithClear() {
- m_testSurface->initializeCurrentFrame();
- m_testSurface->getRecord();
- m_testSurface->willOverwriteCanvas();
- m_fakeImageBufferClient->fakeDraw();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- m_testSurface->getRecord();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- // clear after use
- m_fakeImageBufferClient->fakeDraw();
- m_testSurface->willOverwriteCanvas();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- m_testSurface->getRecord();
- EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- }
-
- void testClearRect() {
- m_testSurface->initializeCurrentFrame();
- m_testSurface->getRecord();
- PaintFlags clearPaint;
- clearPaint.setBlendMode(SkBlendMode::kClear);
- m_imageBuffer->canvas()->drawRect(
- SkRect::MakeWH(m_testSurface->size().width(),
- m_testSurface->size().height()),
- clearPaint);
- m_fakeImageBufferClient->fakeDraw();
- EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
- m_testSurface->getRecord();
- EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
- expectDisplayListEnabled(true);
- }
+ public:
+ RecordingImageBufferSurface* testSurface() { return m_testSurface; }
+ int createSurfaceCount() { return m_surfaceFactory->createSurfaceCount(); }
+ SkCanvas* canvas() { return m_imageBuffer->canvas(); }
void expectDisplayListEnabled(bool displayListEnabled) {
EXPECT_EQ(displayListEnabled, (bool)m_testSurface->m_currentFrame.get());
@@ -227,53 +82,62 @@ class RecordingImageBufferSurfaceTest : public Test {
private:
MockSurfaceFactory* m_surfaceFactory;
RecordingImageBufferSurface* m_testSurface;
- std::unique_ptr<FakeImageBufferClient> m_fakeImageBufferClient;
std::unique_ptr<ImageBuffer> m_imageBuffer;
};
-#define CALL_TEST_TASK_WRAPPER(TEST_METHOD) \
- { \
- ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> \
- platform; \
- Platform::current()->currentThread()->getWebTaskRunner()->postTask( \
- BLINK_FROM_HERE, \
- WTF::bind(&RecordingImageBufferSurfaceTest::TEST_METHOD, \
- WTF::unretained(this))); \
- platform->runUntilIdle(); \
- }
-
-TEST_F(RecordingImageBufferSurfaceTest, testEmptyRecord) {
- testEmptyRecord();
+TEST_F(RecordingImageBufferSurfaceTest, testEmptyPicture) {
+ sk_sp<SkPicture> picture = testSurface()->getRecord();
+ EXPECT_TRUE((bool)picture.get());
+ expectDisplayListEnabled(true);
}
TEST_F(RecordingImageBufferSurfaceTest, testNoFallbackWithClear) {
- testNoFallbackWithClear();
+ testSurface()->willOverwriteCanvas();
+ testSurface()->getRecord();
+ expectDisplayListEnabled(true);
}
TEST_F(RecordingImageBufferSurfaceTest, testNonAnimatedCanvasUpdate) {
- CALL_TEST_TASK_WRAPPER(testNonAnimatedCanvasUpdate)
+ // Acquire picture twice to simulate a static canvas: nothing drawn between
+ // updates.
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->getRecord();
+ testSurface()->getRecord();
expectDisplayListEnabled(true);
}
TEST_F(RecordingImageBufferSurfaceTest, testAnimatedWithoutClear) {
- CALL_TEST_TASK_WRAPPER(testAnimatedWithoutClear)
- expectDisplayListEnabled(false);
-}
-
-TEST_F(RecordingImageBufferSurfaceTest, testFrameFinalizedByTaskObserver) {
- CALL_TEST_TASK_WRAPPER(testFrameFinalizedByTaskObserver1)
- expectDisplayListEnabled(false);
- CALL_TEST_TASK_WRAPPER(testFrameFinalizedByTaskObserver2)
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->getRecord();
+ EXPECT_EQ(0, createSurfaceCount());
+ expectDisplayListEnabled(true); // first frame has an implicit clear
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->getRecord();
expectDisplayListEnabled(false);
}
TEST_F(RecordingImageBufferSurfaceTest, testAnimatedWithClear) {
- CALL_TEST_TASK_WRAPPER(testAnimatedWithClear)
+ testSurface()->getRecord();
+ testSurface()->willOverwriteCanvas();
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->getRecord();
+ expectDisplayListEnabled(true);
+ // clear after use
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->willOverwriteCanvas();
+ testSurface()->getRecord();
expectDisplayListEnabled(true);
}
TEST_F(RecordingImageBufferSurfaceTest, testClearRect) {
- CALL_TEST_TASK_WRAPPER(testClearRect);
+ testSurface()->getRecord();
+ SkPaint clearPaint;
+ clearPaint.setBlendMode(SkBlendMode::kClear);
+ canvas()->drawRect(SkRect::MakeWH(testSurface()->size().width(),
+ testSurface()->size().height()),
+ clearPaint);
+ testSurface()->didDraw(FloatRect(0, 0, 1, 1));
+ testSurface()->getRecord();
expectDisplayListEnabled(true);
}

Powered by Google App Engine
This is Rietveld 408576698