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

Side by Side Diff: src/images/SkImageRef_ashmem.cpp

Issue 119753010: Revert "Revert of https://codereview.chromium.org/110593003/" (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « src/images/SkImageRef_ashmem.h ('k') | src/lazy/SkCachingPixelRef.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 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkImageRef_ashmem.h" 8 #include "SkImageRef_ashmem.h"
9 #include "SkImageDecoder.h" 9 #include "SkImageDecoder.h"
10 #include "SkFlattenableBuffers.h" 10 #include "SkFlattenableBuffers.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } else { 152 } else {
153 if (fRec.fPinned) { 153 if (fRec.fPinned) {
154 ashmem_unpin_region(fRec.fFD, 0, 0); 154 ashmem_unpin_region(fRec.fFD, 0, 0);
155 fRec.fPinned = false; 155 fRec.fPinned = false;
156 } 156 }
157 this->closeFD(); 157 this->closeFD();
158 return false; 158 return false;
159 } 159 }
160 } 160 }
161 161
162 void* SkImageRef_ashmem::onLockPixels(SkColorTable** ct) { 162 bool SkImageRef_ashmem::onNewLockPixels(LockRec* rec) {
163 SkASSERT(fBitmap.getPixels() == NULL); 163 SkASSERT(fBitmap.getPixels() == NULL);
164 SkASSERT(fBitmap.getColorTable() == NULL); 164 SkASSERT(fBitmap.getColorTable() == NULL);
165 165
166 // fast case: check if we can just pin and get the cached data 166 // fast case: check if we can just pin and get the cached data
167 if (-1 != fRec.fFD) { 167 if (-1 != fRec.fFD) {
168 SkASSERT(fRec.fAddr); 168 SkASSERT(fRec.fAddr);
169 SkASSERT(!fRec.fPinned); 169 SkASSERT(!fRec.fPinned);
170 int pin = ashmem_pin_region(fRec.fFD, 0, 0); 170 int pin = ashmem_pin_region(fRec.fFD, 0, 0);
171 171
172 if (ASHMEM_NOT_PURGED == pin) { // yea, fast case! 172 if (ASHMEM_NOT_PURGED == pin) { // yea, fast case!
173 fBitmap.setPixels(fRec.fAddr, fCT); 173 fBitmap.setPixels(fRec.fAddr, fCT);
174 fRec.fPinned = true; 174 fRec.fPinned = true;
175 } else if (ASHMEM_WAS_PURGED == pin) { 175 } else if (ASHMEM_WAS_PURGED == pin) {
176 ashmem_unpin_region(fRec.fFD, 0, 0); 176 ashmem_unpin_region(fRec.fFD, 0, 0);
177 // let go of our colortable if we lost the pixels. Well get it back 177 // let go of our colortable if we lost the pixels. Well get it back
178 // again when we re-decode 178 // again when we re-decode
179 if (fCT) { 179 if (fCT) {
180 fCT->unref(); 180 fCT->unref();
181 fCT = NULL; 181 fCT = NULL;
182 } 182 }
183 #if defined(DUMP_ASHMEM_LIFECYCLE) || defined(TRACE_ASH_PURGE) 183 #if defined(DUMP_ASHMEM_LIFECYCLE) || defined(TRACE_ASH_PURGE)
184 SkDebugf("===== ashmem purged %d\n", fBitmap.getSize()); 184 SkDebugf("===== ashmem purged %d\n", fBitmap.getSize());
185 #endif 185 #endif
186 } else { 186 } else {
187 SkDebugf("===== ashmem pin_region(%d) returned %d\n", fRec.fFD, pin) ; 187 SkDebugf("===== ashmem pin_region(%d) returned %d\n", fRec.fFD, pin) ;
188 // return null result for failure 188 return false;
189 if (ct) {
190 *ct = NULL;
191 }
192 return NULL;
193 } 189 }
194 } else { 190 } else {
195 // no FD, will create an ashmem region in allocator 191 // no FD, will create an ashmem region in allocator
196 } 192 }
197 193
198 return this->INHERITED::onLockPixels(ct); 194 return this->INHERITED::onNewLockPixels(rec);
199 } 195 }
200 196
201 void SkImageRef_ashmem::onUnlockPixels() { 197 void SkImageRef_ashmem::onUnlockPixels() {
202 this->INHERITED::onUnlockPixels(); 198 this->INHERITED::onUnlockPixels();
203 199
204 if (-1 != fRec.fFD) { 200 if (-1 != fRec.fFD) {
205 SkASSERT(fRec.fAddr); 201 SkASSERT(fRec.fAddr);
206 SkASSERT(fRec.fPinned); 202 SkASSERT(fRec.fPinned);
207 203
208 ashmem_unpin_region(fRec.fFD, 0, 0); 204 ashmem_unpin_region(fRec.fFD, 0, 0);
(...skipping 15 matching lines...) Expand all
224 fRec.fFD = -1; 220 fRec.fFD = -1;
225 fRec.fAddr = NULL; 221 fRec.fAddr = NULL;
226 fRec.fSize = 0; 222 fRec.fSize = 0;
227 fRec.fPinned = false; 223 fRec.fPinned = false;
228 fCT = NULL; 224 fCT = NULL;
229 225
230 SkString uri; 226 SkString uri;
231 buffer.readString(&uri); 227 buffer.readString(&uri);
232 this->setURI(uri); 228 this->setURI(uri);
233 } 229 }
OLDNEW
« no previous file with comments | « src/images/SkImageRef_ashmem.h ('k') | src/lazy/SkCachingPixelRef.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698