const ScaledImageFragment* ImageFrameGenerator::decodeAndScale(const SkISize& scaledSize) { // Prevents concurrent decode or scale operations on the same image data. // Multiple LazyDecodingPixelRefs can call this method at the same time. MutexLocker lock(m_decodeMutex); if (m_decodeFailedAndEmpty) return 0; const ScaledImageFragment* cachedImage = 0; cachedImage = tryToLockCompleteCache(scaledSize); if (cachedImage) return cachedImage; cachedImage = tryToScale(0, scaledSize); if (cachedImage) return cachedImage; cachedImage = tryToResumeDecodeAndScale(scaledSize); if (cachedImage) return cachedImage; cachedImage = tryToDecodeAndScale(scaledSize); if (cachedImage) return cachedImage; return 0; }
const ScaledImageFragment* ImageFrameGenerator::decodeAndScale(const SkISize& scaledSize, size_t index) { // Prevents concurrent decode or scale operations on the same image data. // Multiple LazyDecodingPixelRefs can call this method at the same time. MutexLocker lock(m_decodeMutex); if (m_decodeFailedAndEmpty) return 0; const ScaledImageFragment* cachedImage = 0; cachedImage = tryToLockCompleteCache(scaledSize, index); if (cachedImage) return cachedImage; TRACE_EVENT2("webkit", "ImageFrameGenerator::decodeAndScale", "generator", this, "decodeCount", static_cast<int>(m_decodeCount)); cachedImage = tryToScale(0, scaledSize, index); if (cachedImage) return cachedImage; cachedImage = tryToResumeDecodeAndScale(scaledSize, index); if (cachedImage) return cachedImage; return 0; }