blob: befe169271718aba2016e4ed2e3ab4d1380748fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GFX_RENDERROOTSTATEMANAGER_H
#define GFX_RENDERROOTSTATEMANAGER_H
#include "mozilla/webrender/WebRenderAPI.h"
#include "mozilla/layers/IpcResourceUpdateQueue.h"
#include "mozilla/layers/SharedSurfacesChild.h"
#include "mozilla/layers/WebRenderCommandBuilder.h"
namespace mozilla {
namespace layers {
class RenderRootStateManager {
typedef nsTHashtable<nsRefPtrHashKey<WebRenderUserData>>
WebRenderUserDataRefTable;
public:
void AddRef();
void Release();
RenderRootStateManager() : mLayerManager(nullptr), mDestroyed(false) {}
void Destroy();
bool IsDestroyed() { return mDestroyed; }
wr::IpcResourceUpdateQueue& AsyncResourceUpdates();
WebRenderBridgeChild* WrBridge() const;
WebRenderCommandBuilder& CommandBuilder();
WebRenderUserDataRefTable* GetWebRenderUserDataTable();
WebRenderLayerManager* LayerManager() { return mLayerManager; }
void AddImageKeyForDiscard(wr::ImageKey key);
void AddBlobImageKeyForDiscard(wr::BlobImageKey key);
void DiscardImagesInTransaction(wr::IpcResourceUpdateQueue& aResources);
void DiscardLocalImages();
void ClearCachedResources();
// Methods to manage the compositor animation ids. Active animations are still
// going, and when they end we discard them and remove them from the active
// list.
void AddActiveCompositorAnimationId(uint64_t aId);
void AddCompositorAnimationsIdForDiscard(uint64_t aId);
void DiscardCompositorAnimations();
void RegisterAsyncAnimation(const wr::ImageKey& aKey,
SharedSurfacesAnimation* aAnimation);
void DeregisterAsyncAnimation(const wr::ImageKey& aKey);
void ClearAsyncAnimations();
void WrReleasedImages(const nsTArray<wr::ExternalImageKeyPair>& aPairs);
void AddWebRenderParentCommand(const WebRenderParentCommand& aCmd);
void UpdateResources(wr::IpcResourceUpdateQueue& aResources);
void AddPipelineIdForAsyncCompositable(const wr::PipelineId& aPipelineId,
const CompositableHandle& aHandlee);
void AddPipelineIdForCompositable(const wr::PipelineId& aPipelineId,
const CompositableHandle& aHandlee);
void RemovePipelineIdForCompositable(const wr::PipelineId& aPipelineId);
/// Release TextureClient that is bounded to ImageKey.
/// It is used for recycling TextureClient.
void ReleaseTextureOfImage(const wr::ImageKey& aKey);
Maybe<wr::FontInstanceKey> GetFontKeyForScaledFont(
gfx::ScaledFont* aScaledFont,
wr::IpcResourceUpdateQueue* aResources = nullptr);
Maybe<wr::FontKey> GetFontKeyForUnscaledFont(
gfx::UnscaledFont* aUnscaledFont,
wr::IpcResourceUpdateQueue* aResources = nullptr);
void FlushAsyncResourceUpdates();
private:
WebRenderLayerManager* mLayerManager;
Maybe<wr::IpcResourceUpdateQueue> mAsyncResourceUpdates;
nsTArray<wr::ImageKey> mImageKeysToDelete;
nsTArray<wr::BlobImageKey> mBlobImageKeysToDelete;
std::unordered_map<uint64_t, RefPtr<SharedSurfacesAnimation>>
mAsyncAnimations;
// Set of compositor animation ids for which there are active animations (as
// of the last transaction) on the compositor side.
std::unordered_set<uint64_t> mActiveCompositorAnimationIds;
// Compositor animation ids for animations that are done now and that we want
// the compositor to discard information for.
nsTArray<uint64_t> mDiscardedCompositorAnimationsIds;
bool mDestroyed;
friend class WebRenderLayerManager;
};
} // namespace layers
} // namespace mozilla
#endif /* GFX_RENDERROOTSTATEMANAGER_H */
|