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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferSoftwareRenderingTest.cpp

Issue 2362473002: Adding unit test for DrawingBuffer's bitmap recycling mechanism (Closed)
Patch Set: minor cleanup Created 4 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "platform/graphics/gpu/DrawingBuffer.h"
6
7 #include "cc/resources/single_release_callback.h"
8 #include "cc/resources/texture_mailbox.h"
9 #include "gpu/command_buffer/client/gles2_interface_stub.h"
10 #include "platform/graphics/gpu/DrawingBufferTestHelpers.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 // These unit tests are separate from DrawingBufferTests.cpp because they are bu ilt
14 // as a part of webkit_unittests instead blink_platform_unittests because the
15 // software rendering mode has a dependency on the blink::Platform interface
16 // for buffer allocations.
17
18 namespace blink {
19 namespace {
20
21 using namespace testing;
22
23 class WebGraphicsContext3DProviderSoftwareRenderingForTests : public WebGraphics Context3DProvider {
24 public:
25 WebGraphicsContext3DProviderSoftwareRenderingForTests(std::unique_ptr<gpu::g les2::GLES2Interface> gl)
26 : m_gl(std::move(gl))
27 {
28 }
29
30 gpu::gles2::GLES2Interface* contextGL() override { return m_gl.get(); }
31 bool isSoftwareRendering() const override { return true; }
32
33 // Not used by WebGL code.
34 GrContext* grContext() override { return nullptr; }
35 bool bindToCurrentThread() override { return false; }
36 gpu::Capabilities getCapabilities() override { return gpu::Capabilities(); }
37 void setLostContextCallback(WebClosure) {}
38 void setErrorMessageCallback(WebFunction<void(const char*, int32_t id)>) {}
39
40 private:
41 std::unique_ptr<gpu::gles2::GLES2Interface> m_gl;
42 };
43
44 class DrawingBufferSoftwareRenderingTest : public Test {
45 protected:
46 void SetUp() override
47 {
48 std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2Interfa ceForTests);
49 std::unique_ptr<WebGraphicsContext3DProviderSoftwareRenderingForTests> p rovider = wrapUnique(new WebGraphicsContext3DProviderSoftwareRenderingForTests(s td::move(gl)));
50 m_drawingBuffer = DrawingBufferForTests::create(std::move(provider), Int Size(InitialWidth, InitialHeight), DrawingBuffer::Preserve);
51 CHECK(m_drawingBuffer);
52 }
53
54 RefPtr<DrawingBufferForTests> m_drawingBuffer;
55 bool m_isSoftwareRendering = false;
56 };
57
58 TEST_F(DrawingBufferSoftwareRenderingTest, bitmapRecycling)
59 {
60 cc::TextureMailbox textureMailbox;
61 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
62 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
xidachen 2016/09/22 01:48:16 callback2 doesn't seem to be used in this test.
63 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
64 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback4;
65
66 m_drawingBuffer->reset(IntSize(InitialWidth, InitialHeight));
67 m_drawingBuffer->markContentsChanged();
68 m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback1); // create a bitmap.
69 EXPECT_EQ(0, m_drawingBuffer->recycledBitmapCount());
70 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); // releas e bitmap to the recycling queue
71 EXPECT_EQ(1, m_drawingBuffer->recycledBitmapCount());
72 m_drawingBuffer->markContentsChanged();
73 m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback3); // recycle a bitmap.
74 EXPECT_EQ(0, m_drawingBuffer->recycledBitmapCount());
75 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */); // releas e bitmap to the recycling queue
76 EXPECT_EQ(1, m_drawingBuffer->recycledBitmapCount());
77 m_drawingBuffer->reset(IntSize(InitialWidth, AlternateHeight));
78 m_drawingBuffer->markContentsChanged();
79 // Regression test for crbug.com/647896 - Next line must not crash
80 m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback4); // cause recycling queue to be purged due to resize
81 EXPECT_EQ(0, m_drawingBuffer->recycledBitmapCount());
82 releaseCallback4->Run(gpu::SyncToken(), false /* lostResource */);
83 EXPECT_EQ(1, m_drawingBuffer->recycledBitmapCount());
84
85 m_drawingBuffer->beginDestruction();
86 }
87
88 } // unnamed namespace
89 } // blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698