tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebRenderImageHost.h (3493B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef MOZILLA_GFX_WEBRENDERIMAGEHOST_H
      8 #define MOZILLA_GFX_WEBRENDERIMAGEHOST_H
      9 
     10 #include <deque>
     11 #include <unordered_map>
     12 
     13 #include "CompositableHost.h"               // for CompositableHost
     14 #include "mozilla/layers/ImageComposite.h"  // for ImageComposite
     15 #include "mozilla/webrender/RenderTextureHost.h"
     16 
     17 namespace mozilla {
     18 namespace layers {
     19 
     20 class AsyncImagePipelineManager;
     21 class TextureWrapperD3D11Allocator;
     22 class WebRenderBridgeParent;
     23 class WebRenderBridgeParentRef;
     24 
     25 /**
     26 * ImageHost. Works with ImageClientSingle and ImageClientBuffered
     27 */
     28 class WebRenderImageHost : public CompositableHost, public ImageComposite {
     29 public:
     30  explicit WebRenderImageHost(const TextureInfo& aTextureInfo);
     31  virtual ~WebRenderImageHost();
     32 
     33  void UseTextureHost(const nsTArray<TimedTexture>& aTextures) override;
     34  void RemoveTextureHost(TextureHost* aTexture) override;
     35 
     36  void ClearImages(ClearImagesType aType) override;
     37 
     38  void Dump(std::stringstream& aStream, const char* aPrefix = "",
     39            bool aDumpHtml = false) override;
     40 
     41  void CleanupResources() override;
     42 
     43  void OnReleased() override;
     44 
     45  uint32_t GetDroppedFrames() override { return GetDroppedFramesAndReset(); }
     46 
     47  WebRenderImageHost* AsWebRenderImageHost() override { return this; }
     48 
     49  void PushPendingRemoteTexture(const RemoteTextureId aTextureId,
     50                                const RemoteTextureOwnerId aOwnerId,
     51                                const base::ProcessId aForPid,
     52                                const gfx::IntSize aSize,
     53                                const TextureFlags aFlags);
     54  void UseRemoteTexture();
     55 
     56  TextureHost* GetAsTextureHostForComposite(
     57      AsyncImagePipelineManager* aAsyncImageManager);
     58 
     59  void SetWrBridge(const wr::PipelineId& aPipelineId,
     60                   WebRenderBridgeParent* aWrBridge);
     61 
     62  void ClearWrBridge(const wr::PipelineId& aPipelineId,
     63                     WebRenderBridgeParent* aWrBridge);
     64 
     65  TextureHost* GetCurrentTextureHost() { return mCurrentTextureHost; }
     66 
     67  void SetRenderTextureHostUsageInfo(
     68      RefPtr<wr::RenderTextureHostUsageInfo> aUsageInfo) {
     69    mRenderTextureHostUsageInfo = aUsageInfo;
     70  }
     71  RefPtr<wr::RenderTextureHostUsageInfo> GetRenderTextureHostUsageInfo() const {
     72    return mRenderTextureHostUsageInfo;
     73  }
     74 
     75 protected:
     76  // ImageComposite
     77  TimeStamp GetCompositionTime() const override;
     78  CompositionOpportunityId GetCompositionOpportunityId() const override;
     79  void AppendImageCompositeNotification(
     80      const ImageCompositeNotificationInfo& aInfo) const override;
     81 
     82  void SetCurrentTextureHost(TextureHost* aTexture);
     83 
     84  std::unordered_map<uint64_t, RefPtr<WebRenderBridgeParentRef>> mWrBridges;
     85 
     86  AsyncImagePipelineManager* mCurrentAsyncImageManager;
     87 
     88  CompositableTextureHostRef mCurrentTextureHost;
     89 
     90  std::deque<CompositableTextureHostRef> mPendingRemoteTextureWrappers;
     91  bool mWaitingReadyCallback = false;
     92  bool mWaitForRemoteTextureOwner = true;
     93 
     94  RefPtr<wr::RenderTextureHostUsageInfo> mRenderTextureHostUsageInfo;
     95 
     96 #if XP_WIN
     97  RefPtr<TextureWrapperD3D11Allocator> mTextureAllocator;
     98 #endif
     99 };
    100 
    101 }  // namespace layers
    102 }  // namespace mozilla
    103 
    104 #endif  // MOZILLA_GFX_WEBRENDERIMAGEHOST_H