tor-browser

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

CompositeProcessD3D11FencesHolderMap.h (2408B)


      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_CompositeProcessD3D11FencesHolderMap_H
      8 #define MOZILLA_GFX_CompositeProcessD3D11FencesHolderMap_H
      9 
     10 #include <d3d11.h>
     11 #include <vector>
     12 
     13 #include "mozilla/gfx/FileHandleWrapper.h"
     14 #include "mozilla/layers/LayersTypes.h"
     15 #include "mozilla/Monitor.h"
     16 #include "mozilla/StaticPtr.h"
     17 
     18 namespace mozilla {
     19 namespace layers {
     20 
     21 class FenceD3D11;
     22 
     23 /**
     24 * A class to manage FenceD3D11 that is shared in GPU process.
     25 */
     26 class CompositeProcessD3D11FencesHolderMap {
     27 public:
     28  static void Init();
     29  static void Shutdown();
     30  static CompositeProcessD3D11FencesHolderMap* Get() { return sInstance; }
     31 
     32  CompositeProcessD3D11FencesHolderMap();
     33  ~CompositeProcessD3D11FencesHolderMap();
     34 
     35  void Register(CompositeProcessFencesHolderId aHolderId);
     36  void RegisterReference(CompositeProcessFencesHolderId aHolderId);
     37  void Unregister(CompositeProcessFencesHolderId aHolderId);
     38 
     39  void SetWriteFence(CompositeProcessFencesHolderId aHolderId,
     40                     RefPtr<FenceD3D11> aWriteFence);
     41  void SetReadFence(CompositeProcessFencesHolderId aHolderId,
     42                    RefPtr<FenceD3D11> aReadFence);
     43 
     44  bool WaitWriteFence(CompositeProcessFencesHolderId aHolderId,
     45                      ID3D11Device* aDevice);
     46  std::pair<const RefPtr<gfx::FileHandleWrapper>, uint64_t>
     47  GetWriteFenceHandleAndValue(CompositeProcessFencesHolderId aHolderId) const;
     48  bool WaitAllFencesAndForget(CompositeProcessFencesHolderId aHolderId,
     49                              ID3D11Device* aDevice);
     50 
     51 private:
     52  struct FencesHolder {
     53    FencesHolder() = default;
     54 
     55    RefPtr<FenceD3D11> mWriteFence;
     56    std::vector<RefPtr<FenceD3D11>> mReadFences;
     57    uint32_t mOwners = 1;
     58  };
     59 
     60  mutable Monitor mMonitor;
     61 
     62  std::unordered_map<CompositeProcessFencesHolderId, UniquePtr<FencesHolder>,
     63                     CompositeProcessFencesHolderId::HashFn>
     64      mFencesHolderById MOZ_GUARDED_BY(mMonitor);
     65 
     66  static StaticAutoPtr<CompositeProcessD3D11FencesHolderMap> sInstance;
     67 };
     68 
     69 }  // namespace layers
     70 }  // namespace mozilla
     71 
     72 #endif /* MOZILLA_GFX_CompositeProcessD3D11FencesHolderMap_H */