Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: src/image/SkSurface_Gpu.cpp

Issue 926843003: Move canvas->surface association to the device subclasses (Closed) Base URL: https://skia.googlesource.com/skia.git@skimage-filters-03-sksurface-set-root-device-simple
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/image/SkSurface_Base.h ('k') | src/image/SkSurface_Raster.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/image/SkSurface_Gpu.cpp
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 5fb4b718a27b3a664a00cf1d055166ddf4dd70c2..49a668ec3ffaa81a1f6537eb65318baa5817e03d 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -7,7 +7,6 @@
#include "SkSurface_Gpu.h"
-#include "GrGpuResourcePriv.h"
#include "SkCanvas.h"
#include "SkGpuDevice.h"
#include "SkImage_Base.h"
@@ -21,9 +20,12 @@
SkSurface_Gpu::SkSurface_Gpu(SkGpuDevice* device)
: INHERITED(device->width(), device->height(), &device->surfaceProps())
, fDevice(SkRef(device)) {
+ fDevice->setSurface(this);
}
SkSurface_Gpu::~SkSurface_Gpu() {
+ // In case the device outlives this instance, make sure device does not try to access this.
+ fDevice->setSurface(NULL);
fDevice->unref();
}
@@ -69,22 +71,7 @@ void SkSurface_Gpu::onCopyOnWrite(ContentChangeMode mode) {
SkImage* image = this->getCachedImage(kNo_Budgeted);
SkASSERT(image);
if (rt->asTexture() == SkTextureImageGetTexture(image)) {
- GrRenderTarget* oldRT = this->fDevice->accessRenderTarget();
- SkSurface::Budgeted budgeted = oldRT->resourcePriv().isBudgeted() ? kYes_Budgeted :
- kNo_Budgeted;
- SkAutoTUnref<GrRenderTarget> newRT(
- SkGpuDevice::CreateRenderTarget(oldRT->getContext(), budgeted, fDevice->imageInfo(),
- oldRT->numSamples()));
-
- if (kRetain_ContentChangeMode == mode && !oldRT->wasDestroyed() && newRT) {
- oldRT->getContext()->copySurface(newRT, oldRT);
- }
-
- SkASSERT(this->getCachedCanvas());
- SkASSERT(this->getCachedCanvas()->getDevice() == fDevice);
-
- this->fDevice->swapRenderTarget(newRT);
-
+ fDevice->detachBackendRenderTarget(kRetain_ContentChangeMode == mode);
SkTextureImageApplyBudgetedDecision(image);
} else if (kDiscard_ContentChangeMode == mode) {
this->SkSurface_Gpu::onDiscard();
« no previous file with comments | « src/image/SkSurface_Base.h ('k') | src/image/SkSurface_Raster.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698