| Index: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| index 4a0048c6f28f48e1abb46b7c278b5c5d87a9153f..9c3efd43eb358154978d766ff9ac5bae348ba151 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| @@ -60,7 +60,7 @@ enum {
|
|
|
| namespace blink {
|
|
|
| -static PassRefPtr<SkSurface> createSkSurface(GrContext* gr, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, sk_sp<SkColorSpace> colorSpace, bool* surfaceIsAccelerated)
|
| +static sk_sp<SkSurface> createSkSurface(GrContext* gr, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, sk_sp<SkColorSpace> colorSpace, bool* surfaceIsAccelerated)
|
| {
|
| if (gr)
|
| gr->resetContext();
|
| @@ -87,7 +87,7 @@ static PassRefPtr<SkSurface> createSkSurface(GrContext* gr, const IntSize& size,
|
| surface->getCanvas()->clear(SK_ColorTRANSPARENT);
|
| }
|
| }
|
| - return fromSkSp(surface);
|
| + return surface;
|
| }
|
|
|
| Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode, sk_sp<SkColorSpace> colorSpace)
|
| @@ -292,7 +292,7 @@ void Canvas2DLayerBridge::createMailboxInfo()
|
| m_mailboxes.prepend(tmp);
|
| }
|
|
|
| -bool Canvas2DLayerBridge::prepareMailboxFromImage(PassRefPtr<SkImage> image,
|
| +bool Canvas2DLayerBridge::prepareMailboxFromImage(sk_sp<SkImage> image,
|
| cc::TextureMailbox* outMailbox)
|
| {
|
| createMailboxInfo();
|
| @@ -300,7 +300,7 @@ bool Canvas2DLayerBridge::prepareMailboxFromImage(PassRefPtr<SkImage> image,
|
|
|
| GrContext* grContext = m_contextProvider->grContext();
|
| if (!grContext) {
|
| - mailboxInfo.m_image = image;
|
| + mailboxInfo.m_image = std::move(image);
|
| return true; // for testing: skip gl stuff when using a mock graphics context.
|
| }
|
|
|
| @@ -313,7 +313,7 @@ bool Canvas2DLayerBridge::prepareMailboxFromImage(PassRefPtr<SkImage> image,
|
| }
|
| #endif // USE_IOSURFACE_FOR_2D_CANVAS
|
|
|
| - mailboxInfo.m_image = image;
|
| + mailboxInfo.m_image = std::move(image);
|
|
|
| if (RuntimeEnabledFeatures::forceDisable2dCanvasCopyOnWriteEnabled())
|
| m_surface->notifyContentWillChange(SkSurface::kRetain_ContentChangeMode);
|
| @@ -345,7 +345,7 @@ bool Canvas2DLayerBridge::prepareMailboxFromImage(PassRefPtr<SkImage> image,
|
| if (isHidden()) {
|
| // With hidden canvases, we release the SkImage immediately because
|
| // there is no need for animations to be double buffered.
|
| - mailboxInfo.m_image.clear();
|
| + mailboxInfo.m_image.reset();
|
| } else {
|
| // FIXME: We'd rather insert a syncpoint than perform a flush here,
|
| // but currently the canvas will flicker if we don't flush here.
|
| @@ -430,8 +430,8 @@ void Canvas2DLayerBridge::hibernate()
|
| SkPaint copyPaint;
|
| copyPaint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
| m_surface->draw(tempHibernationSurface->getCanvas(), 0, 0, ©Paint); // GPU readback
|
| - m_hibernationImage = fromSkSp(tempHibernationSurface->makeImageSnapshot());
|
| - m_surface.clear(); // destroy the GPU-backed buffer
|
| + m_hibernationImage = tempHibernationSurface->makeImageSnapshot();
|
| + m_surface.reset(); // destroy the GPU-backed buffer
|
| m_layer->clearTexture();
|
| #if USE_IOSURFACE_FOR_2D_CANVAS
|
| clearCHROMIUMImageCache();
|
| @@ -492,7 +492,7 @@ SkSurface* Canvas2DLayerBridge::getOrCreateSurface(AccelerationHint hint)
|
| SkPaint copyPaint;
|
| copyPaint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
| m_surface->getCanvas()->drawImage(m_hibernationImage.get(), 0, 0, ©Paint);
|
| - m_hibernationImage.clear();
|
| + m_hibernationImage.reset();
|
|
|
| if (m_imageBuffer)
|
| m_imageBuffer->updateGPUMemoryUsage();
|
| @@ -557,12 +557,12 @@ void Canvas2DLayerBridge::beginDestruction()
|
| return;
|
| if (isHibernating())
|
| m_logger->reportHibernationEvent(HibernationEndedWithTeardown);
|
| - m_hibernationImage.clear();
|
| + m_hibernationImage.reset();
|
| m_recorder.reset();
|
| m_imageBuffer = nullptr;
|
| m_destructionInProgress = true;
|
| setIsHidden(true);
|
| - m_surface.clear();
|
| + m_surface.reset();
|
|
|
| unregisterTaskObserver();
|
|
|
| @@ -612,7 +612,10 @@ void Canvas2DLayerBridge::setIsHidden(bool hidden)
|
| flushRecordingOnly();
|
| SkPaint copyPaint;
|
| copyPaint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
| - RefPtr<SkSurface> oldSurface = m_surface.release();
|
| +
|
| + sk_sp<SkSurface> oldSurface = std::move(m_surface);
|
| + m_surface.reset();
|
| +
|
| m_softwareRenderingWhileHidden = false;
|
| SkSurface* newSurface = getOrCreateSurface(PreferAccelerationAfterVisibilityChange);
|
| if (newSurface) {
|
| @@ -715,10 +718,10 @@ bool Canvas2DLayerBridge::checkSurfaceValid()
|
| if (!m_surface)
|
| return false;
|
| if (m_contextProvider->contextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR) {
|
| - m_surface.clear();
|
| + m_surface.reset();
|
| for (auto mailboxInfo = m_mailboxes.begin(); mailboxInfo != m_mailboxes.end(); ++mailboxInfo) {
|
| if (mailboxInfo->m_image)
|
| - mailboxInfo->m_image.clear();
|
| + mailboxInfo->m_image.reset();
|
| }
|
| if (m_imageBuffer)
|
| m_imageBuffer->notifySurfaceInvalid();
|
| @@ -743,7 +746,7 @@ bool Canvas2DLayerBridge::restoreSurface()
|
| if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) {
|
| GrContext* grCtx = m_contextProvider->grContext();
|
| bool surfaceIsAccelerated;
|
| - RefPtr<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode, m_colorSpace, &surfaceIsAccelerated));
|
| + sk_sp<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode, m_colorSpace, &surfaceIsAccelerated));
|
|
|
| if (!m_surface)
|
| reportSurfaceCreationFailure();
|
| @@ -752,7 +755,7 @@ bool Canvas2DLayerBridge::restoreSurface()
|
| // due to changes to the layer tree, which can only happen at specific times during the document lifecycle.
|
| // Therefore, we can only accept the restored surface if it is accelerated.
|
| if (surface && surfaceIsAccelerated) {
|
| - m_surface = surface.release();
|
| + m_surface = std::move(surface);
|
| // FIXME: draw sad canvas picture into new buffer crbug.com/243842
|
| }
|
| }
|
| @@ -812,7 +815,7 @@ bool Canvas2DLayerBridge::PrepareTextureMailbox(
|
| if (m_contextProvider->contextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR)
|
| return false;
|
|
|
| - RefPtr<SkImage> image = newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown);
|
| + sk_sp<SkImage> image = newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown);
|
| if (!image || !image->getTexture())
|
| return false;
|
|
|
| @@ -823,7 +826,7 @@ bool Canvas2DLayerBridge::PrepareTextureMailbox(
|
| m_lastImageId = image->uniqueID();
|
| m_lastFilter = filter;
|
|
|
| - if (!prepareMailboxFromImage(image.release(), outMailbox))
|
| + if (!prepareMailboxFromImage(std::move(image), outMailbox))
|
| return false;
|
| outMailbox->set_nearest_neighbor(getGLFilter() == GL_NEAREST);
|
| gfx::ColorSpace colorSpace = SkColorSpaceToColorSpace(m_colorSpace.get());
|
| @@ -975,7 +978,7 @@ void Canvas2DLayerBridge::willProcessTask()
|
| NOTREACHED();
|
| }
|
|
|
| -PassRefPtr<SkImage> Canvas2DLayerBridge::newImageSnapshot(AccelerationHint hint, SnapshotReason)
|
| +sk_sp<SkImage> Canvas2DLayerBridge::newImageSnapshot(AccelerationHint hint, SnapshotReason)
|
| {
|
| if (isHibernating())
|
| return m_hibernationImage;
|
| @@ -989,7 +992,7 @@ PassRefPtr<SkImage> Canvas2DLayerBridge::newImageSnapshot(AccelerationHint hint,
|
| // even though we are not technically writing to the texture, only to its
|
| // parameters.
|
| getOrCreateSurface()->notifyContentWillChange(SkSurface::kRetain_ContentChangeMode);
|
| - return fromSkSp(m_surface->makeImageSnapshot());
|
| + return m_surface->makeImageSnapshot();
|
| }
|
|
|
| void Canvas2DLayerBridge::willOverwriteCanvas()
|
|
|