LCOV - code coverage report
Current view: top level - gfx/layers/wr - WebRenderLayer.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 57 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 9 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 "WebRenderLayer.h"
       7             : 
       8             : #include "gfxPrefs.h"
       9             : #include "LayersLogging.h"
      10             : #include "mozilla/layers/ImageClient.h"
      11             : #include "mozilla/layers/WebRenderBridgeChild.h"
      12             : #include "mozilla/layers/WebRenderLayerManager.h"
      13             : #include "nsThreadUtils.h"
      14             : #include "UnitTransforms.h"
      15             : 
      16             : namespace mozilla {
      17             : 
      18             : using namespace gfx;
      19             : 
      20             : namespace layers {
      21             : 
      22             : WebRenderLayerManager*
      23           0 : WebRenderLayer::WrManager()
      24             : {
      25           0 :   return static_cast<WebRenderLayerManager*>(GetLayer()->Manager());
      26             : }
      27             : 
      28             : WebRenderBridgeChild*
      29           0 : WebRenderLayer::WrBridge()
      30             : {
      31           0 :   return WrManager()->WrBridge();
      32             : }
      33             : 
      34             : WrImageKey
      35           0 : WebRenderLayer::GetImageKey()
      36             : {
      37             :   WrImageKey key;
      38           0 :   key.mNamespace = WrBridge()->GetNamespace();
      39           0 :   key.mHandle = WrBridge()->GetNextResourceId();
      40           0 :   return key;
      41             : }
      42             : 
      43             : Maybe<WrImageMask>
      44           0 : WebRenderLayer::BuildWrMaskLayer(const StackingContextHelper& aRelativeTo)
      45             : {
      46           0 :   if (GetLayer()->GetMaskLayer()) {
      47           0 :     WebRenderLayer* maskLayer = ToWebRenderLayer(GetLayer()->GetMaskLayer());
      48           0 :     gfx::Matrix4x4 transform = maskLayer->GetLayer()->GetTransform();
      49           0 :     return maskLayer->RenderMaskLayer(aRelativeTo, transform);
      50             :   }
      51             : 
      52           0 :   return Nothing();
      53             : }
      54             : 
      55             : LayerRect
      56           0 : WebRenderLayer::Bounds()
      57             : {
      58           0 :   return LayerRect(GetLayer()->GetVisibleRegion().GetBounds());
      59             : }
      60             : 
      61             : BoundsTransformMatrix
      62           0 : WebRenderLayer::BoundsTransform()
      63             : {
      64           0 :   gfx::Matrix4x4 transform = GetLayer()->GetTransform();
      65           0 :   transform._41 = 0.0f;
      66           0 :   transform._42 = 0.0f;
      67           0 :   transform._43 = 0.0f;
      68           0 :   return ViewAs<BoundsTransformMatrix>(transform);
      69             : }
      70             : 
      71             : LayerRect
      72           0 : WebRenderLayer::BoundsForStackingContext()
      73             : {
      74           0 :   LayerRect bounds = Bounds();
      75           0 :   BoundsTransformMatrix transform = BoundsTransform();
      76           0 :   if (!transform.IsIdentity()) {
      77             :     // WR will only apply the 'translate' of the transform, so we need to do the scale/rotation manually.
      78           0 :     bounds.MoveTo(transform.TransformPoint(bounds.TopLeft()));
      79             :   }
      80             : 
      81           0 :   return bounds;
      82             : }
      83             : 
      84             : Maybe<wr::ImageKey>
      85           0 : WebRenderLayer::UpdateImageKey(ImageClientSingle* aImageClient,
      86             :                                ImageContainer* aContainer,
      87             :                                Maybe<wr::ImageKey>& aOldKey,
      88             :                                wr::ExternalImageId& aExternalImageId)
      89             : {
      90           0 :   MOZ_ASSERT(aImageClient);
      91           0 :   MOZ_ASSERT(aContainer);
      92             : 
      93           0 :   uint32_t oldCounter = aImageClient->GetLastUpdateGenerationCounter();
      94             : 
      95           0 :   bool ret = aImageClient->UpdateImage(aContainer, /* unused */0);
      96           0 :   if (!ret || aImageClient->IsEmpty()) {
      97             :     // Delete old key
      98           0 :     if (aOldKey.isSome()) {
      99           0 :       WrManager()->AddImageKeyForDiscard(aOldKey.value());
     100             :     }
     101           0 :     return Nothing();
     102             :   }
     103             : 
     104             :   // Reuse old key if generation is not updated.
     105           0 :   if (oldCounter == aImageClient->GetLastUpdateGenerationCounter() && aOldKey.isSome()) {
     106           0 :     return aOldKey;
     107             :   }
     108             : 
     109             :   // Delete old key, we are generating a new key.
     110           0 :   if (aOldKey.isSome()) {
     111           0 :     WrManager()->AddImageKeyForDiscard(aOldKey.value());
     112             :   }
     113             : 
     114           0 :   WrImageKey key = GetImageKey();
     115           0 :   WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(aExternalImageId, key));
     116           0 :   return Some(key);
     117             : }
     118             : 
     119             : void
     120           0 : WebRenderLayer::DumpLayerInfo(const char* aLayerType, const LayerRect& aRect)
     121             : {
     122           0 :   if (!gfxPrefs::LayersDump()) {
     123           0 :     return;
     124             :   }
     125             : 
     126           0 :   Layer* layer = GetLayer();
     127           0 :   Matrix4x4 transform = layer->GetTransform();
     128           0 :   LayerRect bounds = Bounds();
     129           0 :   WrMixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetLayer()->GetMixBlendMode());
     130             : 
     131           0 :   printf_stderr("%s %p using bounds=%s, transform=%s, rect=%s, clip=%s, mix-blend-mode=%s\n",
     132             :                 aLayerType,
     133             :                 layer,
     134           0 :                 Stringify(bounds).c_str(),
     135           0 :                 Stringify(transform).c_str(),
     136           0 :                 Stringify(aRect).c_str(),
     137           0 :                 layer->GetClipRect() ? Stringify(layer->GetClipRect().value()).c_str() : "none",
     138           0 :                 Stringify(mixBlendMode).c_str());
     139             : }
     140             : 
     141             : } // namespace layers
     142             : } // namespace mozilla

Generated by: LCOV version 1.13