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