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

Side by Side Diff: Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp

Issue 659873002: Making display list canvases fall back to gpu-accelerated when appropriate (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: response to comments Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « Source/platform/graphics/RecordingImageBufferSurface.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "platform/graphics/RecordingImageBufferSurface.h" 7 #include "platform/graphics/RecordingImageBufferSurface.h"
8 8
9 #include "platform/graphics/GraphicsContext.h" 9 #include "platform/graphics/GraphicsContext.h"
10 #include "platform/graphics/ImageBuffer.h" 10 #include "platform/graphics/ImageBuffer.h"
11 #include "platform/graphics/ImageBufferClient.h" 11 #include "platform/graphics/ImageBufferClient.h"
12 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
12 #include "public/platform/Platform.h" 13 #include "public/platform/Platform.h"
13 #include "public/platform/WebThread.h" 14 #include "public/platform/WebThread.h"
14 #include "third_party/skia/include/core/SkCanvas.h" 15 #include "third_party/skia/include/core/SkCanvas.h"
15 #include "third_party/skia/include/core/SkPictureRecorder.h" 16 #include "third_party/skia/include/core/SkPictureRecorder.h"
16 #include "wtf/OwnPtr.h" 17 #include "wtf/OwnPtr.h"
17 #include "wtf/PassOwnPtr.h" 18 #include "wtf/PassOwnPtr.h"
18 #include "wtf/RefPtr.h" 19 #include "wtf/RefPtr.h"
19 20
20 #include <gmock/gmock.h> 21 #include <gmock/gmock.h>
21 #include <gtest/gtest.h> 22 #include <gtest/gtest.h>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 } 67 }
67 68
68 int frameCount() { return m_frameCount; } 69 int frameCount() { return m_frameCount; }
69 70
70 private: 71 private:
71 bool m_isDirty; 72 bool m_isDirty;
72 ImageBuffer* m_imageBuffer; 73 ImageBuffer* m_imageBuffer;
73 int m_frameCount; 74 int m_frameCount;
74 }; 75 };
75 76
77 class MockSurfaceFactory : public RecordingImageBufferFallbackSurfaceFactory {
78 public:
79 MockSurfaceFactory() : m_createSurfaceCount(0) { }
80
81 virtual PassOwnPtr<ImageBufferSurface> createSurface(const IntSize& size, Op acityMode opacityMode)
82 {
83 m_createSurfaceCount++;
84 return adoptPtr(new UnacceleratedImageBufferSurface(size, opacityMode));
85 }
86
87 virtual ~MockSurfaceFactory() { }
88
89 int createSurfaceCount() { return m_createSurfaceCount; }
90
91 private:
92 int m_createSurfaceCount;
93 };
94
76 } // unnamed namespace 95 } // unnamed namespace
77 96
78 class RecordingImageBufferSurfaceTest : public Test { 97 class RecordingImageBufferSurfaceTest : public Test {
79 protected: 98 protected:
80 RecordingImageBufferSurfaceTest() 99 RecordingImageBufferSurfaceTest()
81 { 100 {
82 OwnPtr<RecordingImageBufferSurface> testSurface = adoptPtr(new Recording ImageBufferSurface(IntSize(10, 10))); 101 OwnPtr<MockSurfaceFactory> surfaceFactory = adoptPtr(new MockSurfaceFact ory());
102 m_surfaceFactory = surfaceFactory.get();
103 OwnPtr<RecordingImageBufferSurface> testSurface = adoptPtr(new Recording ImageBufferSurface(IntSize(10, 10), surfaceFactory.release()));
83 m_testSurface = testSurface.get(); 104 m_testSurface = testSurface.get();
84 // We create an ImageBuffer in order for the testSurface to be 105 // We create an ImageBuffer in order for the testSurface to be
85 // properly initialized with a GraphicsContext 106 // properly initialized with a GraphicsContext
86 m_imageBuffer = ImageBuffer::create(testSurface.release()); 107 m_imageBuffer = ImageBuffer::create(testSurface.release());
87 EXPECT_FALSE(!m_imageBuffer); 108 EXPECT_FALSE(!m_imageBuffer);
88 m_fakeImageBufferClient = adoptPtr(new FakeImageBufferClient(m_imageBuff er.get())); 109 m_fakeImageBufferClient = adoptPtr(new FakeImageBufferClient(m_imageBuff er.get()));
89 m_imageBuffer->setClient(m_fakeImageBufferClient.get()); 110 m_imageBuffer->setClient(m_fakeImageBufferClient.get());
90 } 111 }
91 112
92 public: 113 public:
(...skipping 25 matching lines...) Expand all
118 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount()); 139 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
119 expectDisplayListEnabled(true); 140 expectDisplayListEnabled(true);
120 } 141 }
121 142
122 void testAnimatedWithoutClear() 143 void testAnimatedWithoutClear()
123 { 144 {
124 m_testSurface->initializeCurrentFrame(); 145 m_testSurface->initializeCurrentFrame();
125 m_fakeImageBufferClient->fakeDraw(); 146 m_fakeImageBufferClient->fakeDraw();
126 m_testSurface->getPicture(); 147 m_testSurface->getPicture();
127 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount()); 148 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
149 EXPECT_EQ(0, m_surfaceFactory->createSurfaceCount());
128 expectDisplayListEnabled(true); // first frame has an implicit clear 150 expectDisplayListEnabled(true); // first frame has an implicit clear
129 m_fakeImageBufferClient->fakeDraw(); 151 m_fakeImageBufferClient->fakeDraw();
130 m_testSurface->getPicture(); 152 m_testSurface->getPicture();
131 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount()); 153 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
132 expectDisplayListEnabled(false); 154 expectDisplayListEnabled(false);
133 } 155 }
134 156
135 void testFrameFinalizedByTaskObserver1() 157 void testFrameFinalizedByTaskObserver1()
136 { 158 {
137 m_testSurface->initializeCurrentFrame(); 159 m_testSurface->initializeCurrentFrame();
(...skipping 10 matching lines...) Expand all
148 m_fakeImageBufferClient->fakeDraw(); 170 m_fakeImageBufferClient->fakeDraw();
149 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount()); 171 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
150 expectDisplayListEnabled(true); 172 expectDisplayListEnabled(true);
151 // Display list will be disabled only after exiting the runLoop 173 // Display list will be disabled only after exiting the runLoop
152 } 174 }
153 void testFrameFinalizedByTaskObserver2() 175 void testFrameFinalizedByTaskObserver2()
154 { 176 {
155 EXPECT_EQ(3, m_fakeImageBufferClient->frameCount()); 177 EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
156 expectDisplayListEnabled(false); 178 expectDisplayListEnabled(false);
157 m_testSurface->getPicture(); 179 m_testSurface->getPicture();
158 EXPECT_EQ(4, m_fakeImageBufferClient->frameCount()); 180 EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
159 expectDisplayListEnabled(false); 181 expectDisplayListEnabled(false);
160 m_fakeImageBufferClient->fakeDraw(); 182 m_fakeImageBufferClient->fakeDraw();
161 EXPECT_EQ(4, m_fakeImageBufferClient->frameCount()); 183 EXPECT_EQ(3, m_fakeImageBufferClient->frameCount());
162 expectDisplayListEnabled(false); 184 expectDisplayListEnabled(false);
163 } 185 }
164 186
165 void testAnimatedWithClear() 187 void testAnimatedWithClear()
166 { 188 {
167 m_testSurface->initializeCurrentFrame(); 189 m_testSurface->initializeCurrentFrame();
168 m_testSurface->getPicture(); 190 m_testSurface->getPicture();
169 m_testSurface->didClearCanvas(); 191 m_testSurface->didClearCanvas();
170 m_fakeImageBufferClient->fakeDraw(); 192 m_fakeImageBufferClient->fakeDraw();
171 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount()); 193 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
(...skipping 17 matching lines...) Expand all
189 m_fakeImageBufferClient->fakeDraw(); 211 m_fakeImageBufferClient->fakeDraw();
190 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount()); 212 EXPECT_EQ(1, m_fakeImageBufferClient->frameCount());
191 m_testSurface->getPicture(); 213 m_testSurface->getPicture();
192 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount()); 214 EXPECT_EQ(2, m_fakeImageBufferClient->frameCount());
193 expectDisplayListEnabled(true); 215 expectDisplayListEnabled(true);
194 } 216 }
195 217
196 void expectDisplayListEnabled(bool displayListEnabled) 218 void expectDisplayListEnabled(bool displayListEnabled)
197 { 219 {
198 EXPECT_EQ(displayListEnabled, (bool)m_testSurface->m_currentFrame.get()) ; 220 EXPECT_EQ(displayListEnabled, (bool)m_testSurface->m_currentFrame.get()) ;
199 EXPECT_EQ(!displayListEnabled, (bool)m_testSurface->m_rasterCanvas.get() ); 221 EXPECT_EQ(!displayListEnabled, (bool)m_testSurface->m_fallbackSurface.ge t());
222 int expectedSurfaceCreationCount = displayListEnabled ? 0 : 1;
223 EXPECT_EQ(expectedSurfaceCreationCount, m_surfaceFactory->createSurfaceC ount());
200 } 224 }
201 225
202 private: 226 private:
227 MockSurfaceFactory* m_surfaceFactory;
203 RecordingImageBufferSurface* m_testSurface; 228 RecordingImageBufferSurface* m_testSurface;
204 OwnPtr<FakeImageBufferClient> m_fakeImageBufferClient; 229 OwnPtr<FakeImageBufferClient> m_fakeImageBufferClient;
205 OwnPtr<ImageBuffer> m_imageBuffer; 230 OwnPtr<ImageBuffer> m_imageBuffer;
206 }; 231 };
207 232
208 namespace { 233 namespace {
209 234
210 // The following test helper class installs a mock platform that provides a mock WebThread 235 // The following test helper class installs a mock platform that provides a mock WebThread
211 // for the current thread. The Mock thread is capable of queuing a single non-de layed task 236 // for the current thread. The Mock thread is capable of queuing a single non-de layed task
212 // and registering a single task observer. The run loop exits immediately after running 237 // and registering a single task observer. The run loop exits immediately after running
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 } 378 }
354 379
355 DEFINE_TEST_TASK_WRAPPER_CLASS(testClearRect) 380 DEFINE_TEST_TASK_WRAPPER_CLASS(testClearRect)
356 TEST_F(RecordingImageBufferSurfaceTest, testClearRect) 381 TEST_F(RecordingImageBufferSurfaceTest, testClearRect)
357 { 382 {
358 CALL_TEST_TASK_WRAPPER(testClearRect); 383 CALL_TEST_TASK_WRAPPER(testClearRect);
359 expectDisplayListEnabled(true); 384 expectDisplayListEnabled(true);
360 } 385 }
361 386
362 } // namespace 387 } // namespace
OLDNEW
« no previous file with comments | « Source/platform/graphics/RecordingImageBufferSurface.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698