blob: 2cc4a176f43b43070190032033f8a8e1fe196a5e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_OZONE_PLATFORM_DRM_HOST_DRM_GPU_PLATFORM_SUPPORT_HOST_H_
#define UI_OZONE_PLATFORM_DRM_HOST_DRM_GPU_PLATFORM_SUPPORT_HOST_H_
#include <vector>
#include "base/callback.h"
#include "base/observer_list.h"
#include "ui/display/types/display_constants.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
#include "ui/ozone/platform/drm/host/gpu_thread_adapter.h"
#include "ui/ozone/public/gpu_platform_support_host.h"
class SkBitmap;
namespace gfx {
class Point;
}
namespace ui {
class DrmCursor;
class DrmDisplayHostMananger;
class DrmOverlayManager;
class GpuThreadObserver;
class DrmGpuPlatformSupportHost : public GpuPlatformSupportHost,
public GpuThreadAdapter,
public IPC::Sender {
public:
DrmGpuPlatformSupportHost(DrmCursor* cursor);
~DrmGpuPlatformSupportHost() override;
// GpuPlatformSupportHost:
void OnChannelEstablished(
int host_id,
scoped_refptr<base::SingleThreadTaskRunner> send_runner,
const base::Callback<void(IPC::Message*)>& send_callback) override;
void OnChannelDestroyed(int host_id) override;
// IPC::Listener:
bool OnMessageReceived(const IPC::Message& message) override;
// IPC::Sender:
bool Send(IPC::Message* message) override;
// GpuThreadAdapter.
// Core functionality.
void AddGpuThreadObserver(GpuThreadObserver* observer) override;
void RemoveGpuThreadObserver(GpuThreadObserver* observer) override;
bool IsConnected() override;
// Services needed for DrmDisplayHostMananger.
void RegisterHandlerForDrmDisplayHostManager(
DrmDisplayHostManager* handler) override;
void UnRegisterHandlerForDrmDisplayHostManager() override;
bool GpuTakeDisplayControl() override;
bool GpuRefreshNativeDisplays() override;
bool GpuRelinquishDisplayControl() override;
bool GpuAddGraphicsDevice(const base::FilePath& path,
const base::FileDescriptor& fd) override;
bool GpuRemoveGraphicsDevice(const base::FilePath& path) override;
// Methods needed for DrmOverlayManager.
// Methods for DrmOverlayManager.
void RegisterHandlerForDrmOverlayManager(DrmOverlayManager* handler) override;
void UnRegisterHandlerForDrmOverlayManager() override;
// Services needed by DrmOverlayManager
bool GpuCheckOverlayCapabilities(
gfx::AcceleratedWidget widget,
const std::vector<OverlayCheck_Params>& new_params) override;
// Services needed by DrmDisplayHost
bool GpuConfigureNativeDisplay(int64_t display_id,
const ui::DisplayMode_Params& display_mode,
const gfx::Point& point) override;
bool GpuDisableNativeDisplay(int64_t display_id) override;
bool GpuGetHDCPState(int64_t display_id) override;
bool GpuSetHDCPState(int64_t display_id, ui::HDCPState state) override;
bool GpuSetColorCorrection(
int64_t display_id,
const std::vector<GammaRampRGBEntry>& degamma_lut,
const std::vector<GammaRampRGBEntry>& gamma_lut,
const std::vector<float>& correction_matrix) override;
// Services needed by DrmWindowHost
bool GpuDestroyWindow(gfx::AcceleratedWidget widget) override;
bool GpuCreateWindow(gfx::AcceleratedWidget widget) override;
bool GpuWindowBoundsChanged(gfx::AcceleratedWidget widget,
const gfx::Rect& bounds) override;
private:
bool OnMessageReceivedForDrmDisplayHostManager(const IPC::Message& message);
void OnUpdateNativeDisplays(
const std::vector<DisplaySnapshot_Params>& displays);
void OnDisplayConfigured(int64_t display_id, bool status);
void OnHDCPStateReceived(int64_t display_id, bool status, HDCPState state);
void OnHDCPStateUpdated(int64_t display_id, bool status);
void OnTakeDisplayControl(bool status);
void OnRelinquishDisplayControl(bool status);
bool OnMessageReceivedForDrmOverlayManager(const IPC::Message& message);
void OnOverlayResult(gfx::AcceleratedWidget widget,
const std::vector<OverlayCheck_Params>& params);
int host_id_ = -1;
scoped_refptr<base::SingleThreadTaskRunner> send_runner_;
base::Callback<void(IPC::Message*)> send_callback_;
DrmDisplayHostManager* display_manager_; // Not owned.
DrmOverlayManager* overlay_manager_; // Not owned.
DrmCursor* cursor_; // Not owned.
base::ObserverList<GpuThreadObserver> gpu_thread_observers_;
};
} // namespace ui
#endif // UI_OZONE_GPU_DRM_GPU_PLATFORM_SUPPORT_HOST_H_