Changeset 126240 in webkit
- Timestamp:
- Aug 21, 2012 6:11:05 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r126239 r126240 1 2012-08-21 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r126202. 4 http://trac.webkit.org/changeset/126202 5 https://bugs.webkit.org/show_bug.cgi?id=94657 6 7 Causes assertion failures on Chromium Linux dbg compositing 8 layout tests (Requested by dominicc on #webkit). 9 10 * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp: 11 (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect): 12 * platform/graphics/chromium/LayerRendererChromium.cpp: 13 (WebCore::applyFilters): 14 (WebCore::LayerRendererChromium::drawRenderPassQuad): 15 (WebCore::LayerRendererChromium::drawTileQuad): 16 (WebCore::LayerRendererChromium::drawYUVVideoQuad): 17 (WebCore::LayerRendererChromium::drawTextureQuad): 18 (WebCore::LayerRendererChromium::getFramebufferTexture): 19 (WebCore::LayerRendererChromium::bindFramebufferToTexture): 20 * platform/graphics/chromium/LayerRendererChromium.h: 21 (LayerRendererChromium): 22 * platform/graphics/chromium/cc/CCResourceProvider.cpp: 23 (WebCore::CCResourceProvider::createResource): 24 (WebCore::CCResourceProvider::createResourceFromExternalTexture): 25 (WebCore::CCResourceProvider::deleteResource): 26 (WebCore::CCResourceProvider::upload): 27 (WebCore::CCResourceProvider::lockForWrite): 28 (WebCore::CCResourceProvider::unlockForWrite): 29 (WebCore::CCResourceProvider::flush): 30 (WebCore::CCResourceProvider::shallowFlushIfSupported): 31 (WebCore::CCResourceProvider::lockForRead): 32 (WebCore::CCResourceProvider::unlockForRead): 33 (WebCore::CCResourceProvider::CCResourceProvider): 34 * platform/graphics/chromium/cc/CCResourceProvider.h: 35 (WebCore): 36 (CCResourceProvider): 37 (WebCore::CCResourceProvider::Resource::Resource): 38 (Resource): 39 (CCScopedLockResourceForRead): 40 (WebCore::CCScopedLockResourceForRead::CCScopedLockResourceForRead): 41 (WebCore::CCScopedLockResourceForRead::~CCScopedLockResourceForRead): 42 (WebCore::CCScopedLockResourceForRead::textureId): 43 (CCScopedLockResourceForWrite): 44 (WebCore::CCScopedLockResourceForWrite::CCScopedLockResourceForWrite): 45 (WebCore::CCScopedLockResourceForWrite::~CCScopedLockResourceForWrite): 46 (WebCore::CCScopedLockResourceForWrite::textureId): 47 1 48 2012-08-21 David Grogan <dgrogan@chromium.org> 2 49 -
trunk/Source/WebCore/platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp
r126202 r126240 108 108 109 109 texture->acquireBackingTexture(resourceProvider); 110 CC ResourceProvider::ScopedWriteLockGLlock(resourceProvider, texture->resourceId());110 CCScopedLockResourceForWrite lock(resourceProvider, texture->resourceId()); 111 111 // Create an accelerated canvas to draw on. 112 112 OwnPtr<SkCanvas> canvas = createAcceleratedCanvas(grContext, texture->size(), lock.textureId()); -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r126202 r126240 364 364 layerRenderer->context()->flush(); 365 365 366 CC ResourceProvider::ScopedWriteLockGLlock(layerRenderer->resourceProvider(), sourceTexture->id());366 CCScopedLockResourceForWrite lock(layerRenderer->resourceProvider(), sourceTexture->id()); 367 367 SkBitmap source = CCRenderSurfaceFilters::apply(filters, lock.textureId(), sourceTexture->size(), filterContext, filterGrContext); 368 368 return source; … … 466 466 // Apply filters to the contents texture. 467 467 SkBitmap filterBitmap = applyFilters(this, renderPass->filters(), contentsTexture); 468 OwnPtr<CC ResourceProvider::ScopedReadLockGL> contentsResourceLock;468 OwnPtr<CCScopedLockResourceForRead> contentsResourceLock; 469 469 unsigned contentsTextureId = 0; 470 470 if (filterBitmap.getTexture()) { … … 472 472 contentsTextureId = texture->getTextureHandle(); 473 473 } else { 474 contentsResourceLock = adoptPtr(new CC ResourceProvider::ScopedReadLockGL(m_resourceProvider, contentsTexture->id()));474 contentsResourceLock = adoptPtr(new CCScopedLockResourceForRead(m_resourceProvider, contentsTexture->id())); 475 475 contentsTextureId = contentsResourceLock->textureId(); 476 476 } … … 479 479 if (backgroundTexture) { 480 480 ASSERT(backgroundTexture->size() == quad->quadRect().size()); 481 CC ResourceProvider::ScopedReadLockGLlock(m_resourceProvider, backgroundTexture->id());481 CCScopedLockResourceForRead lock(m_resourceProvider, backgroundTexture->id()); 482 482 copyTextureToFramebuffer(frame, lock.textureId(), quad->quadRect(), quad->quadTransform()); 483 483 } … … 496 496 } 497 497 498 OwnPtr<CC ResourceProvider::ScopedReadLockGL> maskResourceLock;498 OwnPtr<CCScopedLockResourceForRead> maskResourceLock; 499 499 unsigned maskTextureId = 0; 500 500 if (quad->maskResourceId()) { 501 maskResourceLock = adoptPtr(new CC ResourceProvider::ScopedReadLockGL(m_resourceProvider, quad->maskResourceId()));501 maskResourceLock = adoptPtr(new CCScopedLockResourceForRead(m_resourceProvider, quad->maskResourceId())); 502 502 maskTextureId = maskResourceLock->textureId(); 503 503 } … … 690 690 GLC(context(), context()->uniform1i(uniforms.samplerLocation, 0)); 691 691 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 692 CC ResourceProvider::ScopedReadLockGLquadResourceLock(m_resourceProvider, quad->resourceId());692 CCScopedLockResourceForRead quadResourceLock(m_resourceProvider, quad->resourceId()); 693 693 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, quadResourceLock.textureId())); 694 694 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, quad->textureFilter())); … … 797 797 const CCVideoLayerImpl::FramePlane& vPlane = quad->vPlane(); 798 798 799 CC ResourceProvider::ScopedReadLockGLyPlaneLock(m_resourceProvider, yPlane.resourceId);800 CC ResourceProvider::ScopedReadLockGLuPlaneLock(m_resourceProvider, uPlane.resourceId);801 CC ResourceProvider::ScopedReadLockGLvPlaneLock(m_resourceProvider, vPlane.resourceId);799 CCScopedLockResourceForRead yPlaneLock(m_resourceProvider, yPlane.resourceId); 800 CCScopedLockResourceForRead uPlaneLock(m_resourceProvider, uPlane.resourceId); 801 CCScopedLockResourceForRead vPlaneLock(m_resourceProvider, vPlane.resourceId); 802 802 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE1)); 803 803 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, yPlaneLock.textureId())); … … 908 908 909 909 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 910 CC ResourceProvider::ScopedReadLockGLquadResourceLock(m_resourceProvider, quad->resourceId());910 CCScopedLockResourceForRead quadResourceLock(m_resourceProvider, quad->resourceId()); 911 911 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, quadResourceLock.textureId())); 912 912 … … 1200 1200 return false; 1201 1201 1202 CC ResourceProvider::ScopedWriteLockGLlock(m_resourceProvider, texture->id());1202 CCScopedLockResourceForWrite lock(m_resourceProvider, texture->id()); 1203 1203 GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId())); 1204 1204 GLC(m_context, m_context->copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, texture->format(), … … 1227 1227 1228 1228 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_offscreenFramebufferId)); 1229 m_currentFramebufferLock = adoptPtr(new CC ResourceProvider::ScopedWriteLockGL(m_resourceProvider, texture->id()));1229 m_currentFramebufferLock = adoptPtr(new CCScopedLockResourceForWrite(m_resourceProvider, texture->id())); 1230 1230 unsigned textureId = m_currentFramebufferLock->textureId(); 1231 1231 GLC(m_context, m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, textureId, 0)); -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r126202 r126240 249 249 TextureUploaderOption m_textureUploaderSetting; 250 250 251 OwnPtr<CC ResourceProvider::ScopedWriteLockGL> m_currentFramebufferLock;251 OwnPtr<CCScopedLockResourceForWrite> m_currentFramebufferLock; 252 252 }; 253 253 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp
r126202 r126240 32 32 #include "LayerRendererChromium.h" // For the GLC() macro 33 33 #include "LayerTextureSubImage.h" 34 #include <limits.h>35 34 #include <public/WebGraphicsContext3D.h> 36 35 #include <wtf/HashSet.h> … … 90 89 CCResourceProvider::ResourceId CCResourceProvider::createResource(int pool, const IntSize& size, GC3Denum format, TextureUsageHint hint) 91 90 { 92 switch (m_defaultResourceType) {93 case GLTexture:94 return createGLTexture(pool, size, format, hint);95 case Bitmap:96 ASSERT(format == GraphicsContext3D::RGBA);97 return createBitmap(pool, size);98 }99 100 CRASH();101 return 0;102 }103 104 CCResourceProvider::ResourceId CCResourceProvider::createGLTexture(int pool, const IntSize& size, GC3Denum format, TextureUsageHint hint)105 {106 91 ASSERT(CCProxy::isImplThread()); 107 92 unsigned textureId = 0; 108 93 WebGraphicsContext3D* context3d = m_context->context3D(); 109 ASSERT(context3d); 94 if (!context3d) { 95 // FIXME: Implement this path for software compositing. 96 return 0; 97 } 110 98 GLC(context3d, textureId = context3d->createTexture()); 111 99 GLC(context3d, context3d->bindTexture(GraphicsContext3D::TEXTURE_2D, textureId)); … … 128 116 } 129 117 130 CCResourceProvider::ResourceId CCResourceProvider::createBitmap(int pool, const IntSize& size) 131 { 132 ASSERT(CCProxy::isImplThread()); 133 134 uint8_t* pixels = new uint8_t[size.width() * size.height() * 4]; 135 118 CCResourceProvider::ResourceId CCResourceProvider::createResourceFromExternalTexture(unsigned textureId) 119 { 120 ASSERT(CCProxy::isImplThread()); 136 121 ResourceId id = m_nextId++; 137 Resource resource(pixels, pool, size, GraphicsContext3D::RGBA); 138 m_resources.add(id, resource); 139 return id; 140 } 141 142 CCResourceProvider::ResourceId CCResourceProvider::createResourceFromExternalTexture(unsigned textureId) 143 { 144 ASSERT(CCProxy::isImplThread()); 145 ResourceId id = m_nextId++; 146 Resource resource(textureId, 0, IntSize(), 0); 122 Resource resource; 123 resource.glId = textureId; 147 124 resource.external = true; 148 125 m_resources.add(id, resource); … … 153 130 { 154 131 ASSERT(CCProxy::isImplThread()); 132 WebGraphicsContext3D* context3d = m_context->context3D(); 133 if (!context3d) { 134 // FIXME: Implement this path for software compositing. 135 return; 136 } 155 137 ResourceMap::iterator it = m_resources.find(id); 156 138 ASSERT(it != m_resources.end() && !it->second.lockedForWrite && !it->second.lockForReadCount); 157 158 if (it->second.glId && !it->second.external) { 159 WebGraphicsContext3D* context3d = m_context->context3D(); 160 ASSERT(context3d); 139 if (!it->second.external) 161 140 GLC(context3d, context3d->deleteTexture(it->second.glId)); 162 }163 if (it->second.pixels)164 delete it->second.pixels;165 166 141 m_resources.remove(it); 167 142 } … … 179 154 } 180 155 181 CCResourceProvider::ResourceType CCResourceProvider::resourceType(ResourceId id)182 {183 ResourceMap::iterator it = m_resources.find(id);184 ASSERT(it != m_resources.end());185 return it->second.type;186 }187 188 156 void CCResourceProvider::upload(ResourceId id, const uint8_t* image, const IntRect& imageRect, const IntRect& sourceRect, const IntSize& destOffset) 189 157 { 190 158 ASSERT(CCProxy::isImplThread()); 159 ASSERT(m_texSubImage.get()); 160 WebGraphicsContext3D* context3d = m_context->context3D(); 161 if (!context3d) { 162 // FIXME: Implement this path for software compositing. 163 return; 164 } 191 165 ResourceMap::iterator it = m_resources.find(id); 192 166 ASSERT(it != m_resources.end() && !it->second.lockedForWrite && !it->second.lockForReadCount && !it->second.external); 193 167 194 if (it->second.glId) { 195 WebGraphicsContext3D* context3d = m_context->context3D(); 196 ASSERT(context3d); 197 ASSERT(m_texSubImage.get()); 198 context3d->bindTexture(GraphicsContext3D::TEXTURE_2D, it->second.glId); 199 m_texSubImage->upload(image, imageRect, sourceRect, destOffset, it->second.format, context3d); 200 } 201 202 if (it->second.pixels) { 203 SkBitmap srcFull; 204 srcFull.setConfig(SkBitmap::kARGB_8888_Config, imageRect.width(), imageRect.height()); 205 srcFull.setPixels(const_cast<uint8_t*>(image)); 206 SkBitmap srcSubset; 207 SkIRect skSourceRect = SkIRect::MakeXYWH(sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height()); 208 skSourceRect.offset(-imageRect.x(), -imageRect.y()); 209 srcFull.extractSubset(&srcSubset, skSourceRect); 210 211 ScopedWriteLockSoftware lock(this, id); 212 SkCanvas* dest = lock.skCanvas(); 213 dest->writePixels(srcSubset, destOffset.width(), destOffset.height()); 214 } 215 } 216 217 void CCResourceProvider::flush() 218 { 219 ASSERT(CCProxy::isImplThread()); 220 WebGraphicsContext3D* context3d = m_context->context3D(); 221 if (context3d) 222 context3d->flush(); 223 } 224 225 bool CCResourceProvider::shallowFlushIfSupported() 226 { 227 ASSERT(CCProxy::isImplThread()); 228 WebGraphicsContext3D* context3d = m_context->context3D(); 229 if (!context3d || !m_useShallowFlush) 230 return false; 231 232 context3d->shallowFlushCHROMIUM(); 233 return true; 234 } 235 236 const CCResourceProvider::Resource* CCResourceProvider::lockForRead(ResourceId id) 237 { 238 ASSERT(CCProxy::isImplThread()); 239 ResourceMap::iterator it = m_resources.find(id); 240 ASSERT(it != m_resources.end() && !it->second.lockedForWrite); 241 it->second.lockForReadCount++; 242 return &it->second; 243 } 244 245 void CCResourceProvider::unlockForRead(ResourceId id) 246 { 247 ASSERT(CCProxy::isImplThread()); 248 ResourceMap::iterator it = m_resources.find(id); 249 ASSERT(it != m_resources.end() && it->second.lockForReadCount > 0); 250 it->second.lockForReadCount--; 251 } 252 253 const CCResourceProvider::Resource* CCResourceProvider::lockForWrite(ResourceId id) 168 context3d->bindTexture(GraphicsContext3D::TEXTURE_2D, it->second.glId); 169 m_texSubImage->upload(image, imageRect, sourceRect, destOffset, it->second.format, context3d); 170 } 171 172 unsigned CCResourceProvider::lockForWrite(ResourceId id) 254 173 { 255 174 ASSERT(CCProxy::isImplThread()); … … 257 176 ASSERT(it != m_resources.end() && !it->second.lockedForWrite && !it->second.lockForReadCount && !it->second.external); 258 177 it->second.lockedForWrite = true; 259 return &it->second;178 return it->second.glId; 260 179 } 261 180 … … 268 187 } 269 188 270 CCResourceProvider::ScopedReadLockGL::ScopedReadLockGL(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 271 : m_resourceProvider(resourceProvider) 272 , m_resourceId(resourceId) 273 , m_textureId(resourceProvider->lockForRead(resourceId)->glId) 274 { 275 ASSERT(m_textureId); 276 } 277 278 CCResourceProvider::ScopedReadLockGL::~ScopedReadLockGL() 279 { 280 m_resourceProvider->unlockForRead(m_resourceId); 281 } 282 283 CCResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 284 : m_resourceProvider(resourceProvider) 285 , m_resourceId(resourceId) 286 , m_textureId(resourceProvider->lockForWrite(resourceId)->glId) 287 { 288 ASSERT(m_textureId); 289 } 290 291 CCResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() 292 { 293 m_resourceProvider->unlockForWrite(m_resourceId); 294 } 295 296 void CCResourceProvider::populateSkBitmapWithResource(SkBitmap* skBitmap, const Resource* resource) 297 { 298 ASSERT(resource->pixels); 299 ASSERT(resource->format == GraphicsContext3D::RGBA); 300 skBitmap->setConfig(SkBitmap::kARGB_8888_Config, resource->size.width(), resource->size.height()); 301 skBitmap->setPixels(resource->pixels); 302 } 303 304 CCResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 305 : m_resourceProvider(resourceProvider) 306 , m_resourceId(resourceId) 307 { 308 CCResourceProvider::populateSkBitmapWithResource(&m_skBitmap, resourceProvider->lockForRead(resourceId)); 309 } 310 311 CCResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() 312 { 313 m_resourceProvider->unlockForRead(m_resourceId); 314 } 315 316 CCResourceProvider::ScopedWriteLockSoftware::ScopedWriteLockSoftware(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 317 : m_resourceProvider(resourceProvider) 318 , m_resourceId(resourceId) 319 { 320 CCResourceProvider::populateSkBitmapWithResource(&m_skBitmap, resourceProvider->lockForWrite(resourceId)); 321 m_skCanvas.setBitmapDevice(m_skBitmap); 322 } 323 324 CCResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() 325 { 326 m_resourceProvider->unlockForWrite(m_resourceId); 189 void CCResourceProvider::flush() 190 { 191 ASSERT(CCProxy::isImplThread()); 192 WebGraphicsContext3D* context3d = m_context->context3D(); 193 if (!context3d) { 194 // FIXME: Implement this path for software compositing. 195 return; 196 } 197 context3d->flush(); 198 } 199 200 bool CCResourceProvider::shallowFlushIfSupported() 201 { 202 ASSERT(CCProxy::isImplThread()); 203 WebGraphicsContext3D* context3d = m_context->context3D(); 204 if (!context3d) { 205 // FIXME: Implement this path for software compositing. 206 return false; 207 } 208 209 if (m_useShallowFlush) 210 context3d->shallowFlushCHROMIUM(); 211 return m_useShallowFlush; 212 } 213 214 unsigned CCResourceProvider::lockForRead(ResourceId id) 215 { 216 ASSERT(CCProxy::isImplThread()); 217 ResourceMap::iterator it = m_resources.find(id); 218 ASSERT(it != m_resources.end() && !it->second.lockedForWrite); 219 ++(it->second.lockForReadCount); 220 return it->second.glId; 221 } 222 223 void CCResourceProvider::unlockForRead(ResourceId id) 224 { 225 ASSERT(CCProxy::isImplThread()); 226 ResourceMap::iterator it = m_resources.find(id); 227 ASSERT(it != m_resources.end() && it->second.lockForReadCount > 0); 228 --(it->second.lockForReadCount); 327 229 } 328 230 … … 331 233 , m_nextId(1) 332 234 , m_nextChild(1) 333 , m_defaultResourceType(GLTexture)334 235 , m_useTextureStorageExt(false) 335 236 , m_useTextureUsageHint(false) 336 237 , m_useShallowFlush(false) 337 , m_maxTextureSize( INT_MAX)238 , m_maxTextureSize(0) 338 239 { 339 240 } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.h
r126202 r126240 31 31 #include "GraphicsContext3D.h" 32 32 #include "IntSize.h" 33 #include "SkBitmap.h"34 #include "SkCanvas.h"35 33 #include <wtf/Deque.h> 36 34 #include <wtf/HashMap.h> … … 47 45 namespace WebCore { 48 46 47 class CCScopedLockResourceForRead; 48 class CCScopedLockResourceForWrite; 49 49 class IntRect; 50 50 class LayerTextureSubImage; … … 59 59 typedef HashMap<ResourceId, ResourceId> ResourceIdMap; 60 60 enum TextureUsageHint { TextureUsageAny, TextureUsageFramebuffer }; 61 enum ResourceType {62 GLTexture = 1,63 Bitmap,64 };65 61 struct Mailbox { 66 62 GC3Dbyte name[64]; … … 92 88 // Producer interface. 93 89 94 void setDefaultResourceType(ResourceType type) { m_defaultResourceType = type; } 95 ResourceType defaultResourceType() const { return m_defaultResourceType; } 96 ResourceType resourceType(ResourceId); 97 98 // Creates a resource of the default resource type. 90 // Creates a resource of the given size/format, into the given pool. 99 91 ResourceId createResource(int pool, const IntSize&, GC3Denum format, TextureUsageHint); 100 92 101 // You can also explicitly create a specific resource type. 102 ResourceId createGLTexture(int pool, const IntSize&, GC3Denum format, TextureUsageHint); 103 ResourceId createBitmap(int pool, const IntSize&); 104 // Wraps an external texture into a GL resource. 93 // Wraps an external texture into a resource. 105 94 ResourceId createResourceFromExternalTexture(unsigned textureId); 106 107 95 void deleteResource(ResourceId); 108 96 … … 160 148 size_t mailboxCount() const { return m_mailboxes.size(); } 161 149 162 // The following lock classes are part of the CCResourceProvider API and are163 // needed to read and write the resource contents. The user must ensure164 // that they only use GL locks on GL resources, etc, and this is enforced165 // by assertions.166 class ScopedReadLockGL {167 WTF_MAKE_NONCOPYABLE(ScopedReadLockGL);168 public:169 ScopedReadLockGL(CCResourceProvider*, CCResourceProvider::ResourceId);170 ~ScopedReadLockGL();171 172 unsigned textureId() const { return m_textureId; }173 174 private:175 CCResourceProvider* m_resourceProvider;176 CCResourceProvider::ResourceId m_resourceId;177 unsigned m_textureId;178 };179 180 class ScopedWriteLockGL {181 WTF_MAKE_NONCOPYABLE(ScopedWriteLockGL);182 public:183 ScopedWriteLockGL(CCResourceProvider*, CCResourceProvider::ResourceId);184 ~ScopedWriteLockGL();185 186 unsigned textureId() const { return m_textureId; }187 188 private:189 CCResourceProvider* m_resourceProvider;190 CCResourceProvider::ResourceId m_resourceId;191 unsigned m_textureId;192 };193 194 class ScopedReadLockSoftware {195 WTF_MAKE_NONCOPYABLE(ScopedReadLockSoftware);196 public:197 ScopedReadLockSoftware(CCResourceProvider*, CCResourceProvider::ResourceId);198 ~ScopedReadLockSoftware();199 200 const SkBitmap* skBitmap() const { return &m_skBitmap; }201 202 private:203 CCResourceProvider* m_resourceProvider;204 CCResourceProvider::ResourceId m_resourceId;205 SkBitmap m_skBitmap;206 };207 208 class ScopedWriteLockSoftware {209 WTF_MAKE_NONCOPYABLE(ScopedWriteLockSoftware);210 public:211 ScopedWriteLockSoftware(CCResourceProvider*, CCResourceProvider::ResourceId);212 ~ScopedWriteLockSoftware();213 214 SkCanvas* skCanvas() { return &m_skCanvas; }215 216 private:217 CCResourceProvider* m_resourceProvider;218 CCResourceProvider::ResourceId m_resourceId;219 SkBitmap m_skBitmap;220 SkCanvas m_skCanvas;221 };222 223 150 private: 151 friend class CCScopedLockResourceForRead; 152 friend class CCScopedLockResourceForWrite; 153 224 154 struct Resource { 225 155 Resource() 226 156 : glId(0) 227 , pixels(0)228 157 , pool(0) 229 158 , lockForReadCount(0) … … 233 162 , size() 234 163 , format(0) 235 , type(static_cast<ResourceType>(0))236 164 { } 237 165 Resource(unsigned textureId, int pool, const IntSize& size, GC3Denum format) 238 166 : glId(textureId) 239 , pixels(0)240 167 , pool(pool) 241 168 , lockForReadCount(0) … … 245 172 , size(size) 246 173 , format(format) 247 , type(GLTexture)248 { }249 Resource(uint8_t* pixels, int pool, const IntSize& size, GC3Denum format)250 : glId(0)251 , pixels(pixels)252 , pool(pool)253 , lockForReadCount(0)254 , lockedForWrite(false)255 , external(false)256 , exported(false)257 , size(size)258 , format(format)259 , type(Bitmap)260 174 { } 261 175 unsigned glId; 262 uint8_t* pixels;263 176 int pool; 264 177 int lockForReadCount; … … 268 181 IntSize size; 269 182 GC3Denum format; 270 ResourceType type;271 183 }; 272 184 typedef HashMap<ResourceId, Resource> ResourceMap; … … 281 193 bool initialize(); 282 194 283 const Resource* lockForRead(ResourceId); 195 // Gets a GL texture id representing the resource, that can be rendered into. 196 unsigned lockForWrite(ResourceId); 197 void unlockForWrite(ResourceId); 198 199 // Gets a GL texture id representing the resource, that can be rendered with. 200 unsigned lockForRead(ResourceId); 284 201 void unlockForRead(ResourceId); 285 const Resource* lockForWrite(ResourceId);286 void unlockForWrite(ResourceId);287 static void populateSkBitmapWithResource(SkBitmap*, const Resource*);288 202 289 203 bool transferResource(WebKit::WebGraphicsContext3D*, ResourceId, TransferableResource*); … … 298 212 Deque<Mailbox> m_mailboxes; 299 213 300 ResourceType m_defaultResourceType;301 214 bool m_useTextureStorageExt; 302 215 bool m_useTextureUsageHint; … … 306 219 }; 307 220 221 class CCScopedLockResourceForRead { 222 WTF_MAKE_NONCOPYABLE(CCScopedLockResourceForRead); 223 public: 224 CCScopedLockResourceForRead(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 225 : m_resourceProvider(resourceProvider) 226 , m_resourceId(resourceId) 227 , m_textureId(resourceProvider->lockForRead(resourceId)) 228 { 229 ASSERT(m_textureId); 230 } 231 232 ~CCScopedLockResourceForRead() 233 { 234 m_resourceProvider->unlockForRead(m_resourceId); 235 } 236 237 unsigned textureId() const { return m_textureId; } 238 239 private: 240 CCResourceProvider* m_resourceProvider; 241 CCResourceProvider::ResourceId m_resourceId; 242 unsigned m_textureId; 243 }; 244 245 class CCScopedLockResourceForWrite { 246 WTF_MAKE_NONCOPYABLE(CCScopedLockResourceForWrite); 247 public: 248 CCScopedLockResourceForWrite(CCResourceProvider* resourceProvider, CCResourceProvider::ResourceId resourceId) 249 : m_resourceProvider(resourceProvider) 250 , m_resourceId(resourceId) 251 , m_textureId(resourceProvider->lockForWrite(resourceId)) { } 252 253 ~CCScopedLockResourceForWrite() 254 { 255 m_resourceProvider->unlockForWrite(m_resourceId); 256 } 257 258 unsigned textureId() const { return m_textureId; } 259 260 private: 261 CCResourceProvider* m_resourceProvider; 262 CCResourceProvider::ResourceId m_resourceId; 263 unsigned m_textureId; 264 }; 265 308 266 } 309 267 -
trunk/Source/WebKit/chromium/ChangeLog
r126204 r126240 1 2012-08-21 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r126202. 4 http://trac.webkit.org/changeset/126202 5 https://bugs.webkit.org/show_bug.cgi?id=94657 6 7 Causes assertion failures on Chromium Linux dbg compositing 8 layout tests (Requested by dominicc on #webkit). 9 10 * tests/CCResourceProviderTest.cpp: 11 (WebKit::CCResourceProviderTest::CCResourceProviderTest): 12 (WebKit::CCResourceProviderTest::getResourcePixels): 13 (WebKit::TEST_F): 14 1 15 2012-08-21 Leandro Gracia Gil <leandrogracia@chromium.org> 2 16 -
trunk/Source/WebKit/chromium/tests/CCResourceProviderTest.cpp
r126202 r126240 288 288 }; 289 289 290 class CCResourceProviderTest : public testing::Test WithParam<CCResourceProvider::ResourceType>{290 class CCResourceProviderTest : public testing::Test { 291 291 public: 292 292 CCResourceProviderTest() … … 295 295 , m_resourceProvider(CCResourceProvider::create(m_context.get())) 296 296 { 297 m_resourceProvider->setDefaultResourceType(GetParam());298 297 } 299 298 … … 302 301 void getResourcePixels(CCResourceProvider::ResourceId id, const IntSize& size, WGC3Denum format, uint8_t* pixels) 303 302 { 304 if (GetParam() == CCResourceProvider::GLTexture) { 305 CCResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(), id); 306 ASSERT_NE(0U, lockGL.textureId()); 307 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, lockGL.textureId()); 308 context()->getPixels(size, format, pixels); 309 } else if (GetParam() == CCResourceProvider::Bitmap) { 310 CCResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProvider.get(), id); 311 memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.skBitmap()->getSize()); 312 } 313 } 314 315 void expectNumResources(int count) 316 { 317 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources())); 318 if (GetParam() == CCResourceProvider::GLTexture) 319 EXPECT_EQ(count, context()->textureCount()); 303 CCScopedLockResourceForRead lock(m_resourceProvider.get(), id); 304 ASSERT_NE(0U, lock.textureId()); 305 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId()); 306 context()->getPixels(size, format, pixels); 320 307 } 321 308 … … 327 314 }; 328 315 329 TEST_ P(CCResourceProviderTest, Basic)316 TEST_F(CCResourceProviderTest, Basic) 330 317 { 331 318 IntSize size(1, 1); … … 336 323 337 324 CCResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny); 338 expectNumResources(1);325 EXPECT_EQ(1, context()->textureCount()); 339 326 340 327 uint8_t data[4] = {1, 2, 3, 4}; … … 347 334 348 335 m_resourceProvider->deleteResource(id); 349 expectNumResources(0);336 EXPECT_EQ(0, context()->textureCount()); 350 337 } 351 338 352 TEST_ P(CCResourceProviderTest, DeleteOwnedResources)339 TEST_F(CCResourceProviderTest, DeleteOwnedResources) 353 340 { 354 341 IntSize size(1, 1); … … 359 346 for (int i = 0; i < count; ++i) 360 347 m_resourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny); 361 expectNumResources(3);348 EXPECT_EQ(3, context()->textureCount()); 362 349 363 350 m_resourceProvider->deleteOwnedResources(pool+1); 364 expectNumResources(3);351 EXPECT_EQ(3, context()->textureCount()); 365 352 366 353 m_resourceProvider->deleteOwnedResources(pool); 367 expectNumResources(0);354 EXPECT_EQ(0, context()->textureCount()); 368 355 } 369 356 370 TEST_ P(CCResourceProviderTest, Upload)357 TEST_F(CCResourceProviderTest, Upload) 371 358 { 372 359 IntSize size(2, 2); … … 416 403 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); 417 404 } 418 {419 IntRect offsetImageRect(IntPoint(100, 100), size);420 IntRect sourceRect(100, 100, 1, 1);421 IntSize destOffset(1, 0);422 m_resourceProvider->upload(id, image, offsetImageRect, sourceRect, destOffset);423 424 uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3,425 4, 5, 6, 7, 0, 1, 2, 3};426 getResourcePixels(id, size, format, result);427 EXPECT_EQ(0, memcmp(expected, result, pixelSize));428 }429 430 405 431 406 m_resourceProvider->deleteResource(id); 432 407 } 433 408 434 TEST_ P(CCResourceProviderTest, TransferResources)409 TEST_F(CCResourceProviderTest, TransferResources) 435 410 { 436 // Resource transfer is only supported with GL textures for now.437 if (GetParam() != CCResourceProvider::GLTexture)438 return;439 440 411 OwnPtr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::create(ResourceProviderContext::create(m_sharedData.get()))); 441 412 OwnPtr<CCResourceProvider> childResourceProvider(CCResourceProvider::create(childContext.get())); … … 516 487 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContext*>(childContext->context3D()); 517 488 { 518 CC ResourceProvider::ScopedReadLockGLlock(childResourceProvider.get(), id1);489 CCScopedLockResourceForRead lock(childResourceProvider.get(), id1); 519 490 ASSERT_NE(0U, lock.textureId()); 520 491 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId()); … … 523 494 } 524 495 { 525 CC ResourceProvider::ScopedReadLockGLlock(childResourceProvider.get(), id2);496 CCScopedLockResourceForRead lock(childResourceProvider.get(), id2); 526 497 ASSERT_NE(0U, lock.textureId()); 527 498 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId()); … … 549 520 } 550 521 551 INSTANTIATE_TEST_CASE_P(CCResourceProviderTests,552 CCResourceProviderTest,553 ::testing::Values(CCResourceProvider::GLTexture,554 CCResourceProvider::Bitmap));555 556 522 } // namespace
Note: See TracChangeset
for help on using the changeset viewer.