1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=4 sw=2 sts=2 et: */
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 GFX_LAYERSCOPE_H
8 #define GFX_LAYERSCOPE_H
9 
10 #include <stdint.h>
11 #include <mozilla/UniquePtr.h>
12 #include "gfxMatrix.h"
13 #include "mozilla/gfx/Rect.h"
14 
15 namespace mozilla {
16 
17 namespace gl {
18 class GLContext;
19 }
20 
21 namespace layers {
22 
23 namespace layerscope {
24 class Packet;
25 }
26 
27 struct EffectChain;
28 class LayerComposite;
29 class TextureHost;
30 
31 class LayerScope {
32  public:
33   static void DrawBegin();
34   static void SetRenderOffset(float aX, float aY);
35   static void SetLayerTransform(const gfx::Matrix4x4& aMatrix);
36   static void SetDrawRects(size_t aRects, const gfx::Rect* aLayerRects,
37                            const gfx::Rect* aTextureRects);
38   static void DrawEnd(gl::GLContext* aGLContext,
39                       const EffectChain& aEffectChain, int aWidth, int aHeight);
40 
41   static void SendLayer(LayerComposite* aLayer, int aWidth, int aHeight);
42   static void SendLayerDump(UniquePtr<layerscope::Packet> aPacket);
43   static bool CheckSendable();
44   static void CleanLayer();
45   static void SetHWComposed();
46 
47   static void SetPixelScale(double devPixelsPerCSSPixel);
48   static void ContentChanged(TextureHost* host);
49 
50  private:
51   static void Init();
52 };
53 
54 // Perform BeginFrame and EndFrame automatically
55 class LayerScopeAutoFrame final {
56  public:
57   explicit LayerScopeAutoFrame(int64_t aFrameStamp);
58   ~LayerScopeAutoFrame();
59 
60  private:
61   static void BeginFrame(int64_t aFrameStamp);
62   static void EndFrame();
63 };
64 
65 }  // namespace layers
66 }  // namespace mozilla
67 
68 #endif /* GFX_LAYERSCOPE_H */
69