BUG=344020
R=reed@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/187023002

git-svn-id: http://skia.googlecode.com/svn/trunk@13662 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-03-04 22:37:29 +00:00
parent 6e2be5dbe3
commit e492ac4fb6

View File

@ -72,19 +72,20 @@ void SkSurface_Gpu::onCopyOnWrite(ContentChangeMode mode) {
// are we sharing our render target with the image?
SkASSERT(NULL != this->getCachedImage());
if (rt->asTexture() == SkTextureImageGetTexture(this->getCachedImage())) {
SkAutoTUnref<SkGpuDevice> newDevice(SkGpuDevice::Create(fDevice->context(),
fDevice->imageInfo(),
rt->numSamples()));
SkASSERT(newDevice.get());
// We call createCompatibleDevice because it uses the texture cache. This isn't
// necessarily correct (http://skbug.com/2252), but never using the cache causes
// a Chromium regression. (http://crbug.com/344020)
SkGpuDevice* newDevice = static_cast<SkGpuDevice*>(
fDevice->createCompatibleDevice(fDevice->imageInfo()));
SkAutoTUnref<SkGpuDevice> aurd(newDevice);
if (kRetain_ContentChangeMode == mode) {
fDevice->context()->copyTexture(rt->asTexture(),
reinterpret_cast<GrRenderTarget*>(newDevice->accessRenderTarget()));
fDevice->context()->copyTexture(rt->asTexture(), newDevice->accessRenderTarget());
}
SkASSERT(NULL != this->getCachedCanvas());
SkASSERT(this->getCachedCanvas()->getDevice() == fDevice);
this->getCachedCanvas()->setRootDevice(newDevice);
SkRefCnt_SafeAssign(fDevice, newDevice.get());
SkRefCnt_SafeAssign(fDevice, newDevice);
}
}