1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "InProcessCompositorWidget.h"
7 #include "mozilla/VsyncDispatcher.h"
8 #include "nsBaseWidget.h"
10 #if defined(MOZ_WIDGET_ANDROID) && !defined(MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING)
11 # include "mozilla/widget/AndroidCompositorWidget.h"
17 // Platforms with no OOP compositor process support use
18 // InProcessCompositorWidget by default.
19 #if !defined(MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING)
21 RefPtr
<CompositorWidget
> CompositorWidget::CreateLocal(
22 const CompositorWidgetInitData
& aInitData
,
23 const layers::CompositorOptions
& aOptions
, nsIWidget
* aWidget
) {
25 # ifdef MOZ_WIDGET_ANDROID
26 return new AndroidCompositorWidget(aOptions
,
27 static_cast<nsBaseWidget
*>(aWidget
));
29 return new InProcessCompositorWidget(aOptions
,
30 static_cast<nsBaseWidget
*>(aWidget
));
35 InProcessCompositorWidget::InProcessCompositorWidget(
36 const layers::CompositorOptions
& aOptions
, nsBaseWidget
* aWidget
)
37 : CompositorWidget(aOptions
), mWidget(aWidget
) {}
39 bool InProcessCompositorWidget::PreRender(WidgetRenderingContext
* aContext
) {
40 return mWidget
->PreRender(aContext
);
43 void InProcessCompositorWidget::PostRender(WidgetRenderingContext
* aContext
) {
44 mWidget
->PostRender(aContext
);
47 void InProcessCompositorWidget::DrawWindowUnderlay(
48 WidgetRenderingContext
* aContext
, LayoutDeviceIntRect aRect
) {
49 mWidget
->DrawWindowUnderlay(aContext
, aRect
);
52 void InProcessCompositorWidget::DrawWindowOverlay(
53 WidgetRenderingContext
* aContext
, LayoutDeviceIntRect aRect
) {
54 mWidget
->DrawWindowOverlay(aContext
, aRect
);
57 already_AddRefed
<gfx::DrawTarget
>
58 InProcessCompositorWidget::StartRemoteDrawing() {
59 return mWidget
->StartRemoteDrawing();
62 already_AddRefed
<gfx::DrawTarget
>
63 InProcessCompositorWidget::StartRemoteDrawingInRegion(
64 LayoutDeviceIntRegion
& aInvalidRegion
, layers::BufferMode
* aBufferMode
) {
65 return mWidget
->StartRemoteDrawingInRegion(aInvalidRegion
, aBufferMode
);
68 void InProcessCompositorWidget::EndRemoteDrawing() {
69 mWidget
->EndRemoteDrawing();
72 void InProcessCompositorWidget::EndRemoteDrawingInRegion(
73 gfx::DrawTarget
* aDrawTarget
, LayoutDeviceIntRegion
& aInvalidRegion
) {
74 mWidget
->EndRemoteDrawingInRegion(aDrawTarget
, aInvalidRegion
);
77 void InProcessCompositorWidget::CleanupRemoteDrawing() {
78 mWidget
->CleanupRemoteDrawing();
81 void InProcessCompositorWidget::CleanupWindowEffects() {
82 mWidget
->CleanupWindowEffects();
85 bool InProcessCompositorWidget::InitCompositor(
86 layers::Compositor
* aCompositor
) {
87 return mWidget
->InitCompositor(aCompositor
);
90 LayoutDeviceIntSize
InProcessCompositorWidget::GetClientSize() {
91 return mWidget
->GetClientSize();
94 uint32_t InProcessCompositorWidget::GetGLFrameBufferFormat() {
95 return mWidget
->GetGLFrameBufferFormat();
98 uintptr_t InProcessCompositorWidget::GetWidgetKey() {
99 return reinterpret_cast<uintptr_t>(mWidget
);
102 nsIWidget
* InProcessCompositorWidget::RealWidget() { return mWidget
; }
104 void InProcessCompositorWidget::ObserveVsync(VsyncObserver
* aObserver
) {
105 if (RefPtr
<CompositorVsyncDispatcher
> cvd
=
106 mWidget
->GetCompositorVsyncDispatcher()) {
107 cvd
->SetCompositorVsyncObserver(aObserver
);
111 } // namespace widget
112 } // namespace mozilla