LCOV - code coverage report
Current view: top level - gfx/layers/wr - WebRenderUserData.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 74 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 14 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
       2             :  * This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "WebRenderUserData.h"
       7             : #include "nsDisplayListInvalidation.h"
       8             : 
       9             : namespace mozilla {
      10             : namespace layers {
      11             : 
      12             : WebRenderBridgeChild*
      13           0 : WebRenderUserData::WrBridge() const
      14             : {
      15           0 :   return mWRManager->WrBridge();
      16             : }
      17             : 
      18           0 : WebRenderImageData::WebRenderImageData(WebRenderLayerManager* aWRManager)
      19           0 :   : WebRenderUserData(aWRManager)
      20             : {
      21           0 : }
      22             : 
      23           0 : WebRenderImageData::~WebRenderImageData()
      24             : {
      25           0 :   if (mKey) {
      26           0 :     mWRManager->AddImageKeyForDiscard(mKey.value());
      27             :   }
      28             : 
      29           0 :   if (mExternalImageId) {
      30           0 :     WrBridge()->DeallocExternalImageId(mExternalImageId.ref());
      31             :   }
      32             : 
      33           0 :   if (mPipelineId) {
      34           0 :     WrBridge()->RemovePipelineIdForAsyncCompositable(mPipelineId.ref());
      35             :   }
      36           0 : }
      37             : 
      38             : Maybe<wr::ImageKey>
      39           0 : WebRenderImageData::UpdateImageKey(ImageContainer* aContainer, bool aForceUpdate)
      40             : {
      41           0 :   CreateImageClientIfNeeded();
      42           0 :   CreateExternalImageIfNeeded();
      43             : 
      44           0 :   if (!mImageClient || !mExternalImageId) {
      45           0 :     return Nothing();
      46             :   }
      47             : 
      48           0 :   MOZ_ASSERT(mImageClient->AsImageClientSingle());
      49           0 :   MOZ_ASSERT(aContainer);
      50             : 
      51           0 :   ImageClientSingle* imageClient = mImageClient->AsImageClientSingle();
      52           0 :   uint32_t oldCounter = imageClient->GetLastUpdateGenerationCounter();
      53             : 
      54           0 :   bool ret = imageClient->UpdateImage(aContainer, /* unused */0);
      55           0 :   if (!ret || imageClient->IsEmpty()) {
      56             :     // Delete old key
      57           0 :     if (mKey) {
      58           0 :       mWRManager->AddImageKeyForDiscard(mKey.value());
      59           0 :       mKey = Nothing();
      60             :     }
      61           0 :     return Nothing();
      62             :   }
      63             : 
      64             :   // Reuse old key if generation is not updated.
      65           0 :   if (!aForceUpdate && oldCounter == imageClient->GetLastUpdateGenerationCounter() && mKey) {
      66           0 :     return mKey;
      67             :   }
      68             : 
      69             :   // Delete old key, we are generating a new key.
      70           0 :   if (mKey) {
      71           0 :     mWRManager->AddImageKeyForDiscard(mKey.value());
      72             :   }
      73             : 
      74           0 :   WrImageKey key = WrBridge()->GetNextImageKey();
      75           0 :   mWRManager->WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId.value(), key));
      76           0 :   mKey = Some(key);
      77             : 
      78           0 :   return mKey;
      79             : }
      80             : 
      81             : already_AddRefed<ImageClient>
      82           0 : WebRenderImageData::GetImageClient()
      83             : {
      84           0 :   RefPtr<ImageClient> imageClient = mImageClient;
      85           0 :   return imageClient.forget();
      86             : }
      87             : 
      88             : void
      89           0 : WebRenderImageData::CreateAsyncImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
      90             :                                                       ImageContainer* aContainer,
      91             :                                                       const StackingContextHelper& aSc,
      92             :                                                       const LayerRect& aBounds,
      93             :                                                       const LayerRect& aSCBounds,
      94             :                                                       const Matrix4x4& aSCTransform,
      95             :                                                       const MaybeIntSize& aScaleToSize,
      96             :                                                       const WrImageRendering& aFilter,
      97             :                                                       const WrMixBlendMode& aMixBlendMode)
      98             : {
      99           0 :   MOZ_ASSERT(aContainer->IsAsync());
     100           0 :   if (!mPipelineId) {
     101             :     // Alloc async image pipeline id.
     102           0 :     mPipelineId = Some(WrBridge()->GetCompositorBridgeChild()->GetNextPipelineId());
     103           0 :     WrBridge()->AddPipelineIdForAsyncCompositable(mPipelineId.ref(),
     104           0 :                                                   aContainer->GetAsyncContainerHandle());
     105             :   }
     106           0 :   MOZ_ASSERT(!mImageClient);
     107           0 :   MOZ_ASSERT(!mExternalImageId);
     108             : 
     109             :   // Push IFrame for async image pipeline.
     110             :   //
     111             :   // We don't push a stacking context for this async image pipeline here.
     112             :   // Instead, we do it inside the iframe that hosts the image. As a result,
     113             :   // a bunch of the calculations normally done as part of that stacking
     114             :   // context need to be done manually and pushed over to the parent side,
     115             :   // where it will be done when we build the display list for the iframe.
     116             :   // That happens in WebRenderCompositableHolder.
     117           0 :   WrRect r = aSc.ToRelativeWrRect(aBounds);
     118           0 :   aBuilder.PushIFrame(r, mPipelineId.ref());
     119             : 
     120           0 :   WrBridge()->AddWebRenderParentCommand(OpUpdateAsyncImagePipeline(mPipelineId.value(),
     121             :                                                                    aSCBounds,
     122             :                                                                    aSCTransform,
     123             :                                                                    aScaleToSize,
     124             :                                                                    aFilter,
     125           0 :                                                                    aMixBlendMode));
     126           0 : }
     127             : 
     128             : void
     129           0 : WebRenderImageData::CreateImageClientIfNeeded()
     130             : {
     131           0 :   if (!mImageClient) {
     132           0 :     mImageClient = ImageClient::CreateImageClient(CompositableType::IMAGE,
     133           0 :                                                   WrBridge(),
     134           0 :                                                   TextureFlags::DEFAULT);
     135           0 :     if (!mImageClient) {
     136           0 :       return;
     137             :     }
     138             : 
     139           0 :     mImageClient->Connect();
     140             :   }
     141             : }
     142             : 
     143             : void
     144           0 : WebRenderImageData::CreateExternalImageIfNeeded()
     145             : {
     146           0 :   if (!mExternalImageId)  {
     147           0 :     mExternalImageId = Some(WrBridge()->AllocExternalImageIdForCompositable(mImageClient));
     148             :   }
     149           0 : }
     150             : 
     151           0 : WebRenderFallbackData::~WebRenderFallbackData()
     152             : {
     153           0 : }
     154             : 
     155           0 : WebRenderFallbackData::WebRenderFallbackData(WebRenderLayerManager* aWRManager)
     156           0 :   : WebRenderImageData(aWRManager)
     157             : {
     158           0 : }
     159             : 
     160             : nsAutoPtr<nsDisplayItemGeometry>
     161           0 : WebRenderFallbackData::GetGeometry()
     162             : {
     163           0 :   return mGeometry;
     164             : }
     165             : 
     166             : void
     167           0 : WebRenderFallbackData::SetGeometry(nsAutoPtr<nsDisplayItemGeometry> aGeometry)
     168             : {
     169           0 :   mGeometry = aGeometry;
     170           0 : }
     171             : 
     172             : } // namespace layers
     173             : } // namespace mozilla

Generated by: LCOV version 1.13