| Index: webkit/plugins/ppapi/ppb_image_data_impl.h
|
| ===================================================================
|
| --- webkit/plugins/ppapi/ppb_image_data_impl.h (revision 213561)
|
| +++ webkit/plugins/ppapi/ppb_image_data_impl.h (working copy)
|
| @@ -1,196 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef WEBKIT_PLUGINS_PPAPI_PPB_IMAGE_DATA_IMPL_H_
|
| -#define WEBKIT_PLUGINS_PPAPI_PPB_IMAGE_DATA_IMPL_H_
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "ppapi/c/ppb_image_data.h"
|
| -#include "ppapi/shared_impl/ppb_image_data_shared.h"
|
| -#include "ppapi/shared_impl/resource.h"
|
| -#include "ppapi/thunk/ppb_image_data_api.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "webkit/plugins/ppapi/plugin_delegate.h"
|
| -#include "webkit/plugins/webkit_plugins_export.h"
|
| -
|
| -class SkBitmap;
|
| -class SkCanvas;
|
| -
|
| -namespace webkit {
|
| -namespace ppapi {
|
| -
|
| -class WEBKIT_PLUGINS_EXPORT PPB_ImageData_Impl
|
| - : public ::ppapi::Resource,
|
| - public ::ppapi::PPB_ImageData_Shared,
|
| - public NON_EXPORTED_BASE(::ppapi::thunk::PPB_ImageData_API) {
|
| - public:
|
| - // We delegate most of our implementation to a back-end class that either uses
|
| - // a PlatformCanvas (for most trusted stuff) or bare shared memory (for use by
|
| - // NaCl, or trusted plugins when the PlatformCanvas isn't needed). This makes
|
| - // it cheap & easy to implement Swap.
|
| - class Backend {
|
| - public:
|
| - virtual ~Backend() {};
|
| - virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| - int width, int height, bool init_to_zero) = 0;
|
| - virtual bool IsMapped() const = 0;
|
| - virtual PluginDelegate::PlatformImage2D* PlatformImage() const = 0;
|
| - virtual void* Map() = 0;
|
| - virtual void Unmap() = 0;
|
| - virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) = 0;
|
| - virtual SkCanvas* GetPlatformCanvas() = 0;
|
| - virtual SkCanvas* GetCanvas() = 0;
|
| - virtual const SkBitmap* GetMappedBitmap() const = 0;
|
| - };
|
| -
|
| - // If you call this constructor, you must also call Init before use. Normally
|
| - // you should use the static Create function, but this constructor is needed
|
| - // for some internal uses of ImageData (like Graphics2D).
|
| - PPB_ImageData_Impl(PP_Instance instance,
|
| - PPB_ImageData_Shared::ImageDataType type);
|
| - virtual ~PPB_ImageData_Impl();
|
| -
|
| - bool Init(PP_ImageDataFormat format,
|
| - int width, int height,
|
| - bool init_to_zero);
|
| -
|
| - static PP_Resource Create(PP_Instance pp_instance,
|
| - PPB_ImageData_Shared::ImageDataType type,
|
| - PP_ImageDataFormat format,
|
| - const PP_Size& size,
|
| - PP_Bool init_to_zero);
|
| -
|
| - int width() const { return width_; }
|
| - int height() const { return height_; }
|
| -
|
| - // Returns the image format.
|
| - PP_ImageDataFormat format() const { return format_; }
|
| -
|
| - // Returns true if this image is mapped. False means that the image is either
|
| - // invalid or not mapped. See ImageDataAutoMapper below.
|
| - bool IsMapped() const;
|
| - PluginDelegate::PlatformImage2D* PlatformImage() const;
|
| -
|
| - // Resource override.
|
| - virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE;
|
| -
|
| - // PPB_ImageData_API implementation.
|
| - virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE;
|
| - virtual void* Map() OVERRIDE;
|
| - virtual void Unmap() OVERRIDE;
|
| - virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| - virtual SkCanvas* GetPlatformCanvas() OVERRIDE;
|
| - virtual SkCanvas* GetCanvas() OVERRIDE;
|
| - virtual void SetIsCandidateForReuse() OVERRIDE;
|
| -
|
| - const SkBitmap* GetMappedBitmap() const;
|
| -
|
| - private:
|
| - PP_ImageDataFormat format_;
|
| - int width_;
|
| - int height_;
|
| - scoped_ptr<Backend> backend_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PPB_ImageData_Impl);
|
| -};
|
| -
|
| -class ImageDataPlatformBackend : public PPB_ImageData_Impl::Backend {
|
| - public:
|
| - ImageDataPlatformBackend();
|
| - virtual ~ImageDataPlatformBackend();
|
| -
|
| - // PPB_ImageData_Impl::Backend implementation.
|
| - virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| - int width, int height, bool init_to_zero) OVERRIDE;
|
| - virtual bool IsMapped() const OVERRIDE;
|
| - virtual PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE;
|
| - virtual void* Map() OVERRIDE;
|
| - virtual void Unmap() OVERRIDE;
|
| - virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| - virtual SkCanvas* GetPlatformCanvas() OVERRIDE;
|
| - virtual SkCanvas* GetCanvas() OVERRIDE;
|
| - virtual const SkBitmap* GetMappedBitmap() const OVERRIDE;
|
| -
|
| - private:
|
| - // This will be NULL before initialization, and if this PPB_ImageData_Impl is
|
| - // swapped with another.
|
| - scoped_ptr<PluginDelegate::PlatformImage2D> platform_image_;
|
| -
|
| - // When the device is mapped, this is the image. Null when umapped.
|
| - scoped_ptr<SkCanvas> mapped_canvas_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ImageDataPlatformBackend);
|
| -};
|
| -
|
| -class ImageDataSimpleBackend : public PPB_ImageData_Impl::Backend {
|
| - public:
|
| - ImageDataSimpleBackend();
|
| - virtual ~ImageDataSimpleBackend();
|
| -
|
| - // PPB_ImageData_Impl::Backend implementation.
|
| - bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| - int width, int height, bool init_to_zero) OVERRIDE;
|
| - virtual bool IsMapped() const OVERRIDE;
|
| - PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE;
|
| - virtual void* Map() OVERRIDE;
|
| - virtual void Unmap() OVERRIDE;
|
| - virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| - virtual SkCanvas* GetPlatformCanvas() OVERRIDE;
|
| - virtual SkCanvas* GetCanvas() OVERRIDE;
|
| - virtual const SkBitmap* GetMappedBitmap() const OVERRIDE;
|
| -
|
| - private:
|
| - scoped_ptr<base::SharedMemory> shared_memory_;
|
| - // skia_bitmap_ is backed by shared_memory_.
|
| - SkBitmap skia_bitmap_;
|
| - scoped_ptr<SkCanvas> skia_canvas_;
|
| - uint32 map_count_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ImageDataSimpleBackend);
|
| -};
|
| -
|
| -// Manages mapping an image resource if necessary. Use this to ensure the
|
| -// image is mapped. The destructor will put the image back into the previous
|
| -// state. You must check is_valid() to make sure the image was successfully
|
| -// mapped before using it.
|
| -//
|
| -// Example:
|
| -// ImageDataAutoMapper mapper(image_data);
|
| -// if (!mapper.is_valid())
|
| -// return utter_failure;
|
| -// image_data->mapped_canvas()->blah(); // Guaranteed valid.
|
| -class ImageDataAutoMapper {
|
| - public:
|
| - explicit ImageDataAutoMapper(PPB_ImageData_Impl* image_data)
|
| - : image_data_(image_data) {
|
| - if (image_data_->IsMapped()) {
|
| - is_valid_ = true;
|
| - needs_unmap_ = false;
|
| - } else {
|
| - is_valid_ = needs_unmap_ = !!image_data_->Map();
|
| - }
|
| - }
|
| -
|
| - ~ImageDataAutoMapper() {
|
| - if (needs_unmap_)
|
| - image_data_->Unmap();
|
| - }
|
| -
|
| - // Check this to see if the image was successfully mapped. If this is false,
|
| - // the image could not be mapped and is unusable.
|
| - bool is_valid() const { return is_valid_; }
|
| -
|
| - private:
|
| - PPB_ImageData_Impl* image_data_;
|
| - bool is_valid_;
|
| - bool needs_unmap_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ImageDataAutoMapper);
|
| -};
|
| -
|
| -} // namespace ppapi
|
| -} // namespace webkit
|
| -
|
| -#endif // WEBKIT_PLUGINS_PPAPI_PPB_IMAGE_DATA_IMPL_H_
|
|
|