OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 26 matching lines...) Expand all Loading... | |
37 #include "core/frame/LocalDOMWindow.h" | 37 #include "core/frame/LocalDOMWindow.h" |
38 #include "core/frame/UseCounter.h" | 38 #include "core/frame/UseCounter.h" |
39 #include "core/html/HTMLCanvasElement.h" | 39 #include "core/html/HTMLCanvasElement.h" |
40 #include "core/html/HTMLImageElement.h" | 40 #include "core/html/HTMLImageElement.h" |
41 #include "core/html/HTMLVideoElement.h" | 41 #include "core/html/HTMLVideoElement.h" |
42 #include "core/html/ImageData.h" | 42 #include "core/html/ImageData.h" |
43 #include "core/imagebitmap/ImageBitmapOptions.h" | 43 #include "core/imagebitmap/ImageBitmapOptions.h" |
44 #include "core/workers/WorkerGlobalScope.h" | 44 #include "core/workers/WorkerGlobalScope.h" |
45 #include "platform/SharedBuffer.h" | 45 #include "platform/SharedBuffer.h" |
46 #include "platform/ThreadSafeFunctional.h" | 46 #include "platform/ThreadSafeFunctional.h" |
47 #include "platform/image-decoders/ImageDecoder.h" | 47 #include "platform/graphics/DeferredImageDecoder.h" |
48 #include "platform/threading/BackgroundTaskRunner.h" | 48 #include "platform/threading/BackgroundTaskRunner.h" |
49 #include "public/platform/Platform.h" | 49 #include "public/platform/Platform.h" |
50 #include "public/platform/WebThread.h" | 50 #include "public/platform/WebThread.h" |
51 #include "public/platform/WebTraceLocation.h" | 51 #include "public/platform/WebTraceLocation.h" |
52 #include <v8.h> | 52 #include <v8.h> |
53 | 53 |
54 namespace blink { | 54 namespace blink { |
55 | 55 |
56 static inline ImageBitmapSource* toImageBitmapSourceInternal(const ImageBitmapSo urceUnion& value) | 56 static inline ImageBitmapSource* toImageBitmapSourceInternal(const ImageBitmapSo urceUnion& value) |
57 { | 57 { |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
215 } | 215 } |
216 | 216 |
217 void ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread(WebTask Runner* taskRunner) | 217 void ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread(WebTask Runner* taskRunner) |
218 { | 218 { |
219 ASSERT(!isMainThread()); | 219 ASSERT(!isMainThread()); |
220 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create((char*)m_loader.arr ayBufferResult()->data(), static_cast<size_t>(m_loader.arrayBufferResult()->byte Length())); | 220 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create((char*)m_loader.arr ayBufferResult()->data(), static_cast<size_t>(m_loader.arrayBufferResult()->byte Length())); |
221 | 221 |
222 ImageDecoder::AlphaOption alphaOp = ImageDecoder::AlphaPremultiplied; | 222 ImageDecoder::AlphaOption alphaOp = ImageDecoder::AlphaPremultiplied; |
223 if (m_options.premultiplyAlpha() == "none") | 223 if (m_options.premultiplyAlpha() == "none") |
224 alphaOp = ImageDecoder::AlphaNotPremultiplied; | 224 alphaOp = ImageDecoder::AlphaNotPremultiplied; |
225 OwnPtr<ImageDecoder> decoder(ImageDecoder::create(*sharedBuffer, alphaOp, Im ageDecoder::GammaAndColorProfileApplied)); | 225 OwnPtr<DeferredImageDecoder> decoder(DeferredImageDecoder::create(*sharedBuf fer, alphaOp, ImageDecoder::GammaAndColorProfileApplied)); |
226 if (decoder) | 226 if (decoder) |
227 decoder->setData(sharedBuffer.get(), true); | 227 decoder->setData(*sharedBuffer, true); |
228 taskRunner->postTask(BLINK_FROM_HERE, threadSafeBind(&ImageBitmapFactories:: ImageBitmapLoader::resolvePromiseOnOriginalThread, AllowCrossThreadAccess(this), decoder.release())); | 228 taskRunner->postTask(BLINK_FROM_HERE, threadSafeBind(&ImageBitmapFactories:: ImageBitmapLoader::resolvePromiseOnOriginalThread, AllowCrossThreadAccess(this), decoder.release())); |
229 } | 229 } |
230 | 230 |
231 void ImageBitmapFactories::ImageBitmapLoader::resolvePromiseOnOriginalThread(Pas sOwnPtr<ImageDecoder> decoder) | 231 void ImageBitmapFactories::ImageBitmapLoader::resolvePromiseOnOriginalThread(Pas sOwnPtr<DeferredImageDecoder> decoder) |
232 { | 232 { |
233 if (!decoder) { | 233 if (!decoder) { |
234 rejectPromise(); | 234 rejectPromise(); |
235 return; | 235 return; |
236 } | 236 } |
237 RefPtr<SkImage> frame = ImageBitmap::getSkImageFromDecoder(decoder); | 237 RefPtr<SkImage> frame = decoder->createFrameAtIndex(0); |
Justin Novosad
2016/03/09 16:41:03
Have you verified this in tracing? The DeferredIma
xidachen
2016/03/09 17:49:26
I agree that getting the SkImage on the worker thr
| |
238 ASSERT(!frame || (frame->width() && frame->height())); | 238 ASSERT(!frame || (frame->width() && frame->height())); |
239 if (!frame) { | 239 if (!frame) { |
240 rejectPromise(); | 240 rejectPromise(); |
241 return; | 241 return; |
242 } | 242 } |
243 | 243 |
244 RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(frame); | 244 RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(frame); |
245 image->setOriginClean(true); | 245 image->setOriginClean(true); |
246 if (!m_cropRect.width() && !m_cropRect.height()) { | 246 if (!m_cropRect.width() && !m_cropRect.height()) { |
247 // No cropping variant was called. | 247 // No cropping variant was called. |
(...skipping 10 matching lines...) Expand all Loading... | |
258 m_factory->didFinishLoading(this); | 258 m_factory->didFinishLoading(this); |
259 } | 259 } |
260 | 260 |
261 DEFINE_TRACE(ImageBitmapFactories::ImageBitmapLoader) | 261 DEFINE_TRACE(ImageBitmapFactories::ImageBitmapLoader) |
262 { | 262 { |
263 visitor->trace(m_factory); | 263 visitor->trace(m_factory); |
264 visitor->trace(m_resolver); | 264 visitor->trace(m_resolver); |
265 } | 265 } |
266 | 266 |
267 } // namespace blink | 267 } // namespace blink |
OLD | NEW |