Files
tubestation/gfx/layers/ipc/UiCompositorControllerChild.h
Randall Barker c955f482b1 Bug 1335895 - Android GeckoView Dynamic Toolbar Version 3 r=botond,dvander,jchen,kats
This version of the Dynamic Toolbar moves the animation of the toolbar
from the Android UI thread to the compositor thread. All animation for
showing and hiding the toolbar are done with the compositor and a static
snapshot of the real toolbar.

MozReview-Commit-ID: BCe8zpbkWQt
2017-04-20 15:15:14 -07:00

80 lines
3.1 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=99: */
/* 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 include_gfx_ipc_UiCompositorControllerChild_h
#define include_gfx_ipc_UiCompositorControllerChild_h
#include "mozilla/layers/PUiCompositorControllerChild.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/Maybe.h"
#include "mozilla/ipc/Shmem.h"
#include "mozilla/layers/UiCompositorControllerParent.h"
#include "mozilla/RefPtr.h"
#include "nsThread.h"
class nsBaseWidget;
namespace mozilla {
namespace layers {
class UiCompositorControllerChild final : protected PUiCompositorControllerChild
{
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(UiCompositorControllerChild)
static RefPtr<UiCompositorControllerChild> CreateForSameProcess(const int64_t& aRootLayerTreeId);
static RefPtr<UiCompositorControllerChild> CreateForGPUProcess(const uint64_t& aProcessToken,
Endpoint<PUiCompositorControllerChild>&& aEndpoint);
bool Pause();
bool Resume();
bool ResumeAndResize(const int32_t& aHeight, const int32_t& aWidth);
bool InvalidateAndRender();
bool SetMaxToolbarHeight(const int32_t& aHeight);
bool SetPinned(const bool& aPinned, const int32_t& aReason);
bool ToolbarAnimatorMessageFromUI(const int32_t& aMessage);
bool SetDefaultClearColor(const uint32_t& aColor);
bool RequestScreenPixels();
bool EnableLayerUpdateNotifications(const bool& aEnable);
bool ToolbarPixelsToCompositor(Shmem& aMem, const ScreenIntSize& aSize);
void Destroy();
void SetBaseWidget(nsBaseWidget* aWidget);
bool AllocPixelBuffer(const int32_t aSize, Shmem* aMem);
bool DeallocPixelBuffer(Shmem& aMem);
protected:
void ActorDestroy(ActorDestroyReason aWhy) override;
void DeallocPUiCompositorControllerChild() override;
void ProcessingError(Result aCode, const char* aReason) override;
virtual void HandleFatalError(const char* aName, const char* aMsg) const override;
mozilla::ipc::IPCResult RecvToolbarAnimatorMessageFromCompositor(const int32_t& aMessage) override;
mozilla::ipc::IPCResult RecvRootFrameMetrics(const ScreenPoint& aScrollOffset, const CSSToScreenScale& aZoom, const CSSRect& aPage) override;
mozilla::ipc::IPCResult RecvScreenPixels(ipc::Shmem&& aMem, const ScreenIntSize& aSize) override;
private:
explicit UiCompositorControllerChild(const uint64_t& aProcessToken);
~UiCompositorControllerChild();
void OpenForSameProcess();
void OpenForGPUProcess(Endpoint<PUiCompositorControllerChild>&& aEndpoint);
void SendCachedValues();
bool mIsOpen;
uint64_t mProcessToken;
Maybe<gfx::IntSize> mResize;
Maybe<int32_t> mMaxToolbarHeight;
Maybe<uint32_t> mDefaultClearColor;
Maybe<bool> mLayerUpdateEnabled;
nsBaseWidget* mWidget;
// Should only be set when compositor is in process.
RefPtr<UiCompositorControllerParent> mParent;
};
} // namespace layers
} // namespace mozilla
#endif // include_gfx_ipc_UiCompositorControllerChild_h