Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008, Google Inc. All rights reserved. | 2 * Copyright (c) 2008, Google Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
| 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions are | 7 * modification, are permitted provided that the following conditions are |
| 8 * met: | 8 * met: |
| 9 * | 9 * |
| 10 * * Redistributions of source code must retain the above copyright | 10 * * Redistributions of source code must retain the above copyright |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 176 if (m_client) | 176 if (m_client) |
| 177 m_client->notifySurfaceInvalid(); | 177 m_client->notifySurfaceInvalid(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 void ImageBuffer::resetCanvas(SkCanvas* canvas) const | 180 void ImageBuffer::resetCanvas(SkCanvas* canvas) const |
| 181 { | 181 { |
| 182 if (m_client) | 182 if (m_client) |
| 183 m_client->restoreCanvasMatrixClipStack(canvas); | 183 m_client->restoreCanvasMatrixClipStack(canvas); |
| 184 } | 184 } |
| 185 | 185 |
| 186 PassRefPtr<SkImage> ImageBuffer::newSkImageSnapshot(AccelerationHint hint, Snaps hotReason reason) const | 186 sk_sp<SkImage> ImageBuffer::newSkImageSnapshot(AccelerationHint hint, SnapshotRe ason reason) const |
| 187 { | 187 { |
| 188 if (m_snapshotState == InitialSnapshotState) | 188 if (m_snapshotState == InitialSnapshotState) |
| 189 m_snapshotState = DidAcquireSnapshot; | 189 m_snapshotState = DidAcquireSnapshot; |
| 190 | 190 |
| 191 if (!isSurfaceValid()) | 191 if (!isSurfaceValid()) |
| 192 return nullptr; | 192 return nullptr; |
| 193 return m_surface->newImageSnapshot(hint, reason); | 193 return m_surface->newImageSnapshot(hint, reason); |
| 194 } | 194 } |
| 195 | 195 |
| 196 PassRefPtr<Image> ImageBuffer::newImageSnapshot(AccelerationHint hint, SnapshotR eason reason) const | 196 PassRefPtr<Image> ImageBuffer::newImageSnapshot(AccelerationHint hint, SnapshotR eason reason) const |
| 197 { | 197 { |
| 198 RefPtr<SkImage> snapshot = newSkImageSnapshot(hint, reason); | 198 sk_sp<SkImage> snapshot = newSkImageSnapshot(hint, reason); |
| 199 if (!snapshot) | 199 if (!snapshot) |
| 200 return nullptr; | 200 return nullptr; |
| 201 return StaticBitmapImage::create(snapshot); | 201 return StaticBitmapImage::create(snapshot); |
|
f(malita)
2016/09/01 03:55:38
std:move(snapshot)
Łukasz Anforowicz
2016/09/01 20:50:58
Done.
| |
| 202 } | 202 } |
| 203 | 203 |
| 204 void ImageBuffer::didDraw(const FloatRect& rect) const | 204 void ImageBuffer::didDraw(const FloatRect& rect) const |
| 205 { | 205 { |
| 206 if (m_snapshotState == DidAcquireSnapshot) | 206 if (m_snapshotState == DidAcquireSnapshot) |
| 207 m_snapshotState = DrawnToAfterSnapshot; | 207 m_snapshotState = DrawnToAfterSnapshot; |
| 208 m_surface->didDraw(rect); | 208 m_surface->didDraw(rect); |
| 209 } | 209 } |
| 210 | 210 |
| 211 WebLayer* ImageBuffer::platformLayer() const | 211 WebLayer* ImageBuffer::platformLayer() const |
| 212 { | 212 { |
| 213 return m_surface->layer(); | 213 return m_surface->layer(); |
| 214 } | 214 } |
| 215 | 215 |
| 216 bool ImageBuffer::copyToPlatformTexture(gpu::gles2::GLES2Interface* gl, GLuint t exture, GLenum internalFormat, GLenum destType, GLint level, bool premultiplyAlp ha, bool flipY) | 216 bool ImageBuffer::copyToPlatformTexture(gpu::gles2::GLES2Interface* gl, GLuint t exture, GLenum internalFormat, GLenum destType, GLint level, bool premultiplyAlp ha, bool flipY) |
| 217 { | 217 { |
| 218 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm at, destType, level)) | 218 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm at, destType, level)) |
| 219 return false; | 219 return false; |
| 220 | 220 |
| 221 if (!isSurfaceValid()) | 221 if (!isSurfaceValid()) |
| 222 return false; | 222 return false; |
| 223 | 223 |
| 224 RefPtr<const SkImage> textureImage = m_surface->newImageSnapshot(PreferAccel eration, SnapshotReasonCopyToWebGLTexture); | 224 sk_sp<const SkImage> textureImage = m_surface->newImageSnapshot(PreferAccele ration, SnapshotReasonCopyToWebGLTexture); |
| 225 if (!textureImage) | 225 if (!textureImage) |
| 226 return false; | 226 return false; |
| 227 | 227 |
| 228 if (!m_surface->isAccelerated()) | 228 if (!m_surface->isAccelerated()) |
| 229 return false; | 229 return false; |
| 230 | 230 |
| 231 | 231 |
| 232 ASSERT(textureImage->isTextureBacked()); // isAccelerated() check above shou ld guarantee this | 232 ASSERT(textureImage->isTextureBacked()); // isAccelerated() check above shou ld guarantee this |
| 233 // Get the texture ID, flushing pending operations if needed. | 233 // Get the texture ID, flushing pending operations if needed. |
| 234 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( textureImage->getTextureHandle(true)); | 234 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( textureImage->getTextureHandle(true)); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 WTF::ArrayBufferContents result(data, allocSizeInBytes, WTF::ArrayBuffer Contents::NotShared); | 336 WTF::ArrayBufferContents result(data, allocSizeInBytes, WTF::ArrayBuffer Contents::NotShared); |
| 337 result.transfer(contents); | 337 result.transfer(contents); |
| 338 return true; | 338 return true; |
| 339 } | 339 } |
| 340 | 340 |
| 341 DCHECK(canvas()); | 341 DCHECK(canvas()); |
| 342 | 342 |
| 343 if (ExpensiveCanvasHeuristicParameters::GetImageDataForcesNoAcceleration && !RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled()) | 343 if (ExpensiveCanvasHeuristicParameters::GetImageDataForcesNoAcceleration && !RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled()) |
| 344 const_cast<ImageBuffer*>(this)->disableAcceleration(); | 344 const_cast<ImageBuffer*>(this)->disableAcceleration(); |
| 345 | 345 |
| 346 RefPtr<SkImage> snapshot = m_surface->newImageSnapshot(PreferNoAcceleration, SnapshotReasonGetImageData); | 346 sk_sp<SkImage> snapshot = m_surface->newImageSnapshot(PreferNoAcceleration, SnapshotReasonGetImageData); |
| 347 if (!snapshot) | 347 if (!snapshot) |
| 348 return false; | 348 return false; |
| 349 | 349 |
| 350 const bool mayHaveStrayArea = | 350 const bool mayHaveStrayArea = |
| 351 m_surface->isAccelerated() // GPU readback may fail silently | 351 m_surface->isAccelerated() // GPU readback may fail silently |
| 352 || rect.x() < 0 | 352 || rect.x() < 0 |
| 353 || rect.y() < 0 | 353 || rect.y() < 0 |
| 354 || rect.maxX() > m_surface->size().width() | 354 || rect.maxX() > m_surface->size().width() |
| 355 || rect.maxY() > m_surface->size().height(); | 355 || rect.maxY() > m_surface->size().height(); |
| 356 size_t allocSizeInBytes = rect.width() * rect.height() * 4; | 356 size_t allocSizeInBytes = rect.width() * rect.height() * 4; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 478 ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)); | 478 ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)); |
| 479 | 479 |
| 480 Vector<unsigned char> result; | 480 Vector<unsigned char> result; |
| 481 if (!encodeImage(mimeType, quality, &result)) | 481 if (!encodeImage(mimeType, quality, &result)) |
| 482 return "data:,"; | 482 return "data:,"; |
| 483 | 483 |
| 484 return "data:" + mimeType + ";base64," + base64Encode(result); | 484 return "data:" + mimeType + ";base64," + base64Encode(result); |
| 485 } | 485 } |
| 486 | 486 |
| 487 } // namespace blink | 487 } // namespace blink |
| OLD | NEW |