Changeset 129032 in webkit


Ignore:
Timestamp:
Sep 19, 2012, 12:17:47 PM (13 years ago)
Author:
hclam@chromium.org
Message:

[chromium] WebImage should use ImageDecoder directly
https://bugs.webkit.org/show_bug.cgi?id=96135

Reviewed by Adam Barth.

This patch is for preparation of deferred image decoding.
ImageSource will be used as a portal to access deferred image decoder
by BitmapImage, it should not be accessible through WebKit APIs.

WebImage now calls ImageDecoder directly which is the actual
implementation of an image decoder.

Tests: WebImageTest.PNGImage

WebImageTest.ICOImage
WebImageTest.BadImage

  • WebKit.gypi:
  • src/WebImageSkia.cpp:

(WebKit::WebImage::fromData):
(WebKit::WebImage::framesFromData):

  • tests/WebImageTest.cpp: Added.

(WebKit):
(WebKit::readFile):
(WebKit::TEST):

  • tests/data/black-and-white.ico: Added.
  • tests/data/white-1x1.png: Added.
Location:
trunk/Source/WebKit/chromium
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r129029 r129032  
     12012-09-19  Alpha Lam  <hclam@chromium.org>
     2
     3        [chromium] WebImage should use ImageDecoder directly
     4        https://bugs.webkit.org/show_bug.cgi?id=96135
     5
     6        Reviewed by Adam Barth.
     7
     8        This patch is for preparation of deferred image decoding.
     9        ImageSource will be used as a portal to access deferred image decoder
     10        by BitmapImage, it should not be accessible through WebKit APIs.
     11
     12        WebImage now calls ImageDecoder directly which is the actual
     13        implementation of an image decoder.
     14
     15        Tests: WebImageTest.PNGImage
     16               WebImageTest.ICOImage
     17               WebImageTest.BadImage
     18
     19        * WebKit.gypi:
     20        * src/WebImageSkia.cpp:
     21        (WebKit::WebImage::fromData):
     22        (WebKit::WebImage::framesFromData):
     23        * tests/WebImageTest.cpp: Added.
     24        (WebKit):
     25        (WebKit::readFile):
     26        (WebKit::TEST):
     27        * tests/data/black-and-white.ico: Added.
     28        * tests/data/white-1x1.png: Added.
     29
    1302012-09-19  Oli Lan  <olilan@chromium.org>
    231
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r128942 r129032  
    104104            'tests/WebFrameTest.cpp',
    105105            'tests/WebInputEventConversionTest.cpp',
     106            'tests/WebImageTest.cpp',
    106107            'tests/WebMediaPlayerClientImplTest.cpp',
    107108            'tests/WebPageNewSerializerTest.cpp',
  • trunk/Source/WebKit/chromium/src/WebImageSkia.cpp

    r128942 r129032  
    3232
    3333#include "Image.h"
    34 #include "ImageSource.h"
     34#include "ImageDecoder.h"
    3535#include "NativeImageSkia.h"
    3636#include "SharedBuffer.h"
     
    5252WebImage WebImage::fromData(const WebData& data, const WebSize& desiredSize)
    5353{
    54     ImageSource source;
    55     source.setData(PassRefPtr<SharedBuffer>(data).get(), true);
    56     if (!source.isSizeAvailable())
     54    RefPtr<SharedBuffer> buffer = PassRefPtr<SharedBuffer>(data);
     55    OwnPtr<ImageDecoder> decoder(adoptPtr(ImageDecoder::create(*buffer.get(), ImageSource::AlphaPremultiplied, ImageSource::GammaAndColorProfileApplied)));
     56    if (!decoder)
     57        return WebImage();
     58
     59    decoder->setData(buffer.get(), true);
     60    if (!decoder->isSizeAvailable())
    5761        return WebImage();
    5862
     
    6064    // Pick the frame closest to |desiredSize|'s area without being smaller,
    6165    // which has the highest bit depth.
    62     const size_t frameCount = source.frameCount();
     66    const size_t frameCount = decoder->frameCount();
    6367    size_t index = 0;  // Default to first frame if none are large enough.
    6468    int frameAreaAtIndex = 0;
    6569    for (size_t i = 0; i < frameCount; ++i) {
    66         const IntSize frameSize = source.frameSizeAtIndex(i);
     70        const IntSize frameSize = decoder->frameSizeAtIndex(i);
    6771        if (WebSize(frameSize) == desiredSize) {
    6872            index = i;
     
    8084    }
    8185
    82     OwnPtr<NativeImageSkia> frame = adoptPtr(source.createFrameAtIndex(index));
     86    ImageFrame* frame = decoder->frameBufferAtIndex(index);
    8387    if (!frame)
    8488        return WebImage();
    8589
    86     return WebImage(frame->bitmap());
     90    OwnPtr<NativeImageSkia> image = adoptPtr(frame->asNewNativeImage());
     91    if (!image)
     92        return WebImage();
     93
     94    return WebImage(image->bitmap());
    8795}
    8896
     
    92100    const size_t maxFrameCount = 8;
    93101
    94     ImageSource source;
    95     source.setData(PassRefPtr<SharedBuffer>(data).get(), true);
    96     if (!source.isSizeAvailable())
     102    RefPtr<SharedBuffer> buffer = PassRefPtr<SharedBuffer>(data);
     103    OwnPtr<ImageDecoder> decoder(adoptPtr(ImageDecoder::create(*buffer.get(), ImageSource::AlphaPremultiplied, ImageSource::GammaAndColorProfileApplied)));
     104    if (!decoder)
     105        return WebVector<WebImage>();
     106
     107    decoder->setData(buffer.get(), true);
     108    if (!decoder->isSizeAvailable())
    97109        return WebVector<WebImage>();
    98110
    99111    // Frames are arranged by decreasing size, then decreasing bit depth.
    100112    // Keep the first frame at every size, has the highest bit depth.
    101     const size_t frameCount = source.frameCount();
     113    const size_t frameCount = decoder->frameCount();
    102114    IntSize lastSize;
    103115
    104116    Vector<WebImage> frames;
    105117    for (size_t i = 0; i < std::min(frameCount, maxFrameCount); ++i) {
    106         const IntSize frameSize = source.frameSizeAtIndex(i);
     118        const IntSize frameSize = decoder->frameSizeAtIndex(i);
    107119        if (frameSize == lastSize)
    108120            continue;
    109121        lastSize = frameSize;
    110122
    111         OwnPtr<NativeImageSkia> frame = adoptPtr(source.createFrameAtIndex(i));
    112         if (frame)
    113             frames.append(WebImage(frame->bitmap()));
     123        ImageFrame* frame = decoder->frameBufferAtIndex(i);
     124        if (!frame)
     125            continue;
     126
     127        OwnPtr<NativeImageSkia> image = adoptPtr(frame->asNewNativeImage());
     128        if (image.get())
     129            frames.append(WebImage(image->bitmap()));
    114130    }
    115131
Note: See TracChangeset for help on using the changeset viewer.