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

Side by Side Diff: src/core/SkPicture.cpp

Issue 408923002: Add auto purging for SkPicture-related Ganesh resources (esp. layers) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix comment Created 6 years, 5 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 unified diff | Download patch
« no previous file with comments | « src/core/SkDevice.cpp ('k') | src/gpu/GrLayerCache.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2007 The Android Open Source Project 3 * Copyright 2007 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkPictureFlat.h" 10 #include "SkPictureFlat.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 137
138 // Create an SkPictureData-backed SkPicture from an SkRecord. 138 // Create an SkPictureData-backed SkPicture from an SkRecord.
139 // This for compatibility with serialization code only. This is not cheap. 139 // This for compatibility with serialization code only. This is not cheap.
140 static SkPicture* backport(const SkRecord& src, int width, int height) { 140 static SkPicture* backport(const SkRecord& src, int width, int height) {
141 SkPictureRecorder recorder; 141 SkPictureRecorder recorder;
142 SkRecordDraw(src, recorder.beginRecording(width, height)); 142 SkRecordDraw(src, recorder.beginRecording(width, height));
143 return recorder.endRecording(); 143 return recorder.endRecording();
144 } 144 }
145 145
146 // fRecord OK 146 // fRecord OK
147 SkPicture::~SkPicture() {} 147 SkPicture::~SkPicture() {
148 this->callDeletionListeners();
149 }
148 150
149 #ifdef SK_SUPPORT_LEGACY_PICTURE_CLONE 151 #ifdef SK_SUPPORT_LEGACY_PICTURE_CLONE
150 // fRecord TODO, fix by deleting this method 152 // fRecord TODO, fix by deleting this method
151 SkPicture* SkPicture::clone() const { 153 SkPicture* SkPicture::clone() const {
152 154
153 SkAutoTDelete<SkPictureData> newData; 155 SkAutoTDelete<SkPictureData> newData;
154 156
155 if (fData.get()) { 157 if (fData.get()) {
156 SkPictCopyInfo copyInfo; 158 SkPictCopyInfo copyInfo;
157 159
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 } 487 }
486 488
487 // fRecord OK 489 // fRecord OK
488 SkPicture::SkPicture(int width, int height, SkRecord* record) 490 SkPicture::SkPicture(int width, int height, SkRecord* record)
489 : fWidth(width) 491 : fWidth(width)
490 , fHeight(height) 492 , fHeight(height)
491 , fRecord(record) 493 , fRecord(record)
492 , fRecordWillPlayBackBitmaps(SkRecordWillPlaybackBitmaps(*record)) { 494 , fRecordWillPlayBackBitmaps(SkRecordWillPlaybackBitmaps(*record)) {
493 this->needsNewGenID(); 495 this->needsNewGenID();
494 } 496 }
497
498 // Note that we are assuming that this entry point will only be called from
499 // one thread. Currently the only client of this method is
500 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single
501 // thread.
502 void SkPicture::addDeletionListener(DeletionListener* listener) const {
503 SkASSERT(NULL != listener);
504
505 *fDeletionListeners.append() = SkRef(listener);
506 }
507
508 void SkPicture::callDeletionListeners() {
509 for (int i = 0; i < fDeletionListeners.count(); ++i) {
510 fDeletionListeners[i]->onDeletion(this->uniqueID());
511 }
512
513 fDeletionListeners.unrefAll();
514 }
OLDNEW
« no previous file with comments | « src/core/SkDevice.cpp ('k') | src/gpu/GrLayerCache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698