Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/gfx/layers/mlgpu/LayerManagerMLGPU.h
Line
Count
Source (jump to first uncovered line)
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_LAYERMANAGERMLGPU_H
8
#define MOZILLA_GFX_LAYERMANAGERMLGPU_H
9
10
#include "Layers.h"
11
#include "mozilla/layers/LayerManagerComposite.h"
12
#include "LayerMLGPU.h"
13
14
namespace mozilla {
15
namespace layers {
16
17
class FrameBuilder;
18
class LayerManagerMLGPU;
19
class RenderPassMLGPU;
20
class SharedBufferMLGPU;
21
class RenderViewMLGPU;
22
class TextRenderer;
23
class TextureSourceProviderMLGPU;
24
class MLGBuffer;
25
class MLGDevice;
26
class MLGSwapChain;
27
class MLGTileBuffer;
28
struct LayerProperties;
29
30
class LayerManagerMLGPU final : public HostLayerManager
31
{
32
public:
33
  explicit LayerManagerMLGPU(widget::CompositorWidget* aWidget);
34
  ~LayerManagerMLGPU();
35
36
  bool Initialize();
37
  void Destroy() override;
38
39
  // LayerManager methods
40
  bool BeginTransaction() override;
41
  void BeginTransactionWithDrawTarget(gfx::DrawTarget* aTarget, const gfx::IntRect& aRect) override;
42
  void SetRoot(Layer* aLayer) override;
43
  already_AddRefed<PaintedLayer> CreatePaintedLayer() override;
44
  already_AddRefed<ContainerLayer> CreateContainerLayer() override;
45
  already_AddRefed<ImageLayer> CreateImageLayer() override;
46
  already_AddRefed<ColorLayer> CreateColorLayer() override;
47
  already_AddRefed<CanvasLayer> CreateCanvasLayer() override;
48
  already_AddRefed<RefLayer> CreateRefLayer() override;
49
50
  bool AreComponentAlphaLayersEnabled() override;
51
  bool BlendingRequiresIntermediateSurface() override;
52
53
  // HostLayerManager methods
54
  void ForcePresent() override;
55
  TextureFactoryIdentifier GetTextureFactoryIdentifier() override;
56
  LayersBackend GetBackendType() override;
57
  void AddInvalidRegion(const nsIntRegion& aRegion) override;
58
  void EndTransaction(const TimeStamp& aTimeStamp, EndTransactionFlags aFlags) override;
59
  void EndTransaction(DrawPaintedLayerCallback aCallback,
60
                      void* aCallbackData,
61
                      EndTransactionFlags aFlags) override;
62
0
  Compositor* GetCompositor() const override {
63
0
    return nullptr;
64
0
  }
65
  bool IsCompositingToScreen() const override;
66
  TextureSourceProvider* GetTextureSourceProvider() const override;
67
  void ClearCachedResources(Layer* aSubtree = nullptr) override;
68
  void NotifyShadowTreeTransaction() override;
69
  void UpdateRenderBounds(const gfx::IntRect& aRect) override;
70
71
0
  void InvalidateAll() override {
72
0
    AddInvalidRegion(nsIntRegion(mRenderBounds));
73
0
  }
74
75
0
  LayerManagerMLGPU* AsLayerManagerMLGPU() override {
76
0
    return this;
77
0
  }
78
0
  const char* Name() const override {
79
0
    return "";
80
0
  }
81
82
  // This should only be called while a FrameBuilder is live.
83
0
  FrameBuilder* GetCurrentFrame() const {
84
0
    MOZ_ASSERT(mCurrentFrame);
85
0
    return mCurrentFrame;
86
0
  }
87
0
  MLGDevice* GetDevice() {
88
0
    return mDevice;
89
0
  }
90
91
0
  TimeStamp GetLastCompositionEndTime() const {
92
0
    return mLastCompositionEndTime;
93
0
  }
94
0
  const nsIntRegion& GetRegionToClear() const {
95
0
    return mRegionToClear;
96
0
  }
97
0
  uint32_t GetDebugFrameNumber() const {
98
0
    return mDebugFrameNumber;
99
0
  }
100
101
private:
102
  void Composite();
103
  void ComputeInvalidRegion();
104
  void RenderLayers();
105
  void DrawDebugOverlay();
106
  bool PreRender();
107
  void PostRender();
108
109
private:
110
  RefPtr<MLGDevice> mDevice;
111
  RefPtr<MLGSwapChain> mSwapChain;
112
  RefPtr<TextureSourceProviderMLGPU> mTextureSourceProvider;
113
  RefPtr<TextRenderer> mTextRenderer;
114
  widget::CompositorWidget* mWidget;
115
116
  UniquePtr<LayerProperties> mClonedLayerTreeProperties;
117
  nsIntRegion mNextFrameInvalidRegion;
118
  gfx::IntRect mRenderBounds;
119
120
  // These are per-frame only.
121
  bool mDrawDiagnostics;
122
  bool mUsingInvalidation;
123
  nsIntRegion mInvalidRegion;
124
  Maybe<widget::WidgetRenderingContext> mWidgetContext;
125
  
126
  IntSize mWindowSize;
127
  TimeStamp mCompositionStartTime;
128
  TimeStamp mLastCompositionEndTime;
129
130
  RefPtr<DrawTarget> mTarget;
131
  gfx::IntRect mTargetRect;
132
  FrameBuilder* mCurrentFrame;
133
134
  // The debug frame number is incremented every frame and is included in the
135
  // WorldConstants bound to vertex shaders. This allows us to correlate
136
  // a frame in RenderDoc to spew in the console.
137
  uint32_t mDebugFrameNumber;
138
  RefPtr<MLGBuffer> mDiagnosticVertices;
139
};
140
141
} // namespace layers
142
} // namespace mozilla
143
144
#endif