| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); | 72 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); |
| 73 m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader
); | 73 m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader
); |
| 74 m_hostImpl->setViewportSize(IntSize(10, 10)); | 74 m_hostImpl->setViewportSize(IntSize(10, 10)); |
| 75 } | 75 } |
| 76 | 76 |
| 77 virtual void didLoseContextOnImplThread() OVERRIDE { } | 77 virtual void didLoseContextOnImplThread() OVERRIDE { } |
| 78 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } | 78 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } |
| 79 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } | 79 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } |
| 80 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } | 80 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } |
| 81 virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimat
ionEventsVector>, double wallClockTime) OVERRIDE { } | 81 virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimat
ionEventsVector>, double wallClockTime) OVERRIDE { } |
| 82 virtual void postSetContentsMemoryAllocationLimitBytesToMainThreadOnImplThre
ad(size_t) OVERRIDE { } | |
| 83 | 82 |
| 84 PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHost(bool partialSwap, PassRe
fPtr<CCGraphicsContext> graphicsContext, PassOwnPtr<CCLayerImpl> rootPtr) | 83 PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHost(bool partialSwap, PassRe
fPtr<CCGraphicsContext> graphicsContext, PassOwnPtr<CCLayerImpl> rootPtr) |
| 85 { | 84 { |
| 86 CCSettings::setPartialSwapEnabled(partialSwap); | 85 CCSettings::setPartialSwapEnabled(partialSwap); |
| 87 | 86 |
| 88 CCLayerTreeSettings settings; | 87 CCLayerTreeSettings settings; |
| 89 OwnPtr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set
tings, this); | 88 OwnPtr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set
tings, this); |
| 90 | 89 |
| 91 myHostImpl->initializeLayerRenderer(graphicsContext, UnthrottledUploader
); | 90 myHostImpl->initializeLayerRenderer(graphicsContext, UnthrottledUploader
); |
| 92 myHostImpl->setViewportSize(IntSize(10, 10)); | 91 myHostImpl->setViewportSize(IntSize(10, 10)); |
| (...skipping 1690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1783 root->setUpdateRect(FloatRect(0, 0, 2, 2)); | 1782 root->setUpdateRect(FloatRect(0, 0, 2, 2)); |
| 1784 | 1783 |
| 1785 // This draw should generate no new udpates | 1784 // This draw should generate no new udpates |
| 1786 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 1785 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 1787 myHostImpl->drawLayers(frame); | 1786 myHostImpl->drawLayers(frame); |
| 1788 myHostImpl->didDrawAllLayers(frame); | 1787 myHostImpl->didDrawAllLayers(frame); |
| 1789 | 1788 |
| 1790 Mock::VerifyAndClearExpectations(&mockContext); | 1789 Mock::VerifyAndClearExpectations(&mockContext); |
| 1791 } | 1790 } |
| 1792 | 1791 |
| 1793 class PartialSwapContext: public FakeWebGraphicsContext3D { | 1792 class PartialSwapContext : public FakeWebGraphicsContext3D { |
| 1794 public: | 1793 public: |
| 1795 WebString getString(WGC3Denum name) | 1794 WebString getString(WGC3Denum name) |
| 1796 { | 1795 { |
| 1797 if (name == GraphicsContext3D::EXTENSIONS) | 1796 if (name == GraphicsContext3D::EXTENSIONS) |
| 1798 return WebString("GL_CHROMIUM_post_sub_buffer"); | 1797 return WebString("GL_CHROMIUM_post_sub_buffer"); |
| 1799 return WebString(); | 1798 return WebString(); |
| 1800 } | 1799 } |
| 1801 | 1800 |
| 1802 WebString getRequestableExtensionsCHROMIUM() | 1801 WebString getRequestableExtensionsCHROMIUM() |
| 1803 { | 1802 { |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2032 | 2031 |
| 2033 private: | 2032 private: |
| 2034 ScrollbarLayerFakePaint(int id) : CCScrollbarLayerImpl(id) { } | 2033 ScrollbarLayerFakePaint(int id) : CCScrollbarLayerImpl(id) { } |
| 2035 }; | 2034 }; |
| 2036 | 2035 |
| 2037 // Fake WebGraphicsContext3D that will cause a failure if trying to use a | 2036 // Fake WebGraphicsContext3D that will cause a failure if trying to use a |
| 2038 // resource that wasn't created by it (resources created by | 2037 // resource that wasn't created by it (resources created by |
| 2039 // FakeWebGraphicsContext3D have an id of 1). | 2038 // FakeWebGraphicsContext3D have an id of 1). |
| 2040 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D { | 2039 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D { |
| 2041 public: | 2040 public: |
| 2041 StrictWebGraphicsContext3D() |
| 2042 : FakeWebGraphicsContext3D() |
| 2043 { |
| 2044 m_nextTextureId = 7; // Start allocating texture ids larger than any oth
er resource IDs so we can tell if someone's mixing up their resource types. |
| 2045 } |
| 2046 |
| 2042 virtual WebGLId createBuffer() { return 2; } | 2047 virtual WebGLId createBuffer() { return 2; } |
| 2043 virtual WebGLId createFramebuffer() { return 3; } | 2048 virtual WebGLId createFramebuffer() { return 3; } |
| 2044 virtual WebGLId createProgram() { return 4; } | 2049 virtual WebGLId createProgram() { return 4; } |
| 2045 virtual WebGLId createRenderbuffer() { return 5; } | 2050 virtual WebGLId createRenderbuffer() { return 5; } |
| 2046 virtual WebGLId createShader(WGC3Denum) { return 6; } | 2051 virtual WebGLId createShader(WGC3Denum) { return 6; } |
| 2047 virtual WebGLId createTexture() { return 7; } | |
| 2048 | 2052 |
| 2049 virtual void deleteBuffer(WebGLId id) | 2053 virtual void deleteBuffer(WebGLId id) |
| 2050 { | 2054 { |
| 2051 if (id != 2) | 2055 if (id != 2) |
| 2052 ADD_FAILURE() << "Trying to delete buffer id " << id; | 2056 ADD_FAILURE() << "Trying to delete buffer id " << id; |
| 2053 } | 2057 } |
| 2054 | 2058 |
| 2055 virtual void deleteFramebuffer(WebGLId id) | 2059 virtual void deleteFramebuffer(WebGLId id) |
| 2056 { | 2060 { |
| 2057 if (id != 3) | 2061 if (id != 3) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2069 if (id != 5) | 2073 if (id != 5) |
| 2070 ADD_FAILURE() << "Trying to delete renderbuffer id " << id; | 2074 ADD_FAILURE() << "Trying to delete renderbuffer id " << id; |
| 2071 } | 2075 } |
| 2072 | 2076 |
| 2073 virtual void deleteShader(WebGLId id) | 2077 virtual void deleteShader(WebGLId id) |
| 2074 { | 2078 { |
| 2075 if (id != 6) | 2079 if (id != 6) |
| 2076 ADD_FAILURE() << "Trying to delete shader id " << id; | 2080 ADD_FAILURE() << "Trying to delete shader id " << id; |
| 2077 } | 2081 } |
| 2078 | 2082 |
| 2083 virtual WebGLId createTexture() |
| 2084 { |
| 2085 unsigned textureId = FakeWebGraphicsContext3D::createTexture(); |
| 2086 m_allocatedTextureIds.add(textureId); |
| 2087 return textureId; |
| 2088 } |
| 2079 virtual void deleteTexture(WebGLId id) | 2089 virtual void deleteTexture(WebGLId id) |
| 2080 { | 2090 { |
| 2081 if (id != 7) | 2091 if (!m_allocatedTextureIds.contains(id)) |
| 2082 ADD_FAILURE() << "Trying to delete texture id " << id; | 2092 ADD_FAILURE() << "Trying to delete texture id " << id; |
| 2093 m_allocatedTextureIds.remove(id); |
| 2083 } | 2094 } |
| 2084 | 2095 |
| 2085 virtual void bindBuffer(WGC3Denum, WebGLId id) | 2096 virtual void bindBuffer(WGC3Denum, WebGLId id) |
| 2086 { | 2097 { |
| 2087 if (id != 2 && id) | 2098 if (id != 2 && id) |
| 2088 ADD_FAILURE() << "Trying to bind buffer id " << id; | 2099 ADD_FAILURE() << "Trying to bind buffer id " << id; |
| 2089 } | 2100 } |
| 2090 | 2101 |
| 2091 virtual void bindFramebuffer(WGC3Denum, WebGLId id) | 2102 virtual void bindFramebuffer(WGC3Denum, WebGLId id) |
| 2092 { | 2103 { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2107 } | 2118 } |
| 2108 | 2119 |
| 2109 virtual void attachShader(WebGLId program, WebGLId shader) | 2120 virtual void attachShader(WebGLId program, WebGLId shader) |
| 2110 { | 2121 { |
| 2111 if ((program != 4) || (shader != 6)) | 2122 if ((program != 4) || (shader != 6)) |
| 2112 ADD_FAILURE() << "Trying to attach shader id " << shader << " to pro
gram id " << program; | 2123 ADD_FAILURE() << "Trying to attach shader id " << shader << " to pro
gram id " << program; |
| 2113 } | 2124 } |
| 2114 | 2125 |
| 2115 virtual void bindTexture(WGC3Denum, WebGLId id) | 2126 virtual void bindTexture(WGC3Denum, WebGLId id) |
| 2116 { | 2127 { |
| 2117 if (id != 7 && id) | 2128 if (id && !m_allocatedTextureIds.contains(id)) |
| 2118 ADD_FAILURE() << "Trying to bind texture id " << id; | 2129 ADD_FAILURE() << "Trying to bind texture id " << id; |
| 2119 } | 2130 } |
| 2120 | 2131 |
| 2121 static PassRefPtr<GraphicsContext3D> createGraphicsContext() | 2132 static PassRefPtr<GraphicsContext3D> createGraphicsContext() |
| 2122 { | 2133 { |
| 2123 return GraphicsContext3DPrivate::createGraphicsContextFromWebContext(ado
ptPtr(new StrictWebGraphicsContext3D()), GraphicsContext3D::RenderDirectlyToHost
Window); | 2134 return GraphicsContext3DPrivate::createGraphicsContextFromWebContext(ado
ptPtr(new StrictWebGraphicsContext3D()), GraphicsContext3D::RenderDirectlyToHost
Window); |
| 2124 } | 2135 } |
| 2136 |
| 2137 private: |
| 2138 HashSet<unsigned> m_allocatedTextureIds; |
| 2125 }; | 2139 }; |
| 2126 | 2140 |
| 2127 // Fake video frame that represents a 4x4 YUV video frame. | 2141 // Fake video frame that represents a 4x4 YUV video frame. |
| 2128 class FakeVideoFrame: public WebVideoFrame { | 2142 class FakeVideoFrame: public WebVideoFrame { |
| 2129 public: | 2143 public: |
| 2130 FakeVideoFrame() { memset(m_data, 0x80, sizeof(m_data)); } | 2144 FakeVideoFrame() { memset(m_data, 0x80, sizeof(m_data)); } |
| 2131 virtual ~FakeVideoFrame() { } | 2145 virtual ~FakeVideoFrame() { } |
| 2132 virtual Format format() const { return FormatYV12; } | 2146 virtual Format format() const { return FormatYV12; } |
| 2133 virtual unsigned width() const { return 4; } | 2147 virtual unsigned width() const { return 4; } |
| 2134 virtual unsigned height() const { return 4; } | 2148 virtual unsigned height() const { return 4; } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2254 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 2268 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 2255 m_hostImpl->drawLayers(frame); | 2269 m_hostImpl->drawLayers(frame); |
| 2256 m_hostImpl->didDrawAllLayers(frame); | 2270 m_hostImpl->didDrawAllLayers(frame); |
| 2257 m_hostImpl->swapBuffers(); | 2271 m_hostImpl->swapBuffers(); |
| 2258 } | 2272 } |
| 2259 | 2273 |
| 2260 // Fake WebGraphicsContext3D that tracks the number of textures in use. | 2274 // Fake WebGraphicsContext3D that tracks the number of textures in use. |
| 2261 class TrackingWebGraphicsContext3D : public FakeWebGraphicsContext3D { | 2275 class TrackingWebGraphicsContext3D : public FakeWebGraphicsContext3D { |
| 2262 public: | 2276 public: |
| 2263 TrackingWebGraphicsContext3D() | 2277 TrackingWebGraphicsContext3D() |
| 2264 : m_nextTextureId(1) | 2278 : FakeWebGraphicsContext3D() |
| 2265 , m_numTextures(0) | 2279 , m_numTextures(0) |
| 2266 { } | 2280 { } |
| 2267 | 2281 |
| 2268 virtual WebGLId createTexture() OVERRIDE | 2282 virtual WebGLId createTexture() OVERRIDE |
| 2269 { | 2283 { |
| 2270 WebGLId id = m_nextTextureId; | 2284 WebGLId id = FakeWebGraphicsContext3D::createTexture(); |
| 2271 ++m_nextTextureId; | |
| 2272 | 2285 |
| 2273 m_textures.set(id, true); | 2286 m_textures.set(id, true); |
| 2274 ++m_numTextures; | 2287 ++m_numTextures; |
| 2275 return id; | 2288 return id; |
| 2276 } | 2289 } |
| 2277 | 2290 |
| 2278 virtual void deleteTexture(WebGLId id) OVERRIDE | 2291 virtual void deleteTexture(WebGLId id) OVERRIDE |
| 2279 { | 2292 { |
| 2280 if (!m_textures.get(id)) | 2293 if (!m_textures.get(id)) |
| 2281 return; | 2294 return; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2293 } | 2306 } |
| 2294 | 2307 |
| 2295 PassRefPtr<GraphicsContext3D> createGraphicsContext() | 2308 PassRefPtr<GraphicsContext3D> createGraphicsContext() |
| 2296 { | 2309 { |
| 2297 return GraphicsContext3DPrivate::createGraphicsContextFromWebContext(ado
ptPtr(this), GraphicsContext3D::RenderDirectlyToHostWindow); | 2310 return GraphicsContext3DPrivate::createGraphicsContextFromWebContext(ado
ptPtr(this), GraphicsContext3D::RenderDirectlyToHostWindow); |
| 2298 } | 2311 } |
| 2299 | 2312 |
| 2300 unsigned numTextures() const { return m_numTextures; } | 2313 unsigned numTextures() const { return m_numTextures; } |
| 2301 | 2314 |
| 2302 private: | 2315 private: |
| 2303 WebGLId m_nextTextureId; | |
| 2304 HashMap<WebGLId, bool> m_textures; | 2316 HashMap<WebGLId, bool> m_textures; |
| 2305 unsigned m_numTextures; | 2317 unsigned m_numTextures; |
| 2306 }; | 2318 }; |
| 2307 | 2319 |
| 2308 TEST_F(CCLayerTreeHostImplTest, layersFreeTextures) | 2320 TEST_F(CCLayerTreeHostImplTest, layersFreeTextures) |
| 2309 { | 2321 { |
| 2310 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(1)); | 2322 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(1)); |
| 2311 rootLayer->setBounds(IntSize(10, 10)); | 2323 rootLayer->setBounds(IntSize(10, 10)); |
| 2312 rootLayer->setAnchorPoint(FloatPoint(0, 0)); | 2324 rootLayer->setAnchorPoint(FloatPoint(0, 0)); |
| 2313 | 2325 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2402 | 2414 |
| 2403 // Verify no quads are drawn when transparent background is set. | 2415 // Verify no quads are drawn when transparent background is set. |
| 2404 myHostImpl->setHasTransparentBackground(true); | 2416 myHostImpl->setHasTransparentBackground(true); |
| 2405 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2417 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 2406 myHostImpl->drawLayers(frame); | 2418 myHostImpl->drawLayers(frame); |
| 2407 myHostImpl->didDrawAllLayers(frame); | 2419 myHostImpl->didDrawAllLayers(frame); |
| 2408 Mock::VerifyAndClearExpectations(&mockContext); | 2420 Mock::VerifyAndClearExpectations(&mockContext); |
| 2409 } | 2421 } |
| 2410 | 2422 |
| 2411 } // namespace | 2423 } // namespace |
| OLD | NEW |