| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 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 #include "SkPixelRef.h" | 8 #include "SkPixelRef.h" |
| 9 #include "SkFlattenableBuffers.h" | 9 #include "SkReadBuffer.h" |
| 10 #include "SkWriteBuffer.h" |
| 10 #include "SkThread.h" | 11 #include "SkThread.h" |
| 11 | 12 |
| 12 #ifdef SK_USE_POSIX_THREADS | 13 #ifdef SK_USE_POSIX_THREADS |
| 13 | 14 |
| 14 static SkBaseMutex gPixelRefMutexRing[] = { | 15 static SkBaseMutex gPixelRefMutexRing[] = { |
| 15 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | 16 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
| 16 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | 17 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
| 17 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | 18 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
| 18 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | 19 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
| 19 | 20 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 | 95 |
| 95 SkPixelRef::SkPixelRef(const SkImageInfo& info, SkBaseMutex* mutex) : fInfo(info
) { | 96 SkPixelRef::SkPixelRef(const SkImageInfo& info, SkBaseMutex* mutex) : fInfo(info
) { |
| 96 this->setMutex(mutex); | 97 this->setMutex(mutex); |
| 97 fRec.zero(); | 98 fRec.zero(); |
| 98 fLockCount = 0; | 99 fLockCount = 0; |
| 99 this->needsNewGenID(); | 100 this->needsNewGenID(); |
| 100 fIsImmutable = false; | 101 fIsImmutable = false; |
| 101 fPreLocked = false; | 102 fPreLocked = false; |
| 102 } | 103 } |
| 103 | 104 |
| 104 static SkImageInfo read_info(SkFlattenableReadBuffer& buffer) { | 105 static SkImageInfo read_info(SkReadBuffer& buffer) { |
| 105 SkImageInfo info; | 106 SkImageInfo info; |
| 106 info.unflatten(buffer); | 107 info.unflatten(buffer); |
| 107 return info; | 108 return info; |
| 108 } | 109 } |
| 109 | 110 |
| 110 SkPixelRef::SkPixelRef(SkFlattenableReadBuffer& buffer, SkBaseMutex* mutex) | 111 SkPixelRef::SkPixelRef(SkReadBuffer& buffer, SkBaseMutex* mutex) |
| 111 : INHERITED(buffer) | 112 : INHERITED(buffer) |
| 112 , fInfo(read_info(buffer)) | 113 , fInfo(read_info(buffer)) |
| 113 { | 114 { |
| 114 this->setMutex(mutex); | 115 this->setMutex(mutex); |
| 115 fRec.zero(); | 116 fRec.zero(); |
| 116 fLockCount = 0; | 117 fLockCount = 0; |
| 117 fIsImmutable = buffer.readBool(); | 118 fIsImmutable = buffer.readBool(); |
| 118 fGenerationID = buffer.readUInt(); | 119 fGenerationID = buffer.readUInt(); |
| 119 fUniqueGenerationID = false; // Conservatively assuming the original still
exists. | 120 fUniqueGenerationID = false; // Conservatively assuming the original still
exists. |
| 120 fPreLocked = false; | 121 fPreLocked = false; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 141 // only call me in your constructor, otherwise fLockCount tracking can get | 142 // only call me in your constructor, otherwise fLockCount tracking can get |
| 142 // out of sync. | 143 // out of sync. |
| 143 fRec.fPixels = pixels; | 144 fRec.fPixels = pixels; |
| 144 fRec.fColorTable = ctable; | 145 fRec.fColorTable = ctable; |
| 145 fRec.fRowBytes = rowBytes; | 146 fRec.fRowBytes = rowBytes; |
| 146 fLockCount = SKPIXELREF_PRELOCKED_LOCKCOUNT; | 147 fLockCount = SKPIXELREF_PRELOCKED_LOCKCOUNT; |
| 147 fPreLocked = true; | 148 fPreLocked = true; |
| 148 #endif | 149 #endif |
| 149 } | 150 } |
| 150 | 151 |
| 151 void SkPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { | 152 void SkPixelRef::flatten(SkWriteBuffer& buffer) const { |
| 152 this->INHERITED::flatten(buffer); | 153 this->INHERITED::flatten(buffer); |
| 153 fInfo.flatten(buffer); | 154 fInfo.flatten(buffer); |
| 154 buffer.writeBool(fIsImmutable); | 155 buffer.writeBool(fIsImmutable); |
| 155 // We write the gen ID into the picture for within-process recording. This | 156 // We write the gen ID into the picture for within-process recording. This |
| 156 // is safe since the same genID will never refer to two different sets of | 157 // is safe since the same genID will never refer to two different sets of |
| 157 // pixels (barring overflow). However, each process has its own "namespace" | 158 // pixels (barring overflow). However, each process has its own "namespace" |
| 158 // of genIDs. So for cross-process recording we write a zero which will | 159 // of genIDs. So for cross-process recording we write a zero which will |
| 159 // trigger assignment of a new genID in playback. | 160 // trigger assignment of a new genID in playback. |
| 160 if (buffer.isCrossProcess()) { | 161 if (buffer.isCrossProcess()) { |
| 161 buffer.writeUInt(0); | 162 buffer.writeUInt(0); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 | 316 |
| 316 #ifdef SK_BUILD_FOR_ANDROID | 317 #ifdef SK_BUILD_FOR_ANDROID |
| 317 void SkPixelRef::globalRef(void* data) { | 318 void SkPixelRef::globalRef(void* data) { |
| 318 this->ref(); | 319 this->ref(); |
| 319 } | 320 } |
| 320 | 321 |
| 321 void SkPixelRef::globalUnref() { | 322 void SkPixelRef::globalUnref() { |
| 322 this->unref(); | 323 this->unref(); |
| 323 } | 324 } |
| 324 #endif | 325 #endif |
| OLD | NEW |