/src/mozilla-central/gfx/layers/wr/WebRenderCanvasRenderer.cpp
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 | | #include "WebRenderCanvasRenderer.h" |
8 | | |
9 | | #include "GLContext.h" |
10 | | #include "GLScreenBuffer.h" |
11 | | #include "mozilla/layers/CompositorBridgeChild.h" |
12 | | #include "SharedSurfaceGL.h" |
13 | | #include "WebRenderBridgeChild.h" |
14 | | #include "WebRenderLayerManager.h" |
15 | | |
16 | | namespace mozilla { |
17 | | namespace layers { |
18 | | |
19 | | CompositableForwarder* |
20 | | WebRenderCanvasRenderer::GetForwarder() |
21 | 0 | { |
22 | 0 | return mManager->WrBridge(); |
23 | 0 | } |
24 | | |
25 | | void |
26 | | WebRenderCanvasRenderer::Initialize(const CanvasInitializeData& aData) |
27 | 0 | { |
28 | 0 | ShareableCanvasRenderer::Initialize(aData); |
29 | 0 | } |
30 | | |
31 | | WebRenderCanvasRendererAsync::~WebRenderCanvasRendererAsync() |
32 | 0 | { |
33 | 0 | Destroy(); |
34 | 0 | } |
35 | | |
36 | | void |
37 | | WebRenderCanvasRendererAsync::Initialize(const CanvasInitializeData& aData) |
38 | 0 | { |
39 | 0 | WebRenderCanvasRenderer::Initialize(aData); |
40 | 0 |
|
41 | 0 | if (mPipelineId.isSome()) { |
42 | 0 | mManager->WrBridge()->RemovePipelineIdForCompositable(mPipelineId.ref()); |
43 | 0 | mPipelineId.reset(); |
44 | 0 | } |
45 | 0 | } |
46 | | |
47 | | bool |
48 | | WebRenderCanvasRendererAsync::CreateCompositable() |
49 | 0 | { |
50 | 0 | if (!mCanvasClient) { |
51 | 0 | TextureFlags flags = TextureFlags::DEFAULT; |
52 | 0 | if (mOriginPos == gl::OriginPos::BottomLeft) { |
53 | 0 | flags |= TextureFlags::ORIGIN_BOTTOM_LEFT; |
54 | 0 | } |
55 | 0 |
|
56 | 0 | if (!mIsAlphaPremultiplied) { |
57 | 0 | flags |= TextureFlags::NON_PREMULTIPLIED; |
58 | 0 | } |
59 | 0 |
|
60 | 0 | mCanvasClient = CanvasClient::CreateCanvasClient(GetCanvasClientType(), |
61 | 0 | GetForwarder(), |
62 | 0 | flags); |
63 | 0 | if (!mCanvasClient) { |
64 | 0 | return false; |
65 | 0 | } |
66 | 0 | |
67 | 0 | mCanvasClient->Connect(); |
68 | 0 | } |
69 | 0 |
|
70 | 0 | if (!mPipelineId) { |
71 | 0 | // Alloc async image pipeline id. |
72 | 0 | mPipelineId = Some(mManager->WrBridge()->GetCompositorBridgeChild()->GetNextPipelineId()); |
73 | 0 | mManager->WrBridge()->AddPipelineIdForCompositable(mPipelineId.ref(), |
74 | 0 | mCanvasClient->GetIPCHandle()); |
75 | 0 | } |
76 | 0 |
|
77 | 0 | return true; |
78 | 0 | } |
79 | | |
80 | | void |
81 | | WebRenderCanvasRendererAsync::ClearCachedResources() |
82 | 0 | { |
83 | 0 | if (mPipelineId.isSome()) { |
84 | 0 | mManager->WrBridge()->RemovePipelineIdForCompositable(mPipelineId.ref()); |
85 | 0 | mPipelineId.reset(); |
86 | 0 | } |
87 | 0 | } |
88 | | |
89 | | void |
90 | | WebRenderCanvasRendererAsync::Destroy() |
91 | 0 | { |
92 | 0 | if (mPipelineId.isSome()) { |
93 | 0 | mManager->WrBridge()->RemovePipelineIdForCompositable(mPipelineId.ref()); |
94 | 0 | mPipelineId.reset(); |
95 | 0 | } |
96 | 0 | } |
97 | | |
98 | | void |
99 | | WebRenderCanvasRendererAsync::UpdateCompositableClientForEmptyTransaction() |
100 | 0 | { |
101 | 0 | UpdateCompositableClient(); |
102 | 0 | if (mPipelineId.isSome()) { |
103 | 0 | // Notify an update of async image pipeline during empty transaction. |
104 | 0 | // During non empty transaction, WebRenderBridgeParent receives OpUpdateAsyncImagePipeline message, |
105 | 0 | // but during empty transaction, the message is not sent to WebRenderBridgeParent. |
106 | 0 | // Then OpUpdatedAsyncImagePipeline is used to notify the update. |
107 | 0 | mManager->WrBridge()->AddWebRenderParentCommand(OpUpdatedAsyncImagePipeline(mPipelineId.ref())); |
108 | 0 | } |
109 | 0 | } |
110 | | |
111 | | } // namespace layers |
112 | | } // namespace mozilla |