gfx/layers/ipc/SharedRGBImage.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include "SharedRGBImage.h"
     6 #include "ImageTypes.h"                 // for ImageFormat::SHARED_RGB, etc
     7 #include "Shmem.h"                      // for Shmem
     8 #include "gfx2DGlue.h"                  // for ImageFormatToSurfaceFormat, etc
     9 #include "gfxPlatform.h"                // for gfxPlatform, gfxImageFormat
    10 #include "mozilla/layers/ISurfaceAllocator.h"  // for ISurfaceAllocator, etc
    11 #include "mozilla/layers/ImageClient.h"  // for ImageClient
    12 #include "mozilla/layers/ImageDataSerializer.h"  // for ImageDataSerializer
    13 #include "mozilla/layers/LayersSurfaces.h"  // for SurfaceDescriptor, etc
    14 #include "mozilla/layers/TextureClient.h"  // for BufferTextureClient, etc
    15 #include "mozilla/layers/ImageBridgeChild.h"  // for ImageBridgeChild
    16 #include "mozilla/mozalloc.h"           // for operator delete, etc
    17 #include "nsAutoPtr.h"                  // for nsRefPtr
    18 #include "nsDebug.h"                    // for NS_WARNING, NS_ASSERTION
    19 #include "nsISupportsImpl.h"            // for Image::AddRef, etc
    20 #include "nsRect.h"                     // for nsIntRect
    21 #include "nsSize.h"                     // for nsIntSize
    23 // Just big enough for a 1080p RGBA32 frame
    24 #define MAX_FRAME_SIZE (16 * 1024 * 1024)
    26 namespace mozilla {
    27 namespace layers {
    29 already_AddRefed<Image>
    30 CreateSharedRGBImage(ImageContainer *aImageContainer,
    31                      nsIntSize aSize,
    32                      gfxImageFormat aImageFormat)
    33 {
    34   NS_ASSERTION(aImageFormat == gfxImageFormat::ARGB32 ||
    35                aImageFormat == gfxImageFormat::RGB24 ||
    36                aImageFormat == gfxImageFormat::RGB16_565,
    37                "RGB formats supported only");
    39   if (!aImageContainer) {
    40     NS_WARNING("No ImageContainer to allocate SharedRGBImage");
    41     return nullptr;
    42   }
    44   nsRefPtr<Image> image = aImageContainer->CreateImage(ImageFormat::SHARED_RGB);
    46   if (!image) {
    47     NS_WARNING("Failed to create SharedRGBImage");
    48     return nullptr;
    49   }
    51   nsRefPtr<SharedRGBImage> rgbImage = static_cast<SharedRGBImage*>(image.get());
    52   if (!rgbImage->Allocate(gfx::ToIntSize(aSize),
    53                           gfx::ImageFormatToSurfaceFormat(aImageFormat))) {
    54     NS_WARNING("Failed to allocate a shared image");
    55     return nullptr;
    56   }
    57   return image.forget();
    58 }
    60 SharedRGBImage::SharedRGBImage(ImageClient* aCompositable)
    61 : Image(nullptr, ImageFormat::SHARED_RGB)
    62 , mCompositable(aCompositable)
    63 {
    64   MOZ_COUNT_CTOR(SharedRGBImage);
    65 }
    67 SharedRGBImage::~SharedRGBImage()
    68 {
    69   MOZ_COUNT_DTOR(SharedRGBImage);
    71   if (mCompositable->GetAsyncID() != 0 &&
    72       !InImageBridgeChildThread()) {
    73     ImageBridgeChild::DispatchReleaseTextureClient(mTextureClient.forget().drop());
    74     ImageBridgeChild::DispatchReleaseImageClient(mCompositable.forget().drop());
    75   }
    76 }
    78 bool
    79 SharedRGBImage::Allocate(gfx::IntSize aSize, gfx::SurfaceFormat aFormat)
    80 {
    81   mSize = aSize;
    82   mTextureClient = mCompositable->CreateBufferTextureClient(aFormat);
    83   return mTextureClient->AllocateForSurface(aSize);
    84 }
    86 uint8_t*
    87 SharedRGBImage::GetBuffer()
    88 {
    89   if (!mTextureClient) {
    90     return nullptr;
    91   }
    93   ImageDataSerializer serializer(mTextureClient->GetBuffer(), mTextureClient->GetBufferSize());
    94   return serializer.GetData();
    95 }
    97 gfx::IntSize
    98 SharedRGBImage::GetSize()
    99 {
   100   return mSize;
   101 }
   103 size_t
   104 SharedRGBImage::GetBufferSize()
   105 {
   106   return mTextureClient ? mTextureClient->GetBufferSize()
   107                         : 0;
   108 }
   110 TextureClient*
   111 SharedRGBImage::GetTextureClient(CompositableClient* aClient)
   112 {
   113   return mTextureClient.get();
   114 }
   116 TemporaryRef<gfx::SourceSurface>
   117 SharedRGBImage::GetAsSourceSurface()
   118 {
   119   return nullptr;
   120 }
   122 } // namespace layers
   123 } // namespace mozilla

mercurial