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

Side by Side Diff: src/lazy/SkDiscardablePixelRef.cpp

Issue 940323003: Revert of Make SkPixelRef::isLocked() debug-only, remove related dead code. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
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 unified diff | Download patch
« no previous file with comments | « src/lazy/SkDiscardablePixelRef.h ('k') | no next file » | 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 2013 Google Inc. 2 * Copyright 2013 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 "SkDiscardablePixelRef.h" 8 #include "SkDiscardablePixelRef.h"
9 #include "SkDiscardableMemory.h" 9 #include "SkDiscardableMemory.h"
10 #include "SkImageGenerator.h" 10 #include "SkImageGenerator.h"
11 11
12 SkDiscardablePixelRef::SkDiscardablePixelRef(const SkImageInfo& info, 12 SkDiscardablePixelRef::SkDiscardablePixelRef(const SkImageInfo& info,
13 SkImageGenerator* generator, 13 SkImageGenerator* generator,
14 size_t rowBytes, 14 size_t rowBytes,
15 SkDiscardableMemory::Factory* fact) 15 SkDiscardableMemory::Factory* fact)
16 : INHERITED(info) 16 : INHERITED(info)
17 , fGenerator(generator) 17 , fGenerator(generator)
18 , fDMFactory(fact) 18 , fDMFactory(fact)
19 , fRowBytes(rowBytes) 19 , fRowBytes(rowBytes)
20 , fDiscardableMemory(NULL) 20 , fDiscardableMemory(NULL)
21 , fDiscardableMemoryIsLocked(false)
22 { 21 {
23 SkASSERT(fGenerator != NULL); 22 SkASSERT(fGenerator != NULL);
24 SkASSERT(fRowBytes > 0); 23 SkASSERT(fRowBytes > 0);
25 // The SkImageGenerator contract requires fGenerator to always 24 // The SkImageGenerator contract requires fGenerator to always
26 // decode the same image on each call to getPixels(). 25 // decode the same image on each call to getPixels().
27 this->setImmutable(); 26 this->setImmutable();
28 SkSafeRef(fDMFactory); 27 SkSafeRef(fDMFactory);
29 } 28 }
30 29
31 SkDiscardablePixelRef::~SkDiscardablePixelRef() { 30 SkDiscardablePixelRef::~SkDiscardablePixelRef() {
32 if (fDiscardableMemoryIsLocked) { 31 if (this->isLocked()) {
33 fDiscardableMemory->unlock(); 32 fDiscardableMemory->unlock();
34 fDiscardableMemoryIsLocked = false;
35 } 33 }
36 SkDELETE(fDiscardableMemory); 34 SkDELETE(fDiscardableMemory);
37 SkSafeUnref(fDMFactory); 35 SkSafeUnref(fDMFactory);
38 SkDELETE(fGenerator); 36 SkDELETE(fGenerator);
39 } 37 }
40 38
41 bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { 39 bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) {
42 if (fDiscardableMemory != NULL) { 40 if (fDiscardableMemory != NULL) {
43 if (fDiscardableMemory->lock()) { 41 if (fDiscardableMemory->lock()) {
44 fDiscardableMemoryIsLocked = true;
45 rec->fPixels = fDiscardableMemory->data(); 42 rec->fPixels = fDiscardableMemory->data();
46 rec->fColorTable = fCTable.get(); 43 rec->fColorTable = fCTable.get();
47 rec->fRowBytes = fRowBytes; 44 rec->fRowBytes = fRowBytes;
48 return true; 45 return true;
49 } 46 }
50 SkDELETE(fDiscardableMemory); 47 SkDELETE(fDiscardableMemory);
51 fDiscardableMemory = NULL; 48 fDiscardableMemory = NULL;
52 fDiscardableMemoryIsLocked = false;
53 } 49 }
54 50
55 const size_t size = this->info().getSafeSize(fRowBytes); 51 const size_t size = this->info().getSafeSize(fRowBytes);
56 52
57 if (fDMFactory != NULL) { 53 if (fDMFactory != NULL) {
58 fDiscardableMemory = fDMFactory->create(size); 54 fDiscardableMemory = fDMFactory->create(size);
59 fDiscardableMemoryIsLocked = true;
60 } else { 55 } else {
61 fDiscardableMemory = SkDiscardableMemory::Create(size); 56 fDiscardableMemory = SkDiscardableMemory::Create(size);
62 fDiscardableMemoryIsLocked = true;
63 } 57 }
64 if (NULL == fDiscardableMemory) { 58 if (NULL == fDiscardableMemory) {
65 fDiscardableMemoryIsLocked = false;
66 return false; // Memory allocation failed. 59 return false; // Memory allocation failed.
67 } 60 }
68 61
69 void* pixels = fDiscardableMemory->data(); 62 void* pixels = fDiscardableMemory->data();
70 const SkImageInfo& info = this->info(); 63 const SkImageInfo& info = this->info();
71 SkPMColor colors[256]; 64 SkPMColor colors[256];
72 int colorCount = 0; 65 int colorCount = 0;
73 66
74 const SkImageGenerator::Result result = fGenerator->getPixels(info, pixels, fRowBytes, 67 const SkImageGenerator::Result result = fGenerator->getPixels(info, pixels, fRowBytes,
75 colors, &color Count); 68 colors, &color Count);
76 switch (result) { 69 switch (result) {
77 case SkImageGenerator::kSuccess: 70 case SkImageGenerator::kSuccess:
78 case SkImageGenerator::kIncompleteInput: 71 case SkImageGenerator::kIncompleteInput:
79 break; 72 break;
80 default: 73 default:
81 fDiscardableMemory->unlock(); 74 fDiscardableMemory->unlock();
82 fDiscardableMemoryIsLocked = false;
83 SkDELETE(fDiscardableMemory); 75 SkDELETE(fDiscardableMemory);
84 fDiscardableMemory = NULL; 76 fDiscardableMemory = NULL;
85 return false; 77 return false;
86 } 78 }
87 79
88 // Note: our ctable is not purgeable, as it is not stored in the discardable memory block. 80 // Note: our ctable is not purgeable, as it is not stored in the discardable memory block.
89 // This is because SkColorTable is refcntable, and therefore our caller coul d hold onto it 81 // This is because SkColorTable is refcntable, and therefore our caller coul d hold onto it
90 // beyond the scope of a lock/unlock. If we change the API/lifecycle for SkC olorTable, we 82 // beyond the scope of a lock/unlock. If we change the API/lifecycle for SkC olorTable, we
91 // could move it into the block, but then again perhaps it is small enough t hat this doesn't 83 // could move it into the block, but then again perhaps it is small enough t hat this doesn't
92 // really matter. 84 // really matter.
93 if (colorCount > 0) { 85 if (colorCount > 0) {
94 fCTable.reset(SkNEW_ARGS(SkColorTable, (colors, colorCount))); 86 fCTable.reset(SkNEW_ARGS(SkColorTable, (colors, colorCount)));
95 } else { 87 } else {
96 fCTable.reset(NULL); 88 fCTable.reset(NULL);
97 } 89 }
98 90
99 rec->fPixels = pixels; 91 rec->fPixels = pixels;
100 rec->fColorTable = fCTable.get(); 92 rec->fColorTable = fCTable.get();
101 rec->fRowBytes = fRowBytes; 93 rec->fRowBytes = fRowBytes;
102 return true; 94 return true;
103 } 95 }
104 96
105 void SkDiscardablePixelRef::onUnlockPixels() { 97 void SkDiscardablePixelRef::onUnlockPixels() {
106 fDiscardableMemory->unlock(); 98 fDiscardableMemory->unlock();
107 fDiscardableMemoryIsLocked = false;
108 } 99 }
109 100
110 bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst, 101 bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst,
111 SkDiscardableMemory::Factory* factory) { 102 SkDiscardableMemory::Factory* factory) {
112 SkImageInfo info; 103 SkImageInfo info;
113 SkAutoTDelete<SkImageGenerator> autoGenerator(generator); 104 SkAutoTDelete<SkImageGenerator> autoGenerator(generator);
114 if ((NULL == autoGenerator.get()) 105 if ((NULL == autoGenerator.get())
115 || (!autoGenerator->getInfo(&info)) 106 || (!autoGenerator->getInfo(&info))
116 || info.isEmpty() 107 || info.isEmpty()
117 || (!dst->setInfo(info))) { 108 || (!dst->setInfo(info))) {
(...skipping 16 matching lines...) Expand all
134 // These are the public API 125 // These are the public API
135 126
136 bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst) { 127 bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst) {
137 return SkInstallDiscardablePixelRef(generator, dst, NULL); 128 return SkInstallDiscardablePixelRef(generator, dst, NULL);
138 } 129 }
139 130
140 bool SkInstallDiscardablePixelRef(SkData* encoded, SkBitmap* dst) { 131 bool SkInstallDiscardablePixelRef(SkData* encoded, SkBitmap* dst) {
141 SkImageGenerator* generator = SkImageGenerator::NewFromData(encoded); 132 SkImageGenerator* generator = SkImageGenerator::NewFromData(encoded);
142 return generator ? SkInstallDiscardablePixelRef(generator, dst, NULL) : fals e; 133 return generator ? SkInstallDiscardablePixelRef(generator, dst, NULL) : fals e;
143 } 134 }
OLDNEW
« no previous file with comments | « src/lazy/SkDiscardablePixelRef.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698