private Resource<T> decodeSource() throws Exception {
        Resource<T> decoded = null;
        try {
            long startTime = LogTime.getLogTime();
            final A data = fetcher.loadData(priority);
            if (Log.isLoggable(TAG, Log.VERBOSE)) {
                logWithTimeAndKey("Fetched data", startTime);
            }
            if (isCancelled) {
                return null;
            }
            decoded = decodeFromSourceData(data);
        } finally {
            fetcher.cleanup();
        }
        return decoded;
    }
Returns a transformed and transcoded resource decoded from source data, or null if no source data could be
obtained or no resource could be decoded.

<p>
    Depending on the {@link DiskCacheStrategy} used, source data is either decoded
    directly or first written to the disk cache and then decoded from the disk cache.
</p>

@throws Exception
core/src/main/java/com/bumptech/glide/load/engine/DecodeJob.java